(2)證書生成

2021-10-06 15:31:53 字數 3039 閱讀 7452

上一節講了各種證書的格式,在此基礎上本次來**一下證書的生成。本次使用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

證書生成 通配證書生成的方法

今天幫乙個朋友搞了點事情,我提供了乙個可完全隱藏wkwebview並且能載入web的sdk提供給對方使用,為了防止sdk在多個專案的復用,限制了這個sdk只能在具體的某個bundle id下執行,正常情況下這樣是沒有問題的。通過換bundle id進行真機測試的方案很合理,但是針對現在這種需要特定的...

ssl證書生成

openssl req new x509 days 3650 nodes out opt ssl certs postfix.pem keyout opt ssl private postfix.pem第乙個是證書,第二個是key 私鑰 可以應用在很多程式上。下面舉兩個例子 nginx postfi...

nginx證書生成

一 把證書準備好。步驟與使用openssl自簽發伺服器https證書所述大同小異。在這裡再重複一次。1 製作ca證書 ca.key ca私鑰 openssl genrsa des3 out ca.key 2048 製作解密後的ca私鑰 一般無此必要 openssl rsa in ca.key out...