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中可以直接檢視。