目的
記錄常用的數(shù)據(jù)證書格式,以及如何生成數(shù)字證書和進(jìn)行格式轉(zhuǎn)換
目錄
- 生成證書
- 轉(zhuǎn)換格式
- 文件格式
生成證書
keytool
# 創(chuàng)建證書倉庫與私鑰
# -dname CN(Common Name), 可以是域名, 參考 HostnameVerifier
keytool -genkey -alias my -keysize 2048 -validity 36500 -keyalg RSA -dname "CN=localhost" -keypass keypass -storepass storepass -keystore my.jks
# 導(dǎo)出自簽名證書
keytool -export -alias my -keystore my.jks -storepass storepass -file my.cer
# 導(dǎo)入信任證書(對方證書或CA根證書)
keytool -import -trustcacerts -alias trust1 -file peer.cer -storepass storepass -keystore my.jks
# 查看證書
keytool -list -keystore my.jks -storepass storepass
openssl
CA根證書
# 創(chuàng)建CA私鑰
openssl genrsa 2048 > ca.key
# 創(chuàng)建CA證書
openssl req -new -x509 -key ca.key -out ca.crt -nodes -days 3650
CA簽名證書
# 創(chuàng)建私鑰
openssl genrsa 2048 > my.key
# 創(chuàng)建生成證書請求
openssl req -newkey rsa:2048 -days 3650 -nodes -keyout my.key -out my.csr
# 用CA根證書簽發(fā)證書
openssl x509 -req -days 3650 -in my.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out my.crt
# 也可以生成自簽名證書
openssl x509 -req -days 3650 -in my.csr -signkey my.key -out my.self.crt
# 驗(yàn)證證書
openssl verify -CAfile ca.crt my.crt
轉(zhuǎn)換格式
- JKS和PKCS12
# JKS to PKCS12
keytool -importkeystore -srcstoretype JKS -srcstorepass storepass -srckeypass keypass -srckeystore my.jks -destkeystore my.p12 -deststoretype pkcs12 -srcalias my -deststorepass storepass -destkeypass keypass
# PKCS12 to JKS
keytool -importkeystore -deststorepass storepass -destkeypass keypass -destkeystore my.jks -srckeystore my.p12 -srcstoretype PKCS12 -srcstorepass ""
- CER和PEM
# CER to PEM
openssl x509 -inform DER -outform PEM -in my.cer -out my.crt
- PEM和PKCS12
# PEM to P12
#openssl pkcs12 -export -out my.p12 -name my -in my.crt -inkey my.key
openssl pkcs12 -export -out my.p12 -in my.crt -inkey my.key
# 提取P12私鑰
openssl pkcs12 –nocerts –nodes –in my.p12 –out my.p12.key
# 將PKCS12的私鑰轉(zhuǎn)為PKCS8的私鑰
# netty only support PKCS8 keys
# http://netty.io/wiki/sslcontextbuilder-and-private-key.html
# 去掉-nocrypt參數(shù)可以使用密碼保護(hù)私鑰
openssl pkcs8 -topk8 -nocrypt -in my.p12.key -out my.pk8.key
數(shù)字證書與文件格式
X509
由用戶公鑰和用戶標(biāo)識(shí)符組成。還包括版本號、證書序列號、CA標(biāo)識(shí)符、簽名算法標(biāo)識(shí)、簽發(fā)者名稱、證書有效期等信息
DER
可包含所有私鑰、公鑰和證書,按 ASN1 DER 格式存儲(chǔ)
JKS
Java Key Store,可包含所有私鑰、公鑰和證書
本地開發(fā)時(shí),可以編輯${JAVA_HOME}/jre/lib/security/cacerts文件(密碼changeit),導(dǎo)入信任證書,解決SSL/TLS連接可信證書相關(guān)的問題
PKCS12
可以包含所有私鑰、公鑰和證書,是一種二進(jìn)制格式存儲(chǔ),通常以.pfx或.p12為文件后綴
PEM
以"-----BEGIN..."開頭,以"-----END..."結(jié)尾,可以存放各種信息
# 查看PEM格式的證書信息
openssl x509 -in certificate.pem -text -noout
CER
一般指使用DER格式的證書
CRT
證書文件??梢允荘EM格式
KEY
一般是PEM格式的私鑰文件
# 查看key
openssl rsa -in mykey.key -text -noout
CSR
證書請求文件(Certificate Signing Request),并不是證書,而是向權(quán)威證書頒發(fā)機(jī)構(gòu)獲得簽名證書的申請,其核心內(nèi)容是一個(gè)公鑰(附帶了一些別的個(gè)人信息)
# 查看csr
openssl req -noout -text -in my.csr