[工具] SSL 證書(shū)

操作記錄

創(chuàng)建證書(shū) keytool

keytool 生成私鑰和證書(shū)

keytool -genkeypair -alias serverkey -keypass 123456 -storepass 123456 \
    -dname "CN=server.com,OU=group,O=comp,L=cz,ST=sx,C=cn" \
    -keyalg RSA -keysize 2048 -validity 3650 -keystore server.keystore

keytool -genkeypair -alias clientkey -keypass 123456 -storepass 123456 \
    -dname "CN=name,OU=group,O=comp,L=cz,ST=sx,C=cn" \
    -keyalg RSA -keysize 2048 -validity 3650 -keystore client.keystore

# 遷移到行業(yè)標(biāo)準(zhǔn)格式 PKCS12 
keytool -importkeystore -srckeystore server.keystore -destkeystore server.keystore -deststoretype pkcs12
keytool -importkeystore -srckeystore client.keystore -destkeystore client.keystore -deststoretype pkcs12

# 導(dǎo)出證書(shū) DER編碼格式 (添加  `-rfc` 可輸出 PEM 編碼格式的證書(shū))
# keytool -exportcert -keystore server.keystore -file server.crt -alias serverkey -storepass 123456
keytool -exportcert -keystore server.keystore -file server.cer -alias serverkey -storepass 123456
keytool -exportcert -keystore client.keystore -file client.cer -alias clientkey -storepass 123456

# 導(dǎo)入信任證書(shū)
keytool -importcert -keystore client_trust.keystore -file server.cer -alias client_trust_server -storepass 123456 -noprompt
keytool -importcert -keystore server_trust.keystore -file client.cer -alias server_trust_client -storepass 123456 -noprompt


# jks格式 轉(zhuǎn) pkcs12
keytool -importkeystore -srckeystore server.keystore -destkeystore server.p12 -srcalias serverkey -destalias serverkey \
    -srcstoretype jks -deststoretype pkcs12 -srcstorepass 123456 -deststorepass 123456 -noprompt

keytool -importkeystore -srckeystore client.keystore -destkeystore client.p12 -srcalias clientkey -destalias clientkey \
    -srcstoretype jks -deststoretype pkcs12 -srcstorepass 123456 -deststorepass 123456 -noprompt

# p12 證書(shū)提取pem證書(shū)和私鑰
openssl pkcs12 -in server.p12 -clcerts -nokeys -out server.crt
openssl pkcs12 -in server.p12 -nocerts -nodes -out server.key

openssl pkcs12 -in client.p12 -clcerts -nokeys -out client.crt

# Nginx 配置
ssl_certificate /root/keytool/server.crt;
ssl_certificate_key /root/keytool/server.key;
ssl_client_certificate /root/keytool/client.crt;
ssl_verify_client on;

# Android 使用 Portecle 工具修改類(lèi)型
- client.keystore -> client.p12
- client_trust.keystore -> client_trust.bks

創(chuàng)建證書(shū) openssl

  • 服務(wù)端 server.crt / server.key
  • 客戶(hù)端 client.crt / client.key
  • 雙方信任的 root.crt

root, 生成CA私鑰(.key) --> 生成CA證書(shū)請(qǐng)求(.csr) --> 自簽名得到根證書(shū)(.crt)

  1. 生成根證書(shū)密鑰 root.key (生成 RSA私鑰)
    openssl genrsa -out root.key 2048 -aes256 -passout pass:123456
  2. 生成根證書(shū)請(qǐng)求文件 root.csr (從現(xiàn)有的私鑰中生成一個(gè) 證書(shū)簽署請(qǐng)求CSR)
    openssl req -key root.key -new -out root.csr -subj "/C=CN/ST=SX/L=CZ/O=mycpmpany/OU=mygroup/CN=myCA"
  3. 自簽根證書(shū) root.crt (從現(xiàn)有的私鑰和 CSR 生成自簽證書(shū) crt)
    openssl x509 -req -days 3650 -sha256 -CAcreateserial -signkey root.key -in root.csr -out root.crt

服務(wù)端, 用自簽根證書(shū) root.crt 給用戶(hù)證書(shū)簽名, 生成私鑰(.key) --> 生成證書(shū)請(qǐng)求(.csr) --> 用CA根證書(shū)簽名得到證書(shū)(.crt)

  1. server.key 服務(wù)器端的秘鑰文件
  • openssl genrsa -out server.key 2048 -aes256 -passout pass:123456 私鑰
  • openssl rsa -in server.key -pubout -out server.pem -passin pass:123456 公鑰
  1. server.csr 服務(wù)端證書(shū)請(qǐng)求文件 (從現(xiàn)有的私鑰中生成一個(gè) 證書(shū)簽署請(qǐng)求CSR)
    openssl req -new -sha256 -key server.key -out server.csr -subj "/C=CN/ST=SX/L=CZ/O=mycpmpany/OU=mygroup/CN=myserver"
  2. server.crt 有效期十年的服務(wù)器端公鑰證書(shū),使用根證書(shū)和服務(wù)器端私鑰文件一起生成
    openssl x509 -req -days 3650 -sha256 -signkey server.key -CA root.crt -CAkey root.key -CAcreateserial -in server.csr -out server.crt
  3. 將證書(shū)轉(zhuǎn)為p12格式, p12格式的證書(shū)包含公私鑰
    openssl pkcs12 -export -clcerts -in server.crt -inkey server.key -out server.p12 -passout pass:123456

客戶(hù)端

  1. client.key 客戶(hù)端的私鑰文件
    openssl genrsa -out client.key 2048 -aes256 -passout pass:123456
  2. clinet.csr : 客戶(hù)端證書(shū)請(qǐng)求文件 (從現(xiàn)有的私鑰中生成一個(gè) 證書(shū)簽署請(qǐng)求CSR)
    openssl req -key client.key -new -out client.csr -subj "/C=CN/ST=SX/L=CZ/O=mycpmpany/OU=mygroup/CN=myclient"
  3. client.crt 有效期十年的客戶(hù)端證書(shū)寡夹,使用根證書(shū)和客戶(hù)端私鑰一起生成
    openssl x509 -req -days 3650 -sha256 -signkey client.key -CA root.crt -CAkey root.key -CAcreateserial -in client.csr -out client.crt
  4. client.p12 客戶(hù)端p12格式锨侯,這個(gè)證書(shū)文件包含客戶(hù)端的公鑰和私鑰,主要用來(lái)給瀏覽器訪問(wèn)使用
    openssl pkcs12 -export -clcerts -in client.crt -inkey client.key -out client.p12 -passout pass:123456
  5. 使用 bcprov-ext-jdk15on-158.jar 生成 Android 的 bks keytool -importcert -v -trustcacerts -alias android -file root.crt -keystore client-trust.bks -storetype BKS -provider org.bouncycastle.jce.provider.BouncyCastleProvider -providerpath bcprov-ext-jdk15on-158.jar -storepass 123456

基礎(chǔ)知識(shí)

HTTPS = HTTP + SSL

HTTP 和 HTTPs

HTTP(超文本傳輸協(xié)議)是一個(gè)客戶(hù)端終端(用戶(hù))和服務(wù)器端(網(wǎng)站)請(qǐng)求和應(yīng)答的標(biāo)準(zhǔn)(TCP)早抠。[1]

超文本傳輸協(xié)議HTTP協(xié)議被用于在Web瀏覽器和網(wǎng)站服務(wù)器之間傳遞信息。HTTP協(xié)議以明文方式發(fā)送內(nèi)容撬讽,不提供任何方式的數(shù)據(jù)加密蕊连,易遭受竊聽(tīng)、篡改游昼、劫持等攻擊甘苍,因此HTTP協(xié)議不適合傳輸一些敏感信息,比如信用卡號(hào)烘豌、密碼等载庭。[1]

為了解決HTTP協(xié)議的這一缺陷,需要使用另一種協(xié)議:安全套接字層超文本傳輸協(xié)議HTTPS廊佩。為了數(shù)據(jù)傳輸?shù)陌踩艟郏琀TTPS在HTTP的基礎(chǔ)上加入了SSL/TLS協(xié)議,SSL/TLS依靠證書(shū)來(lái)驗(yàn)證服務(wù)器的身份标锄,并為瀏覽器和服務(wù)器之間的通信加密顽铸,一次HTTPS協(xié)議實(shí)現(xiàn)了數(shù)據(jù)傳輸過(guò)程中的保密性、完整性和身份認(rèn)證性料皇。[1]

  • HTTPS協(xié)議需要到CA申請(qǐng)證書(shū),而HTTP協(xié)議則不用谓松;
  • HTTP是超文本傳輸協(xié)議,信息是明文傳輸践剂,而HTTPS則是加密傳輸鬼譬;
  • HTTP和HTTPS使用完全不同的連接方式,所占用的端口也不一樣逊脯,前者占用80端口优质,后者占用443端口;
  • HTTPS傳輸過(guò)程比較復(fù)雜男窟,對(duì)服務(wù)端占用的資源比較多盆赤,由于握手過(guò)程的復(fù)雜性和加密傳輸?shù)奶匦詫?dǎo)致HTTPS傳輸?shù)男时容^低;HTTP的連接很簡(jiǎn)單歉眷,是無(wú)狀態(tài)的牺六;
  • HTTPS協(xié)議是由SSL+HTTP協(xié)議構(gòu)建的可進(jìn)行加密傳輸、身份認(rèn)證的網(wǎng)絡(luò)協(xié)議汗捡,比HTTP協(xié)議安全淑际。

SSL 和 TLS

SSL:(Secure Socket Layer畏纲,安全套接字層),位于可靠的面向連接的網(wǎng)絡(luò)層協(xié)議和應(yīng)用層協(xié)議之間的一種協(xié)議層春缕。SSL通過(guò)互相認(rèn)證盗胀、使用數(shù)字簽名確保完整性、使用加密確保私密性锄贼,以實(shí)現(xiàn)客戶(hù)端和服務(wù)器之間的安全通訊票灰。該協(xié)議由兩層組成:SSL記錄協(xié)議和SSL握手協(xié)議。[2]

SSL協(xié)議提供的服務(wù)主要有:

  • 認(rèn)證用戶(hù)和服務(wù)器宅荤,確保數(shù)據(jù)發(fā)送到正確的客戶(hù)機(jī)和服務(wù)器屑迂;
  • 加密數(shù)據(jù)以防止數(shù)據(jù)中途被竊取冯键;
  • 維護(hù)數(shù)據(jù)的完整性惹盼,確保數(shù)據(jù)在傳輸過(guò)程中不被改變。

TLS:(Transport Layer Security惫确,傳輸層安全協(xié)議)手报,用于兩個(gè)應(yīng)用程序之間提供保密性和數(shù)據(jù)完整性。該協(xié)議由兩層組成:TLS記錄協(xié)議和TLS握手協(xié)議改化。[2]

TLS的最大優(yōu)勢(shì)就在于:TLS是獨(dú)立于應(yīng)用協(xié)議掩蛤。高層協(xié)議可以透明地分布在TLS協(xié)議上面。然而所袁,TLS標(biāo)準(zhǔn)并沒(méi)有規(guī)定應(yīng)用程序如何在TLS上增加安全性盏档;它如何啟動(dòng)TLS握手協(xié)議以及如何解釋交換的認(rèn)證證書(shū)的決定權(quán)留給協(xié)議的設(shè)計(jì)者和實(shí)施者來(lái)判斷。

TLS的主要目標(biāo)是使SSL更安全燥爷,并使協(xié)議的規(guī)范更精確和完善。TLS在SSL v3.0的基礎(chǔ)上懦窘,提供了以下增加內(nèi)容:

  • 更安全的MAC算法
  • 更嚴(yán)密的警報(bào)
  • “灰色區(qū)域”規(guī)范的更明確的定義

SSL證書(shū)

  • .pem 是Privacy Enhanced Mail的縮寫(xiě)前翎,它是一個(gè)失敗的保護(hù)電子郵件的方法,但是這個(gè)容器格式一直在使用畅涂。
  • .key 這是一個(gè)PEM格式的文件港华,只包含證書(shū)的私鑰。
  • X.509 是密碼學(xué)里公鑰證書(shū)的格式標(biāo)準(zhǔn)午衰。證書(shū)組成結(jié)構(gòu)標(biāo)準(zhǔn)用ASN.1(一種標(biāo)準(zhǔn)的語(yǔ)言)來(lái)進(jìn)行描述立宜。
  • ASN.1 抽象語(yǔ)法標(biāo)記(Abstract Syntax Notation One) ASN.1是一種 ISO/ITU-T 標(biāo)準(zhǔn),描述了一種對(duì)數(shù)據(jù)進(jìn)行表示臊岸、編碼橙数、傳輸和解碼的數(shù)據(jù)格式。它提供了一整套正規(guī)的格式用于描述對(duì)象的結(jié)構(gòu)帅戒,而不管語(yǔ)言上如何執(zhí)行及這些數(shù)據(jù)的具體指代灯帮,也不用去管到底是什么樣的應(yīng)用程序。
  • DER (Distinguished Encoding Rules,可辨別編碼規(guī)則)钟哥。ASN.1對(duì)象的編碼是ASN.1標(biāo)準(zhǔn)的重要部分迎献,通常采用的是BER,而DER則是其一個(gè)子集腻贰。
  • .csr 證書(shū)認(rèn)證簽名請(qǐng)求(Certificate signing request), 這是證書(shū)申請(qǐng)文件吁恍,生成證書(shū)時(shí)要把這個(gè)提交給權(quán)威的證書(shū)頒發(fā)機(jī)構(gòu),頒發(fā)機(jī)構(gòu)審核通過(guò)之后播演,再根據(jù)這些申請(qǐng)信息生成相應(yīng)的證書(shū)践盼。
  • .pkcs12 .pfx .p12 最初定義在RSA的Public-Key Cryptography Standards,"12"這個(gè)版本開(kāi)始是微軟使用宾巍,后來(lái)定義在 RFC 7292咕幻。這是一個(gè)密碼容器格式,可以包含公鑰和私鑰證書(shū)對(duì)顶霞。跟.pem文件不同肄程,這個(gè)容器格式是加密的。java的keytool工具可以產(chǎn)生這種格式的證書(shū)选浑。
  • .der ASN.1語(yǔ)法的編碼規(guī)則之一蓝厌。.pem文件是.der文件的Base64版本。
  • .cert .cer .crt 證書(shū)(Certificate) .pem文件的不同格式古徒,也可以是.der文件拓提。這些文件在Windows下可以直接識(shí)別,.pem無(wú)法識(shí)別隧膘。
  • .p7b .keystore 定義在RFC 2315這是Windows用于證書(shū)交換的一種格式代态,java支持該格式,通常用.keystore作為后綴疹吃。
  • .crl 證書(shū)吊銷(xiāo)列表蹦疑。

SSL證書(shū)也叫安全證書(shū)或者數(shù)字證書(shū),SSL證書(shū)是數(shù)字證書(shū)的一種萨驶,跟駕駛證歉摧、護(hù)照、營(yíng)業(yè)執(zhí)照電子副本類(lèi)似腔呜。SSL證書(shū)是一種國(guó)際通用的Web安全標(biāo)準(zhǔn)叁温,主要通過(guò)對(duì)敏感數(shù)據(jù)加密來(lái)防止各種攻擊非法讀取重要信息,保證數(shù)據(jù)的完整性和安全性核畴,避免受到數(shù)據(jù)劫持和釣魚(yú)攻擊等膝但。[3]

SSL 證書(shū)是由受信任的數(shù)字證書(shū)頒發(fā)機(jī)構(gòu) CA,在驗(yàn)證服務(wù)器身份后頒發(fā)膛檀,且具有服務(wù)器身份驗(yàn)證和數(shù)據(jù)傳輸加密功能锰镀。簡(jiǎn)單說(shuō)就是讓你網(wǎng)站通過(guò) HTTPS 加密傳輸協(xié)議訪問(wèn)的一個(gè)必要文件娘侍。[4]

數(shù)字證書(shū)認(rèn)證機(jī)構(gòu)(Certificate Authority,縮寫(xiě)為CA)泳炉,是負(fù)責(zé)發(fā)放和管理數(shù)字證書(shū)的權(quán)威機(jī)構(gòu)憾筏,并作為電子商務(wù)交易中受信任的第三方,承擔(dān)公鑰體系中公鑰的合法性檢驗(yàn)的責(zé)任花鹅。CA 機(jī)構(gòu)是獨(dú)立的氧腰,沒(méi)有相互關(guān)系,這些機(jī)構(gòu)都是在webtrust認(rèn)證審核下成立的刨肃。[4]

簽發(fā)主流機(jī)構(gòu):Symantec古拴、Comodo、GeoTrust真友、DigiCert黄痪、GlobalSign 等。

SSL證書(shū)根據(jù)驗(yàn)證級(jí)別盔然,分為三種類(lèi)型:

  • 域名型SSL證書(shū)桅打,簡(jiǎn)稱(chēng)DVSSL (常用于 個(gè)人站點(diǎn))
  • 企業(yè)型SSL證書(shū),簡(jiǎn)稱(chēng)OVSSL (常用于 普通企業(yè)網(wǎng)站)
  • 增強(qiáng)型SSL證書(shū)愈案,簡(jiǎn)稱(chēng)EVSSL (常用于 企業(yè)官網(wǎng)挺尾、電商、P2P等互聯(lián)網(wǎng)金融網(wǎng)站)站绪。

自簽名SSL證書(shū)

自己生成的SSL證書(shū)遭铺,不是CA機(jī)構(gòu)頒發(fā)的SSL證書(shū),就是自簽名證書(shū)恢准。自簽名SSL證書(shū)不會(huì)被瀏覽器信任魂挂,數(shù)據(jù)被泄漏級(jí)劫持安全漏洞安全風(fēng)險(xiǎn)較高。

如果你想使用 SSL 證書(shū)來(lái)確保服務(wù)的安全顷歌,但你不需要 CA 簽名的證書(shū)锰蓬,一個(gè)有效的(和免費(fèi)的)解決方案是簽署你自己的證書(shū)。
你可以自己簽發(fā)的一種常見(jiàn)證書(shū)是自簽證書(shū)self-signed certificate眯漩。自簽證書(shū)是用自己的私鑰簽署的證書(shū)。自簽證書(shū)和 CA 簽名證書(shū)一樣可以用來(lái)加密數(shù)據(jù)麻顶,但是你的用戶(hù)會(huì)顯示一個(gè)警告赦抖,說(shuō)這個(gè)證書(shū)不被他們的計(jì)算機(jī)或?yàn)g覽器信任。[5]

如果你想從證書(shū)頒發(fā)機(jī)構(gòu)certificate authority(CA)那里獲得 SSL 證書(shū)辅肾,你必須生成一個(gè)證書(shū)簽署請(qǐng)求certificate signing request(CSR)队萤。

openssl / keytool

JDK里面內(nèi)置了一個(gè)數(shù)字證書(shū)生產(chǎn)工具:keytool。但是這個(gè)工具只能生成自簽名的數(shù)字證書(shū)矫钓。所謂自簽名就是指證書(shū)只能保證自己是完整的要尔,沒(méi)有經(jīng)過(guò)非法修改的舍杜。

keytool 沒(méi)辦法簽發(fā)證書(shū),而 openssl 能夠進(jìn)行簽發(fā)和證書(shū)鏈的管理

常用命令

openssl

設(shè)置密碼

  • -passin -pass:123456 用于簽名待生成的請(qǐng)求證書(shū)的私鑰文件的解密密碼
  • -passout arg arg為對(duì)稱(chēng)加密(des/aes)的密碼 (省去了console交互提示輸入密碼的環(huán)節(jié))
  • -password -pass:123456 導(dǎo)入導(dǎo)出

自動(dòng)輸入
-subj "/C=CN/ST=SX/L=CZ/O=cpmpany/OU=example/CN=example.com/emailAddress=aa@bb.cc"

  • C: Country既绩,單位所在國(guó)家还惠,為兩位數(shù)的國(guó)家縮寫(xiě),如:CN 表示中國(guó)
  • ST: State/Province救欧,單位所在州或省
  • L: Locality锣光,單位所在城市/或縣區(qū)
  • O: Organization笆怠,單位名稱(chēng)
  • OU: Organization Unit铸鹰,部門(mén)名稱(chēng)
  • CN: Common Name郎仆,網(wǎng)站的域名铐然;例:adf.com 或 IP
  • Email Address: 郵箱

RSA私鑰公鑰[6]

  • -nodes無(wú)密碼
  • -passout pass:123456 有密碼

默認(rèn)情況下恋追,openssl 輸出格式為 PKCS#1-PEM

  • openssl genrsa -out cakey.pem 2048 pem 格式 (內(nèi)容是 -----END RSA PRIVATE KEY-----)
  • openssl genrsa -out cakey.key 2048 key 格式 (內(nèi)容也是 -----END RSA PRIVATE KEY-----)
  • openssl genrsa -out root.key 2048 -aes256 -passout pass:123456 設(shè)置密碼

加密

  • openssl genrsa -des3 -out rsa_des_private.key 2048 使用des3加密
  • openssl genrsa -aes256 -passout pass:123456 -out rsa_aes_private.key 2048 生成RSA私鑰, 使用aes256加密, -passout 代替shell 進(jìn)行密碼輸入
  • openssl rsa -in rsa_aes_private.key -passin pass:123456 -pubout -out rsa_public.key 生成RSA公鑰

非加密

  • openssl genrsa -out rsa_private.key 2048 生成RSA私鑰(無(wú)加密)
  • openssl rsa -in rsa_private.key -pubout -out rsa_public.key 生成RSA公鑰

轉(zhuǎn)換

  • openssl rsa -in rsa_aes_private.key -passin pass:123456 -out rsa_private.key 私鑰轉(zhuǎn)非加密
  • openssl rsa -in rsa_private.key -aes256 -passout pass:123456 -out rsa_aes_private.key 私鑰轉(zhuǎn)加密
  • openssl rsa -in rsa_private.key -outform der-out rsa_aes_private.der 轉(zhuǎn)DER, -inform/-outform 制定輸入輸出格式
  • openssl pkcs8 -topk8 -in rsa_private.key -passout pass:123456 -out pkcs8_private.key 私鑰PKCS#1轉(zhuǎn)PKCS#8, pkcs8默認(rèn)采用des3加密,

查看密鑰

  • openssl rsa -in server.key -noout -text
  • openssl rsa -in server.key -text 使用-nocrypt可以輸出無(wú)加密的pkcs8密鑰, 使用-pubin可查看公鑰明細(xì)
  • cat server.key

證書(shū)簽署請(qǐng)求 CSR 文件

如果你想使用 HTTPS(HTTP over TLS)來(lái)保護(hù)你的 Apache HTTP 或 Nginx Web 服務(wù)器的安全洲赵,并且你想使用一個(gè)證書(shū)頒發(fā)機(jī)構(gòu)(CA)來(lái)頒發(fā) SSL 證書(shū)龄寞,那么就需要 CSR, 生成的 CSR 可以發(fā)送給 CA螟炫,請(qǐng)求簽發(fā)由 CA 簽名的 SSL 證書(shū)蜜唾。

使用現(xiàn)有 RSA私鑰生成 CSR簽名請(qǐng)求 -key指定私鑰, -out生成文件

  • openssl req -key clientkey.pem -new -out client.csr -subj "..." pem
  • openssl req -key root.key -new -out root.csr -subj "..." key

同時(shí)生成 RSA私鑰 和 CSR簽名請(qǐng)求
openssl req -newkey rsa:2048 -nodes -keyout server.key -out server.csr -subj "..."

從現(xiàn)有的證書(shū)(cert.crt)和私鑰(server.key)生成 CSR(server.csr)
openssl x509 -in cert.crt -signkey server.key -x509toreq -out server.csr

  • -x509toreq 指定你使用一個(gè) X509 證書(shū)來(lái)制作 CSR

查看 CSR
openssl req -text -in server.csr -noout

證書(shū) CRT

CA

  • openssl x509 -req -days 3650 -sha256 -extensions v3_ca -signkey cakey.pem -in ca.csr -out cacert.cer
  • openssl x509 -req -days 3650 -sha256 -extensions v3_ca -signkey root.key -in root.csr -out root.crt
  • openssl x509 -req -days 3650 -sha256 -signkey root.key -in root.csr -out root.crt

用CA根證書(shū)簽發(fā)應(yīng)用證書(shū) (server)

  • openssl x509 -req -days 3650 -sha256 -extensions v3_req -CA cacert.pem -CAkey cakey.pem -CAserial ca.srl -CAcreateserial -in server.csr -out servercert.pem
  • openssl x509 -req -days 3650 -sha256 -extensions v3_req -CA root.crt -CAkey root.key -CAserial ca.srl -CAcreateserial -in server.csr -out server.crt
  • openssl x509 -req -days 3650 -sha256 -signkey server.key -CA root.crt -CAkey root.key -CAcreateserial -in server.csr -out server.crt
  • openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key

直接生成 私鑰和 SSL 自簽證書(shū)
openssl req -newkey rsa:2048 -days 3650 -nodes -x509 -keyout ca.key -out ca.crt -subj "..."

  • req 是證書(shū)請(qǐng)求的子命令
  • -newkey rsa:2048 -keyout private_key.pem 表示生成私鑰(PKCS8格式)
  • -nodes 表示私鑰不加密椎镣,若不帶參數(shù)將提示輸入密碼
  • -x509 告訴 req 子命令創(chuàng)建一個(gè)自簽名的證書(shū)
  • -days 365 指定證書(shū)的有效期為 365 天

從現(xiàn)有 私鑰 生成 自簽名證書(shū), -new生成證書(shū)請(qǐng)求, x509直接輸出證書(shū), -key指定私鑰
openssl req -new -x509 -sha256 -days 3650 -key root.key -out root.crt -passin pass:123456 -subj "..."

從現(xiàn)有 私鑰和CSR 生成 自簽證書(shū), x509指定格式, -in指定請(qǐng)求文件, -signkey自簽名

  • openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
  • openssl x509 -req -days 365 -in server.csr -CA ca.crt -CAkey ca.key -passin pass:123456 -CAcreateserial -out server.crt CA 證書(shū)

使用 已有RSA 私鑰生成自簽名證書(shū) (生成 ca.crt)
openssl req -new -x509 -days 365 -key rsa_private.key -out cert.crt

  • -new 指生成證書(shū)請(qǐng)求
  • -x509 表示直接輸出證書(shū)
  • -key 指定私鑰文件

使用 CA 證書(shū)及CA密鑰 對(duì)請(qǐng)求簽發(fā)證書(shū)進(jìn)行簽發(fā)诈火,生成 x509證書(shū) (使用 ca 簽發(fā) server.crt)

  • openssl x509 -req -days 3650 -in server.csr -CA ca.crt -CAkey ca.key -passin pass:123456 -CAcreateserial -out server.crt

查看證書(shū)

  • openssl x509 -in cert.crt -noout -text

證書(shū)轉(zhuǎn)換

  • openssl x509 -in cert.cer -inform DER -outform PEM -out cert.pem 將 DER 轉(zhuǎn)換為 PEM
  • openssl pkcs12 -export -in server.crt -inkey server.key -passin pass:123456 -password pass:123456 -out server.p12 將pem證書(shū)和私鑰轉(zhuǎn) pkcs#12 證書(shū), -export導(dǎo)出pkcs#12證書(shū),-inkey指定私鑰
  • openssl pkcs12 -export -inkey domain.key -in domain.crt -out domain.pfx 將 PEM 轉(zhuǎn)換為 PKCS12, 使用私鑰(domain.key)和證書(shū)(domain.crt),并將它們組合成一個(gè) PKCS12 文件(domain.pfx)
  • openssl pkcs12 -export -clcerts -in server.crt -inkey server.key -out server.p12 -passin pass:123456 -password pass:123456 證書(shū)轉(zhuǎn)為p12格式, p12格式的證書(shū)包含公私鑰
  • openssl pkcs12 -export -in server.crt -inkey server.key -passin pass:123456 -chain -CAfile ca.crt -password pass:123456 -out server-all.p12 將pem證書(shū)和私鑰/CA證書(shū) 合成pkcs#12 證書(shū), -chain同時(shí)添加證書(shū)鏈, -CAfileCA證書(shū),導(dǎo)出的p12文件將包含多個(gè)證書(shū)
  • openssl x509 -in cert.crt -outform der -out server.der 將 PEM 轉(zhuǎn)換為 DER, DER 格式通常與 Java 一起使用状答。
  • openssl pkcs12 -in domain.pfx -nodes -out domain.combined.crt 將 PKCS12 轉(zhuǎn)換為 PEM, 轉(zhuǎn)換 PKCS12 文件(domain.pfx)并將其轉(zhuǎn)換為 PEM 格式(domain.combined.crt)
  • openssl pkcs12 -in server.p12 -password pass:123456 -passout pass:123456 -out server.pem pcks#12提取PEM文件(同時(shí)包含證書(shū)和私鑰pkcs#8)
  • openssl pkcs12 -in server.p12 -password pass:123456 -passout pass:123456 -nocerts -out key.pem 僅提取私鑰
  • openssl pkcs12 -in server.p12 -password pass:123456 -nokeys -out key.pem 僅提取證書(shū)
  • openssl pkcs12 -in server-all.p12 -password pass:123456 -nokeys -cacerts -out cacert.pem 僅提取ca證書(shū)
  • openssl pkcs12 -in server-all.p12 -password pass:123456 -nokeys -clcerts -out cert.pem 僅提取server證書(shū)
  • openssl pkcs12 -in server.pfx -nodes -out server.pem PFX文件轉(zhuǎn)換為 pem
  • openssl rsa -in server.pem -out server2.key PFX文件轉(zhuǎn)換為密鑰
  • openssl x509 -in server.pem -out server2.crt PFX文件轉(zhuǎn)換為證書(shū)

驗(yàn)證

檢查私鑰是否為有效密鑰
openssl rsa -check -in rsa_private.key

驗(yàn)證私鑰是否與證書(shū)和 CSR 匹配

  • openssl rsa -noout -modulus -in rsa_private.key | openssl md5
  • openssl x509 -noout -modulus -in cert.crt | openssl md5
  • openssl req -noout -modulus -in server.csr | openssl md5

查看 CSR 條目, 查看和驗(yàn)證純文本的 CSR 內(nèi)容
openssl req -text -noout -verify -in server.csr

使用CA證書(shū)驗(yàn)證server端證書(shū)

  • openssl verify -CAfile cacert.pem servercert.pem
  • openssl verify -CAfile root.crt server.crt

驗(yàn)證證書(shū)由 CA 簽署
openssl verify -verbose -CAFile ca.crt cert.crt

openssl 命令參數(shù)

參考 https://cloud.tencent.com/developer/article/1444793

1. openssl list-standard-commands(標(biāo)準(zhǔn)命令)
    1) asn1parse: asn1parse用于解釋用ANS.1語(yǔ)法書(shū)寫(xiě)的語(yǔ)句(ASN一般用于定義語(yǔ)法的構(gòu)成) 
    2) ca: ca用于CA的管理 
    openssl ca [options]:
        2.1) -selfsign
        使用對(duì)證書(shū)請(qǐng)求進(jìn)行簽名的密鑰對(duì)來(lái)簽發(fā)證書(shū)冷守。即"自簽名",這種情況發(fā)生在生成證書(shū)的客戶(hù)端惊科、簽發(fā)證書(shū)的CA都是同一臺(tái)機(jī)器(也是我們大多數(shù)實(shí)驗(yàn)中的情況)拍摇,我們可以使用同一個(gè)
密鑰對(duì)來(lái)進(jìn)行"自簽名"
        2.2) -in file
        需要進(jìn)行處理的PEM格式的證書(shū)
        2.3) -out file
        處理結(jié)束后輸出的證書(shū)文件
        2.4) -cert file
        用于簽發(fā)的根CA證書(shū)
        2.5) -days arg 
        指定簽發(fā)的證書(shū)的有效時(shí)間
        2.6) -keyfile arg   
        CA的私鑰證書(shū)文件
        2.7) -keyform arg
        CA的根私鑰證書(shū)文件格式:
            2.7.1) PEM
            2.7.2) ENGINE 
        2.8) -key arg   
        CA的根私鑰證書(shū)文件的解密密碼(如果加密了的話)
        2.9) -config file    
        配置文件
    example1: 利用CA證書(shū)簽署請(qǐng)求證書(shū)
    openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key  

    3) req: X.509證書(shū)簽發(fā)請(qǐng)求(CSR)管理
    openssl req [options] <infile >outfile
        3.1) -inform arg
        輸入文件格式
            3.1.1) DER
            3.1.2) PEM
        3.2) -outform arg   
        輸出文件格式
            3.2.1) DER
            3.2.2) PEM
        3.3) -in arg
        待處理文件
        3.4) -out arg
        待輸出文件
        3.5) -passin        
        用于簽名待生成的請(qǐng)求證書(shū)的私鑰文件的解密密碼
        3.6) -key file
        用于簽名待生成的請(qǐng)求證書(shū)的私鑰文件
        3.7) -keyform arg  
            3.7.1) DER
            3.7.2) NET
            3.7.3) PEM
        3.8) -new
        新的請(qǐng)求
        3.9) -x509          
        輸出一個(gè)X509格式的證書(shū) 
        3.10) -days
        X509證書(shū)的有效時(shí)間  
        3.11) -newkey rsa:bits 
        生成一個(gè)bits長(zhǎng)度的RSA私鑰文件馆截,用于簽發(fā)  
        3.12) -[digest]
        HASH算法
            3.12.1) md5
            3.12.2) sha1
            3.12.3) md2
            3.12.4) mdc2
            3.12.5) md4
        3.13) -config file   
        指定openssl配置文件
        3.14) -text: text顯示格式
    example1: 利用CA的RSA密鑰創(chuàng)建一個(gè)自簽署的CA證書(shū)(X.509結(jié)構(gòu)) 
    openssl req -new -x509 -days 3650 -key server.key -out ca.crt 
    example2: 用server.key生成證書(shū)簽署請(qǐng)求CSR(這個(gè)CSR用于之外發(fā)送待CA中心等待簽發(fā))
    openssl req -new -key server.key -out server.csr
    example3: 查看CSR的細(xì)節(jié)
    openssl req -noout -text -in server.csr

    4) genrsa: 生成RSA參數(shù)
    openssl genrsa [args] [numbits]
        [args]
        4.1) 對(duì)生成的私鑰文件是否要使用加密算法進(jìn)行對(duì)稱(chēng)加密:
            4.1.1) -des: CBC模式的DES加密
            4.1.2) -des3: CBC模式的DES加密
            4.1.3) -aes128: CBC模式的AES128加密
            4.1.4) -aes192: CBC模式的AES192加密
            4.1.5) -aes256: CBC模式的AES256加密
        4.2) -passout arg: arg為對(duì)稱(chēng)加密(des、des混卵、aes)的密碼(使用這個(gè)參數(shù)就省去了console交互提示輸入密碼的環(huán)節(jié))
        4.3) -out file: 輸出證書(shū)私鑰文件
        [numbits]: 密鑰長(zhǎng)度
    example: 生成一個(gè)1024位的RSA私鑰幕随,并用DES加密(密碼為1111)赘淮,保存為server.key文件
    openssl genrsa -out server.key -passout pass:1111 -des3 1024 

    5) rsa: RSA數(shù)據(jù)管理
    openssl rsa [options] <infile >outfile
        5.1) -inform arg
        輸入密鑰文件格式:
            5.1.1) DER(ASN1)
            5.1.2) NET
            5.1.3) PEM(base64編碼格式)
         5.2) -outform arg
         輸出密鑰文件格式
            5.2.1) DER
            5.2.2) NET
            5.2.3) PEM
        5.3) -in arg
        待處理密鑰文件 
        5.4) -passin arg
        輸入這個(gè)加密密鑰文件的解密密鑰(如果在生成這個(gè)密鑰文件的時(shí)候走诞,選擇了加密算法了的話)
        5.5) -out arg
        待輸出密鑰文件
        5.6) -passout arg  
        如果希望輸出的密鑰文件繼續(xù)使用加密算法的話則指定密碼 
        5.7) -des: CBC模式的DES加密
        5.8) -des3: CBC模式的DES加密
        5.9) -aes128: CBC模式的AES128加密
        5.10) -aes192: CBC模式的AES192加密
        5.11) -aes256: CBC模式的AES256加密
        5.12) -text: 以text形式打印密鑰key數(shù)據(jù) 
        5.13) -noout: 不打印密鑰key數(shù)據(jù) 
        5.14) -pubin: 檢查待處理文件是否為公鑰文件
        5.15) -pubout: 輸出公鑰文件
    example1: 對(duì)私鑰文件進(jìn)行解密
    openssl rsa -in server.key -passin pass:111 -out server_nopass.key
    example:2: 利用私鑰文件生成對(duì)應(yīng)的公鑰文件
    openssl rsa -in server.key -passin pass:111 -pubout -out server_public.key

    6) x509:
    本指令是一個(gè)功能很豐富的證書(shū)處理工具速梗∫鏊可以用來(lái)顯示證書(shū)的內(nèi)容位隶,轉(zhuǎn)換其格式涧黄,給CSR簽名等X.509證書(shū)的管理工作
    openssl x509 [args]    
        6.1) -inform arg
        待處理X509證書(shū)文件格式
            6.1.1) DER
            6.1.2) NET
            6.1.3) PEM
        6.2) -outform arg   
        待輸出X509證書(shū)文件格式
            6.2.1) DER
            6.2.2) NET
            6.2.3) PEM
        6.3) -in arg 
        待處理X509證書(shū)文件
        6.4) -out arg       
        待輸出X509證書(shū)文件
        6.5) -req            
        表明輸入文件是一個(gè)"請(qǐng)求簽發(fā)證書(shū)文件(CSR)"笋妥,等待進(jìn)行簽發(fā) 
        6.6) -days arg       
        表明將要簽發(fā)的證書(shū)的有效時(shí)間 
        6.7) -CA arg 
        指定用于簽發(fā)請(qǐng)求證書(shū)的根CA證書(shū) 
        6.8) -CAform arg     
        根CA證書(shū)格式(默認(rèn)是PEM) 
        6.9) -CAkey arg      
        指定用于簽發(fā)請(qǐng)求證書(shū)的CA私鑰證書(shū)文件,如果這個(gè)option沒(méi)有參數(shù)輸入嫉你,那么缺省認(rèn)為私有密鑰在CA證書(shū)文件里有
        6.10) -CAkeyform arg  
        指定根CA私鑰證書(shū)文件格式(默認(rèn)為PEM格式)
        6.11) -CAserial arg   
        指定序列號(hào)文件(serial number file)
        6.12) -CAcreateserial 
        如果序列號(hào)文件(serial number file)沒(méi)有指定幽污,則自動(dòng)創(chuàng)建它     
    example1: 轉(zhuǎn)換DER證書(shū)為PEM格式
    openssl x509 -in cert.cer -inform DER -outform PEM -out cert.pem
    example2: 使用根CA證書(shū)對(duì)"請(qǐng)求簽發(fā)證書(shū)"進(jìn)行簽發(fā)距误,生成x509格式證書(shū)
    openssl x509 -req -days 3650 -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt
    example3: 打印出證書(shū)的內(nèi)容
    openssl x509 -in server.crt -noout -text 

keytool

  • jks 是Java的keytool證書(shū)工具支持的證書(shū)私鑰格式
  • pfx 是微軟支持的私鑰格式(p12是pfx的新格式)
  • cer / crt 是證書(shū)的公鑰格式(cer是crt證書(shū)的微軟形式)
  • csr 數(shù)字證書(shū)簽名請(qǐng)求文件(Cerificate Signing Request)
  • .der .cer 此證書(shū)文件是二進(jìn)制格式准潭,只含有證書(shū)信息惋鹅,不包含私鑰
  • .crt : 此證書(shū)文件是二進(jìn)制格式或文本格式闰集,一般為文本格式,功能與 .der 及 .cer 證書(shū)文件相同
  • .pem : 此證書(shū)文件一般是文本格式爽雄,可以存放證書(shū)或私鑰挚瘟,或者兩者都包含
  • .pem 文件如果只包含私鑰乘盖,一般用 .key 文件代替
  • .pfx .p12 : 此證書(shū)文件是二進(jìn)制格式订框,同時(shí)包含證書(shū)和私鑰穿扳,且一般有密碼保護(hù)
  • .keystore .truststore : 兩者本質(zhì)都是keystore矛物,都是儲(chǔ)存密鑰的容器

  • 使用 ketytool --help 獲取所有可用命令
  • 使用 keytool -command_name -help 來(lái)獲取 command_name 的用法
keytool --help
密鑰和證書(shū)管理工具

命令:

 -certreq            生成證書(shū)請(qǐng)求
 -changealias        更改條目的別名
 -delete             刪除條目
 -exportcert         導(dǎo)出證書(shū)
 -genkeypair         生成密鑰對(duì)
 -genseckey          生成密鑰   genkey
 -gencert            根據(jù)證書(shū)請(qǐng)求生成證書(shū)
 -importcert         導(dǎo)入證書(shū)或證書(shū)鏈
 -importpass         導(dǎo)入口令
 -importkeystore     從其他密鑰庫(kù)導(dǎo)入一個(gè)或所有條目
 -keypasswd          更改條目的密鑰口令     私鑰加解密密碼
 -list               列出密鑰庫(kù)中的條目
 -printcert          打印證書(shū)內(nèi)容
 -printcertreq       打印證書(shū)請(qǐng)求的內(nèi)容
 -printcrl           打印 CRL 文件的內(nèi)容
 -storepasswd        更改密鑰庫(kù)的存儲(chǔ)口令   文件存儲(chǔ)密碼

刪除

  • keytool -delete -alias client -keystore client.p12 -keypass 123456 -storepass 123456
  • keytool -delete -alias server -keystore server.p12 -keypass 123456 -storepass 123456
  • keytool -delete -alias trustKeys -keystore trustKeys.p12 -keypass 123456 -storepass 123456
  • keytool -delete -alias localhost -keystore localhost.p12 -keypass 123456 -storepass 123456

查看證書(shū)
keytool -list -v -keystore trustKeys.jks -keypass 123456 -storepass 123456

keystore[7]

生成ca/server/client的keypair
keytool -genkeypair -alias ca -keystore ca.keystore -storepass 123456

生成證書(shū)請(qǐng)求文件 client.csr
keytool -certreq -alias client -keystore client.keystore -storepass 123456 -file client.csr

用ca進(jìn)行 client.cer 證書(shū)簽發(fā)
keytool -gencert -alias ca -keystore ca.keystore -storepass 123456 -infile client.csr -outfile client.cer

導(dǎo)出ca證書(shū) (含ca公鑰)
keytool -exportcert -alias ca -keystore ca.keystore -storepass 123456 -file ca.cer

把ca證書(shū)和ca簽名的client證書(shū)都導(dǎo)入到client的keystore中, 導(dǎo)入的client.cer將會(huì)替換原來(lái)client.keystore中相同別名的證書(shū)
keytool -importcert -alias ca -keystore client.keystore -storepass 123456 -file ca.cer
keytool -importcert -alias client -keystore client.keystore -storepass 123456 -file client.cer

轉(zhuǎn)為jks格式
keytool -importkeystore -srckeystore hanclientk.p12 -srcstoretype PKCS12 -deststoretype JKS -destkeystore client.jks -keypass 123456 -storepass 123456

p12

根CA (自簽CA, 使用者和頒發(fā)者都是它自己), rootca.keystore (pkcs12)
keytool -genkeypair -alias rootca -storetype PKCS12 -keystore rootca.keystore -validity 3650 -keysize 2048 -keyalg RSA -sigalg SHA256withRSA -v -dname "C=CN,ST=SX,L=CZ,O=mycpmpany,OU=mygroup,CN=127.0.0.1" -keypass 123456 -storepass 123456

從密鑰庫(kù)中導(dǎo)出 cer 證書(shū), rootca.cer
keytool -exportcert -alias rootca -keystore rootca.keystore -file rootca.cer -keypass 123456 -storepass 123456

生成 pkcs12 的keystore文件 serverKeystore.jks / clientKeystore.jks

  • keytool -genkeypair -alias server -storetype PKCS12 -keyalg RSA -keysize 1024 -sigalg SHA256withRSA -validity 3650 -keystore serverKeystore.jks -v -dname "C=CN,ST=SX,L=CZ,O=mycpmpany,OU=mygroup,CN=127.0.0.1" -keypass 123456 -storepass 123456
  • keytool -genkeypair -alias client -storetype PKCS12 -keyalg RSA -keysize 1024 -sigalg SHA256withRSA -validity 3650 -keystore clientKeystore.jks -v -dname "C=CN,ST=SX,L=CZ,O=mycpmpany,OU=mygroup,CN=127.0.0.1" -keypass 123456 -storepass 123456

生成證書(shū)請(qǐng)求 csr 文件, server.csr / client.csr

  • keytool -certreq -alias server -keystore serverKeystore.jks -storepass 123456 -file server.csr
  • keytool -certreq -alias client -keystore clientKeystore.jks -storepass 123456 -file client.csr

用ca進(jìn)行證書(shū)簽發(fā) server.cer / client.cer

  • keytool -gencert -alias rootca -keystore rootca.keystore -storepass 123456 -infile server.csr -outfile server.cer
  • keytool -gencert -alias rootca -keystore rootca.keystore -storepass 123456 -infile client.csr -outfile client.cer

把ca證書(shū)和ca簽名的client證書(shū)都導(dǎo)入到client的keystore中, 導(dǎo)入的client.cer將會(huì)替換原來(lái)client.keystore中相同別名的證書(shū)

  • keytool -importcert -alias ca -keystore client.keystore -storepass 123456 -file ca.cer
  • keytool -importcert -alias client -keystore client.keystore -storepass 123456 -file client.cer

從keystore中導(dǎo)出證書(shū) server.cer / client.cer

  • keytool -exportcert -alias server -keystore serverKeystore.jks -file server.cer -keypass 123456 -storepass 123456
  • keytool -exportcert -alias server -keystore clientKeystore.jks -file client.cer -keypass 123456 -storepass 123456

將 cer 證書(shū)導(dǎo)入信任證書(shū)庫(kù) clientTruststore.jks / serverTruststore.jks

  • keytool -importcert -alias trustServer -file server.cer -keystore clientTruststore.jks -keypass 123456 -storepass 123456
  • keytool -importcert -alias trustClient -file client.cer -keystore serverTruststore.jks -keypass 123456 -storepass 123456

jks

需要生成雙方的密鑰文件,并把對(duì)方的cert導(dǎo)入自己的密鑰文件里[8]

Warning:
JKS 密鑰庫(kù)使用專(zhuān)用格式涂身。建議使用 "keytool -importkeystore -srckeystore server.jks -destkeystore server.jks -deststoretype pkcs12" 遷移到行業(yè)標(biāo)準(zhǔn)格式 PKCS12。

以jks格式生成服務(wù)器端包含Public key和Private Key的keystore文件 server.jks
keytool -genkey -alias server -keyalg RSA -keysize 2048 -sigalg SHA256withRSA -keystore server.jks -validity 3650 -v -dname "C=CN,ST=SX,L=CZ,O=mycpmpany,OU=mygroup,CN=myserver" -keypass 123456 -storepass 123456

從keystore中導(dǎo)出別名為server的服務(wù)端證書(shū) server.cer
keytool -keystore server.jks -export -alias server -file server.cer -keypass 123456 -storepass 123456

以jks格式生成服務(wù)器端包含Public key和Private Key的keystore文件 client.jks
keytool -genkey -alias client -keyalg RSA -keysize 2048 -sigalg SHA256withRSA -keystore client.jks -validity 3650 -v -dname "C=CN,ST=SX,L=CZ,O=mycpmpany,OU=mygroup,CN=myclient" -keypass 123456 -storepass 123456

從keystore中導(dǎo)出別名為client的客戶(hù)端證書(shū) client.cer
keytool -keystore client.jks -export -alias client -file client.cer -keypass 123456 -storepass 123456

把客戶(hù)端的 cer 導(dǎo)入到服務(wù)端
keytool -import -alias client -file client.cer -keystore server.jks -keypass 123456 -storepass 123456

把服務(wù)端的 cer 導(dǎo)入到客戶(hù)端
keytool -import -alias server -file server.cer -keystore client.jks -keypass 123456 -storepass 123456

分別把 cer 導(dǎo)入 信任庫(kù) serverTruststore.jks / clientTruststore.jks / 公共的truststore.jks

  • keytool -import -alias trustClient -file client.cer -keystore serverTruststore.jks -keypass 123456 -storepass 123456
  • keytool -import -alias trustServer -file server.cer -keystore clientTruststore.jks -keypass 123456 -storepass 123456

檢驗(yàn)服務(wù)端是否具有自己的private key和客戶(hù)端的cert
keytool -list -keystore server.jks


轉(zhuǎn)換JKS格式為P12, JKS是Java的密鑰文件格式,轉(zhuǎn)換成通用的PKCS12格式 (*.p12 / *.pfx)
keytool -importkeystore -srckeystore client.jks -destkeystore client.p12 -srcstoretype JKS -deststoretype PKCS12 -srcstorepass 123456 -deststorepass 123456 -srckeypass 123456 -destkeypass 123456 -srcalias client -destalias client -noprompt

SpringBoot yml 配置

server:
  ssl:
    enabled: true
    key-store-type: JKS # PKCS12 #JKS
    key-store: classpath:certificate/server.jks
    key-store-password: 123456
    key-alias: server
    client-auth: need
    trust-store-provider: SUN
    trust-store-type: JKS
    trust-store: classpath:certificate/server.jks # serverTruststore.jks
    trust-store-password: 123456

測(cè)試驗(yàn)證

curl

  • --cert指定客戶(hù)端公鑰證書(shū)的路徑
  • -key指定客戶(hù)端私鑰文件的路徑
  • -k不校驗(yàn)證書(shū)的合法性揣钦,因?yàn)槲覀冇玫氖亲院灻C書(shū)冯凹,所以需要加這個(gè)參數(shù)
  • -v 可選, 來(lái)觀察具體的SSL握手過(guò)程

導(dǎo)出客戶(hù)端的cert文件
openssl pkcs12 -nokeys -in client.p12 -out client.pem

導(dǎo)出客戶(hù)端的key文件
openssl pkcs12 -nocerts -nodes -in client.p12 -out client.key

使用 cert 和 key 測(cè)試

  • curl -k --cert client.pem --key client.key https://localhost/hello

使用密碼測(cè)試

  1. openssl pkcs12 -in client.p12 -nodes -out client.pem -password pass:123456 導(dǎo)出 pem
  2. curl -k --cert client.pem:123456 https://localhost/hello 測(cè)試

參考資料


  1. http://www.reibang.com/p/a7292b4db7bd ? ? ?

  2. https://blog.csdn.net/enweitech/article/details/81781405 ? ?

  3. http://www.reibang.com/p/3f20772cd0be ?

  4. https://www.cnblogs.com/mafly/p/ssl.html ? ?

  5. https://linux.cn/article-12293-1.html ?

  6. https://cloud.tencent.com/developer/article/1444793 ?

  7. https://bbs.huaweicloud.com/blogs/288569 ?

  8. https://www.cnblogs.com/larrydpk/p/12830365.html ?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末匈庭,一起剝皮案震驚了整個(gè)濱河市阱持,隨后出現(xiàn)的幾起案子衷咽,更是在濱河造成了極大的恐慌镶骗,老刑警劉巖卖词,帶你破解...
    沈念sama閱讀 222,183評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異裆赵,居然都是意外死亡战授,警方通過(guò)查閱死者的電腦和手機(jī)植兰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)楣导,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)筒繁,“玉大人毡咏,你說(shuō)我怎么就攤上這事呕缭÷淠眨” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,766評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵滋戳,是天一觀的道長(zhǎng)奸鸯。 經(jīng)常有香客問(wèn)我娄涩,道長(zhǎng)蓄拣,這世上最難降的妖魔是什么球恤? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,854評(píng)論 1 299
  • 正文 為了忘掉前任咽斧,我火速辦了婚禮张惹,結(jié)果婚禮上宛逗,老公的妹妹穿的比我還像新娘拧额。我一直安慰自己侥锦,他們只是感情好恭垦,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,871評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布唠帝。 她就那樣靜靜地躺著襟衰,像睡著了一般瀑晒。 火紅的嫁衣襯著肌膚如雪苔悦。 梳的紋絲不亂的頭發(fā)上玖详,一...
    開(kāi)封第一講書(shū)人閱讀 52,457評(píng)論 1 311
  • 那天蟋座,我揣著相機(jī)與錄音蜈七,去河邊找鬼飒硅。 笑死三娩,一個(gè)胖子當(dāng)著我的面吹牛雀监,可吹牛的內(nèi)容都是我干的会前。 我是一名探鬼主播瓦宜,決...
    沈念sama閱讀 40,999評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼反璃,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼淮蜈!你這毒婦竟也來(lái)了梧田?” 一聲冷哼從身側(cè)響起悼尾,我...
    開(kāi)封第一講書(shū)人閱讀 39,914評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎俯画,沒(méi)想到半個(gè)月后泡仗,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體娩怎,經(jīng)...
    沈念sama閱讀 46,465評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡截亦,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,543評(píng)論 3 342
  • 正文 我和宋清朗相戀三年崩瓤,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了却桶。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片颖系。...
    茶點(diǎn)故事閱讀 40,675評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡嘁扼,死狀恐怖偷拔,靈堂內(nèi)的尸體忽然破棺而出莲绰,到底是詐尸還是另有隱情,我是刑警寧澤辞友,帶...
    沈念sama閱讀 36,354評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站戳晌,受9級(jí)特大地震影響沦偎,放射性物質(zhì)發(fā)生泄漏豪嚎。R本人自食惡果不足惜侈询,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,029評(píng)論 3 335
  • 文/蒙蒙 一扔字、第九天 我趴在偏房一處隱蔽的房頂上張望啦租。 院中可真熱鬧,春花似錦焊刹、人聲如沸虐块。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,514評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至儿普,卻和暖如春眉孩,著一層夾襖步出監(jiān)牢的瞬間浪汪,已是汗流浹背死遭。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,616評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工呀潭, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,091評(píng)論 3 378
  • 正文 我出身青樓踏幻,卻偏偏與公主長(zhǎng)得像该面,于是被迫代替她去往敵國(guó)和親隔缀。 傳聞我的和親對(duì)象是個(gè)殘疾皇子猾瘸,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,685評(píng)論 2 360

推薦閱讀更多精彩內(nèi)容