(2)證書生成

上一節講了各種證書的格式,在此基礎上本次來探究一下證書的生成。本次使用openssl進行相應的證書管理,具體openssl的安裝說明等基本知識就不在此贅述。

       此次主要流程就是先生成一個自簽名根證書,然後利用自簽名根證書去簽發一個服務器證書,具體步驟如下:

1.  生成根證書之前,首先需要進行私鑰生成(以RSA爲例)

openssl genrsa -out ca.key 1024
該密鑰默認使用PKCS#1格式,並使用PEM編碼輸出文件,具體祕鑰內容可通過以下命令查看:

openssl rsa -in ca.key -text
PEM格式私鑰轉爲DER格式命令如下:

openssl rsa -in ca.key -outform der -out ca-der.key
查看DER格式的私鑰文件,指定輸入格式爲der即可:

openssl rsa -inform der -in ca-der.key -text
如需將PKCS#1密鑰轉換爲PKCS#8,則使用如下命令並設置“提取密碼”:

openssl pkcs8 -topk8 -in ca.key -out ca-pkcs8.key
2. 生成自簽名根證書

openssl req -new X509 -key ca.key -out ca.crt -days 3650
命令輸入後會讓你輸入證書擁有方的DN信息(DN說明可見上一遍博文),完畢後即生成自簽名根證書,可使用以下命令查看證書內容:

openssl x509 -in ca.crt -text
查看後可注意到Subject和Issuer中DN相同,即爲自簽名證書。

3. 生成服務器證書私鑰

openssl genrsa -out server.key 1024
4. 生成簽發請求文件(CSR)

openssl req -new -key server.key -out server.csr
此處需要輸入申請方的DN信息,同時此處提供了server.key,但是私鑰信息並不會包含在server.csr中,可以放心,此處僅僅是用於簽名和公鑰發送。同時,在輸入信息的過程中,還會要求輸入一個Challenge Password,這個需要和你的證書籤發方事先協商好,從而用戶證書籤發方進行身份確認,此參數並不參與實際證書生成。

如果需要查看CSR,可使用如下命令:

openssl req -noout -text -in server.csr
5. 簽發方使用CSR簽發證書

openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key days 3650
具體簽發的時候openssl如報找不到文件或文件夾之類的錯誤,可常見對應文件:

mkdir -p ./demoCA/newcerts
touch demoCA/index.txt
touch demoCA/index.txt.attr
touch demoCA/serial
echo 01>democA/serial
上述文件和文件夾主要是進行CA簽發證書管理的,demoCA/serial文件用戶CA簽發證書時,證書的序列號管理,確保其不重複(具體可參照上一博文);index主要是記錄簽發的DN信息,確保不重複簽發(也可通過配置設置爲可重複簽發,在此不贅述)。由此可看出,最好是每一個CA證書有單獨的目錄,同時在目錄下建立demoCA文件夾,從而對每個CA簽發的證書進行管理確認。

此外,簽發的時候如果提示"The *** is different between",則需要調整openssl.cfg中的簽發策略:

# For the CA policy
[ policy_match ]
countryName        = match
stateOrProvinceName    = optional
organizationName    = optional
organizationalUnitName    = optional
commonName        = supplied
emailAddress        = optional
如標爲match則表示簽發方與申請方的對應DN信息需要完全匹配方可簽發,簽發者可根據各自需要自行調整。

6. p12證書生成與提取

 將 pem 證書和私鑰轉 pkcs#12 證書(會要求輸入提取密碼和私鑰加密密碼)

openssl pkcs12 -export -in server.crt -inkey server.key -out server.p12
同時,也可以將證書上次ca證書一併導入同一p12中,從而包含可信證書鏈

openssl pkcs12 -export -in server.crt -inkey server.key -chain -CAfile ca.crt -out server-all.p12
提取所有證書和私鑰文件,可用如下命令(證書和私鑰在同一文件中,PEM格式):

openssl pkcs12 -in server.p12 -out out/server.pem
如過想僅提取私鑰或者證書,可在上述命令後添加“-nocerts”或"-nokeys"。

如果希望僅提取server證書,則使用如下命令:

openssl pkcs12 -in server-all.p12 -nokeys -clcerts -out out/cert.pem
如果希望提取CA證書,則使用如下命令:

openssl pkcs12 -in server-all.p12 -nokeys -cacerts -out out/cacert.pem
7. jks證書

jks證書後續預計在研究Android證書時將進一步說明,本次僅說明以下與p12證書之間的相互轉換,注意此處使用爲JDK的keytool工具。

p12 --> jks

keytool -importkeystore -srckeystore server.p12 -srcstoretype PKCS12 -deststoretype JKS -destkeystore server.jks
jks --> p12

keytool -importkeystore -srckeystore server.jks -srcstoretype JKS -deststoretype PKCS12 -destkeystore server.p12
 
————————————————
版權聲明:本文爲CSDN博主「DreamerJ」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/jjxojm/article/details/81277107

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章