數(shù)字證書簡介

目的

記錄常用的數(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
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容