1. 程式人生 > >openssl生成SSL證書的流程 - moonhillcity的部落格 - CSDN部落格

openssl生成SSL證書的流程 - moonhillcity的部落格 - CSDN部落格

1.安裝openssl 之後在/usr/lib/ssl目錄下(ubuntu系統,用whereis查下ssl目錄即可)下找到openssl.cnf,拷貝到工作目錄下。

2.工作目錄下新建demoCA資料夾,資料夾中新建檔案index.txt和serial,再建立一個newcerts的資料夾。在serial裡面新增字元01。

mkdir demoCA

cd demoCA

touch ./{serial, index.txt}

vi serial 新增01 :wq

生成證書過程:(注意以下過程都在工作目錄下進行,即/www/code/)

    

 

 

SSL證書通過在客戶端瀏覽器和Web伺服器之間建立一條SSL安全通道(Secure socketlayer(SSL),SSL安全協議主要用來提供對使用者和伺服器的認證;對傳送的資料進行加密和隱藏;確保資料在傳送中不被改變,即資料的完整性,現已成為該領域中全球化的標準。由於SSL技術已建立到所有主要的瀏覽器和WEB伺服器程式中,因此,僅需安裝伺服器證書就可以啟用該功能了)。即通過它可以啟用SSL協議,實現資料資訊在客戶端和伺服器之間的加密傳輸,可以防止資料資訊的洩露。保證了雙方傳遞資訊的安全性,而且使用者可以通過伺服器證書驗證他所訪問的網站是否是真實可靠。
    SSL網站不同於一般的Web站點,它使用的是“HTTPS”協議,而不是普通的“HTTP”協議。因此它的URL(統一資源定位器)格式為“https://www.baidu.com”。

什麼是x509證書鏈

x509證書一般會用到三類檔案,key,csr,crt。
Key是私用金鑰,openssl格式,通常是rsa演算法。
csr是證書請求檔案,用於申請證書。在製作csr檔案的時候,必須使用自己的私鑰來簽署申請,還可以設定一個金鑰。
crt是CA認證後的證書檔案(windows下面的csr,其實是crt),簽署人用自己的key給你簽署的憑證。

概念

    首先要有一個CA根證書,然後用CA根證書來簽發使用者證書。
    使用者進行證書申請:一般先生成一個私鑰,然後用私鑰生成證書請求(證書請求裡應含有公鑰資訊),再利用證書伺服器的CA根證書來簽發證書。
    特別說明:
(1)自簽名證書(一般用於頂級證書、根證書): 證書的名稱和認證機構的名稱相同.
(2)根證書:根證書是CA認證中心給自己頒發的證書,是信任鏈的起始點。任何安裝CA根證書的伺服器都意味著對這個CA認證中心是信任的。
    數字證書則是由證書認證機構(CA)對證書申請者真實身份驗證之後,用CA的根證書對申請人的一些基本資訊以及申請人的公鑰進行簽名(相當於加蓋發證書機構的公章)後形成的一個數字檔案。數字證書包含證書中所標識的實體的公鑰(就是說你的證書裡有你的公鑰),由於證書將公鑰與特定的個人匹配,並且該證書的真實性由頒發機構保證(就是說可以讓大家相信你的證書是真的),因此,數字證書為如何找到使用者的公鑰並知道它是否有效這一問題提供瞭解決方案。

openssl中有如下字尾名的檔案

.key格式:私有的金鑰
.csr格式:證書籤名請求(證書請求檔案),含有公鑰資訊,certificate signing request的縮寫
.crt格式:證書檔案,certificate的縮寫
.crl格式:證書吊銷列表,Certificate Revocation List的縮寫
.pem格式:用於匯出,匯入證書時候的證書的格式,有證書開頭,結尾的格式

CA根證書的生成步驟

生成CA私鑰(.key)-->生成CA證書請求(.csr)-->自簽名得到根證書(.crt)(CA給自已頒發的證書)。

[plain] view plain copy

  1. # Generate CA private key   

  2. openssl genrsa -out ca.key 2048   

  3. # Generate CSR   

  4. openssl req -new -key ca.key -out ca.csr  

  5. # Generate Self Signed certificate(CA 根證書)  

  6. openssl x509 -req -days 365 -in ca.csr -signkey ca.key -out ca.crt  

在實際的軟體開發工作中,往往伺服器就採用這種自簽名的方式,因為畢竟找第三方簽名機構是要給錢的,也是需要花時間的。

使用者證書的生成步驟

生成私鑰(.key)-->生成證書請求(.csr)-->用CA根證書籤名得到證書(.crt)
伺服器端使用者證書:

[html] view plain copy

  1. # private key  

  2. $openssl genrsa -des3 -out server.key 1024   

  3. # generate csr  

  4. $openssl req -new -key server.key -out server.csr  

  5. # generate certificate  

  6. $openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key  

客戶端使用者證書:

[plain] view plain copy

  1. $openssl genrsa -des3 -out client.key 1024   

  2. $openssl req -new -key client.key -out client.csr  

  3. $openssl ca -in client.csr -out client.crt -cert ca.crt -keyfile ca.key  

生成pem格式證書: 
有時需要用到pem格式的證書,可以用以下方式合併證書檔案(crt)和私鑰檔案(key)來生成 

$cat client.crt client.key> client.pem 

$cat server.crt server.key > server.pem

 

結果:

服務端證書:ca.crt, server.key, server.crt, server.pem

客戶端證書:ca.crt, client.key, client.crt, client.pem

 

注意:

在執行$openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key時可能會出錯:

Using configuration from /usr/share/ssl/openssl.cfg I am unable to access the ./demoCA/newcerts directory ./demoCA/newcerts: No such file or directory 

解決方法:

1)mkdir -p ./demoCA/newcerts 
2)touch demoCA/index.txt 
3)touch demoCA/serial 
4)echo 01 > demoCA/serial