操作記錄
創(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)
- 生成根證書(shū)密鑰 root.key (生成 RSA私鑰)
openssl genrsa -out root.key 2048 -aes256 -passout pass:123456
- 生成根證書(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"
- 自簽根證書(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)
- 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
公鑰
- 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"
- 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
- 將證書(shū)轉(zhuǎn)為p12格式, p12格式的證書(shū)包含公私鑰
openssl pkcs12 -export -clcerts -in server.crt -inkey server.key -out server.p12 -passout pass:123456
客戶(hù)端
- client.key 客戶(hù)端的私鑰文件
openssl genrsa -out client.key 2048 -aes256 -passout pass:123456
- 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"
- 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
- 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
- 使用 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ū)鏈,-CAfile
CA證書(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è)試
-
openssl pkcs12 -in client.p12 -nodes -out client.pem -password pass:123456
導(dǎo)出 pem -
curl -k --cert client.pem:123456 https://localhost/hello
測(cè)試