前言
随着網際網路的迅猛發展,網絡通信已經成為傳遞資訊的主要途徑。而通信時的資料傳輸大部分卻是明文傳輸的,在網絡這個不安全的環境下,如果沒有一套資料加密機制,就會導緻敏感資訊和重要資料洩露,引起不可估量的損失。而OpenSSL正好彌補了這一缺憾,那什麼是OpenSSL呢?OpenSSL是一套強大的具有加密功能的元件,它包含libcrypto(公共加密庫)、libssl(SSL協定的實作)和openssl(多功能指令工具),因其開源思想,現已廣泛應用于資料通信加密領域。OpenSSL還可在區域網路内建構私有CA,實作區域網路内的證書認證和授權,保證資料傳輸的安全性。如何建構私有CA呢?本文将詳細講述基于OpenSSL實作私有CA建構。
資料加密解密過程
資料加密需要實作的功能:資料私密性,資料完整性,身份認證和秘鑰交換。
<a href="http://s3.51cto.com/wyfs02/M01/5D/12/wKioL1UhMrXjmFLKAAGoWsf2jr4938.jpg" target="_blank"></a>
1
2
3
4
5
<code>加密類型及功能:</code>
<code>單向加密:提取資料特征碼,實作資料完整性驗證</code>
<code>對稱加密:資料加密,實作資料私密性</code>
<code>公鑰加密:使用對方公鑰加密,實作秘鑰交換</code>
<code> </code><code>使用自己私鑰加密,實作身份驗證</code>
公鑰在網絡傳輸過程中,無法保證可信度,容易被竊取或僞裝,是以我們就需要一個受信任的第三方機構(CA)
CA工作流程
<a href="http://s3.51cto.com/wyfs02/M01/5D/17/wKiom1UhP3zhOlgwAAFuYQCT2-c274.jpg" target="_blank"></a>
<code>#A和B各自用CA的公鑰解密對方證書,完成身份驗證</code>
由于CA支援在網際網路上價格不菲,是以在企業内,不牽涉外網通信前提下,完全自行建構一個區域網路内的私有CA.
實作CA建構
OpenSSL可以建構适用于中小型企業的私有CA,如果需要在大型企業建構CA可以用OpenCA,有興趣可以自行Google,這裡就不做詳解了,因為OpenSSL足以滿足大多數需求。
建立CA伺服器
生成秘鑰
<a href="http://s3.51cto.com/wyfs02/M00/5D/12/wKioL1UhK2vighXBAAEfeIsqwqM261.jpg" target="_blank"></a>
<code>指令詳解:</code>
<code>umask</code> <code>077:保證秘鑰檔案其他人無讀寫權限,在()内執行,隻對目前子shell有效</code>
<code>-out </code><code>/path/to/somefile</code><code>:指定生成秘鑰位置 </code>
<code>2048:秘鑰長度,可自定義</code>
<code>#openssl rsa -in private/cakey.pem -pubout -text 可提取公鑰</code>
自簽證書
<a href="http://s3.51cto.com/wyfs02/M00/5D/16/wKiom1UhKkqggqGCAAJaf7CZFq8951.jpg" target="_blank"></a>
6
7
8
9
10
11
12
13
14
15
16
17
<code>req: 生成證書簽署請求</code>
<code> </code><code>-news: 新請求</code>
<code> </code><code>-key </code><code>/path/to/keyfile</code><code>: 指定私鑰檔案</code>
<code> </code><code>-out </code><code>/path/to/somefile</code><code>: 指定生成證書位置</code>
<code> </code><code>-x509: 生成自簽署證書</code>
<code> </code><code>-days n: 有效天數</code>
<code> </code>
<code>#Country Name (2 letter code) [XX]:CN #國家(大寫縮寫)</code>
<code>#State or Province Name (full name) []:Shandong #省份或洲</code>
<code>#Locality Name (eg, city) [Default City]:Qingdao #城市</code>
<code>#Organization Name (eg, company) [Default Company Ltd]:Scholar #公司</code>
<code>#Organizational Unit Name (eg, section) []:Tech #部門</code>
<code>#Common Name (eg, your name or your server's hostname) []:ca.scholar.com</code>
<code>#必須與證書所有者能解析到的名字保持一緻,否則将無法通過驗證</code>
<code>#Email Address []:[email protected] #郵箱</code>
<code>#以上操作預設選項可通過修改配置檔案(/etc/pki/tls/openssl.cnf)修改</code>
初始化工作環境
<a href="http://s3.51cto.com/wyfs02/M01/5D/12/wKioL1UhK7DTZMOIAACW1LCDgMo210.jpg" target="_blank"></a>
<code>index.txt:證書縮影資料庫</code>
<code>serial:簽署證書編号檔案</code>
<code>echo</code> <code>01 > serial </code><code>#設定編号初始值</code>
用戶端申請證書
生成密鑰
<code>#我們給web服務生成請求用于https,在其配置檔案目錄建立用于儲存私鑰和證書的目錄</code>
<a href="http://s3.51cto.com/wyfs02/M00/5D/12/wKioL1UhQ9uyXeJ-AAD_MsmX-h0923.jpg" target="_blank"></a>
生成證書簽署請求
<a href="http://s3.51cto.com/wyfs02/M02/5D/12/wKioL1UhK-mSx2J2AAKAgJzojOY479.jpg" target="_blank"></a>
<code>#A challenge password []: #證書請求需要加密存放,如果添加密碼,需要将密碼一同給CA</code>
<code>#An optional company name []:</code>
将簽署請求檔案發送給CA伺服器
<code>#CA伺服器工作目錄下,手動建立了一個存放證書請求的目錄(存放目錄請随意)</code>
<a href="http://s3.51cto.com/wyfs02/M02/5D/16/wKiom1UhKtngZwBmAABoYCLh2aQ260.jpg" target="_blank"></a>
CA簽署證書
<a href="http://s3.51cto.com/wyfs02/M00/5D/16/wKiom1UhKvfB84JSAAMLWRfqpAg917.jpg" target="_blank"></a>
将簽署的證書發送給請求者
<a href="http://s3.51cto.com/wyfs02/M01/5D/12/wKioL1UhLHCTNzjDAACO6yYHIgk310.jpg" target="_blank"></a>
這樣用戶端就可以配置使用CA簽署的證書,進行加密通信了。如果用戶端的私鑰不慎丢失,或者證書過期了該怎麼辦呢?接下來我們看一下證書怎麼吊銷吧。
證書吊銷
用戶端獲驗證書serial
<a href="http://s3.51cto.com/wyfs02/M01/5D/16/wKiom1UhK1Oxa11lAACJiHbuWzA333.jpg" target="_blank"></a>
CA驗證資訊
根據節點送出的serial和subject資訊來驗正與index.txt檔案中的資訊是否一緻
<a href="http://s3.51cto.com/wyfs02/M02/5D/12/wKioL1UhLK3D78P8AAB4ZgTFq4I099.jpg" target="_blank"></a>
CA吊銷證書
<a href="http://s3.51cto.com/wyfs02/M00/5D/12/wKioL1UhLL2g2HsKAAEQYLhL_uk947.jpg" target="_blank"></a>
CA生成吊銷證書編号(第一次吊銷)
<a href="http://s3.51cto.com/wyfs02/M00/5D/16/wKiom1UhK4nj7Ia5AAAiIg9VCks136.jpg" target="_blank"></a>
CA更新證書吊銷清單
<a href="http://s3.51cto.com/wyfs02/M01/5D/12/wKioL1UhLNyCd9DeAABlxiCdUh0750.jpg" target="_blank"></a>
<code>#如果有需要,可檢視crl檔案的内容</code>
<code>#openssl crl -in /path/to/crlfile.crl -noout -text</code>
好了,證書成功吊銷,可以重新申請了。
The end
本文轉自 北城書生 51CTO部落格,原文連結:http://blog.51cto.com/scholar/1629145