天天看點

Linux基于OpenSSL實作私有CA建構

前言

随着網際網路的迅猛發展,網絡通信已經成為傳遞資訊的主要途徑。而通信時的資料傳輸大部分卻是明文傳輸的,在網絡這個不安全的環境下,如果沒有一套資料加密機制,就會導緻敏感資訊和重要資料洩露,引起不可估量的損失。而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 &gt; 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

繼續閱讀