1. 程式人生 > >OpenSSL 自建CA及簽發證書

OpenSSL 自建CA及簽發證書

利用 OpenSSL 建立 CA 及自行簽發證書。

1. 建立CA目錄結構

在CA的配置檔案中,有說明預設CA的目錄。
這裡寫圖片描述
建立預設CA下的目錄及檔案如下圖(.old檔案和.attr檔案是簽發證書後自動生成的檔案)。
這裡寫圖片描述

其中,
newcerts目錄用於存放CA簽署(頒發)過的數字證書(證書備份目錄)。
private目錄用於存放CA的私鑰。
檔案serial和index.txt分別用於存放下一個證書的序列號和證書資訊資料庫。
檔案serial填寫第一個證書序列號(如10000001),之後每前一張證書,序列號自動加1。

2. 生成CA 證書的 RSA 金鑰對

genrsa——用於生成 RSA 金鑰對的 OpenSSL 命令。

openssl genrsa -des3 -out ./demoCA/private/cakey.pem 2048

這裡寫圖片描述

-des3
使用 3-DES 對稱加密演算法加密金鑰對,該引數需要使用者在金鑰生成過程中輸入一個口令用於加密。今後使用該金鑰對時,需要輸入相應的口令。如果不加該選項,則不對金鑰進行加密。

3. 生成CA證書請求

req——用於生成證書請求的 OpenSSL 命令。

openssl req -new -days 365 -key ./demoCA/private/cakey.pem -out careq.pem

這裡寫圖片描述

-new
生成一個新的證書請求。該引數將令 OpenSSL 在證書請求生成過程中要求使用者填寫一些相應的欄位。

-days 365
從生成之時算起,證書時效為 365 天。

-key ./demoCA/private/cakey.pem
指定 ./demoCA/private/cakey.pem 為證書所使用的金鑰對檔案。

-out careq.pem
令生成的證書請求儲存到檔案 careq.pem 。

4. 對 CA 證書請求進行自簽名

ca——用於執行 CA 相關操作的 OpenSSL 命令。
OpenSSL 使用證書請求中附帶的金鑰對對該請求進行簽名,也就是所謂的“ self sign ”(自簽名)。

openssl ca -selfsign -in careq.pem -out cacert.pem

這裡寫圖片描述

-selfsign
使用對證書請求進行簽名的金鑰對來簽發證書。

-in careq.pem
指定 careq.pem 為證書請求檔案。

-out cacert.pem
指定 cacert.pem 為輸出的CA根證書。

3&4. 一步完成 CA 證書生成及簽名

第三步和第四步,可以用一條命令來完成。

openssl req -new -x509 -days 365 -key ./demoCA/private/cakey.pem -out cacert.pem

這裡寫圖片描述

關鍵引數:-x509

5. 生成使用者金鑰對

openssl genrsa -des3 -passout pass:123456 -out userkey.pem 1024

這裡寫圖片描述

-passout arg: arg為對稱加密的密碼(使用這個引數就省去了console互動提示輸入密碼的環節)

6. 生成使用者證書請求檔案

openssl req -new -days 365 -key userkey.pem -out userreq.pem

這裡寫圖片描述

7.對使用者證書籤名

openssl ca -in userreq.pem -out usercert.pem

這裡寫圖片描述

原因:CA根證書找不到,第4步生成的根證書放的位置不對。把4步生成的cacert.pem移動到./demoCA目錄下即可。
這裡寫圖片描述

仍然失敗,原因:證書請求檔案的單位名稱和CA根證書的證書請求檔案的單位名稱不一致。而在Openssl的配置檔案中,要求一致。
這裡寫圖片描述
將[policy_match]的
organizationName = match
改為:organizationName = optional
再次簽名成功了。
這裡寫圖片描述

8. 檢視證書的內容

openssl x509 -in usercert.pem -text -noout

這裡寫圖片描述

將證書檔案字尾名改為crt,在Windows中可以直接檢視。
這裡寫圖片描述
這裡寫圖片描述