nginx配置https雙向驗證nginx
服務端驗證(ca機構證書)瀏覽器
客戶端驗證(服務器自簽證書)服務器
本文用的阿里雲簽發的免費證書實驗,下載nginx安裝ssl,文件夾有兩個文件ide
這兩個文件用於作服務器https驗證阿里雲
配置以下:編碼
自簽證書步驟以下:spa
ca根證書生成命令行
建立ca私鑰code
openssl genrsa -out ca.key 2048
生成ca證書orm
openssl req -new -x509 -days 36500 -key ca.key -out ca.crt
客戶端證書生成
建立客戶端私鑰
openssl genrsa -out client.pem 2048 openssl rsa -in client.pem -out client.key
生成簽發請求
openssl req -new -key client.pem -out client.csr
使用ca證書進行簽發
openssl x509 -req -sha256 -extfile /etc/pki/tls/openssl.cnf -extensions v3_req -in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -days 36500 -out client.crt
驗證簽發證書是否正確
[root@danny ca]# openssl verify -CAfile ca.crt client.crt
client.crt: OK
製做p12證書(導入瀏覽器)
openssl pkcs12 -export -clcerts -in client.crt -inkey client.key -out client.p12
操做結束後目錄文件
[root@danny ca]# ls ca.crt ca.key ca.pem ca.srl client.crt client.csr client.key client.p12 client.pem
驗證,導出client.p12點擊安裝至瀏覽器,重啓瀏覽器。驗證過程截圖以下:
未開啓雙向認證ssl_verify_client on時(客戶端能夠直接https訪問)
開啓ssl_verify_client on可是沒有安裝客戶端證書時
安裝證書並重啓瀏覽器訪問
https證書管理中可看到已導入
確認便可訪問
補充1:若是使用ca機構頒發的證書ssl_certificate,ssl_certificate_key 使用ca機構頒發的證書,客戶端證書ssl_client_certificate使用本身生成的證書便可。
補充2:在阿里雲上申請的https證書的是pem格式,轉成cer,crt
openssl x509 -outform der -in xxx.pem -out xxx.cer openssl x509 -outform der -in xxx.pem -out xxx.crt
補充3:crt文件轉換爲pem文件
openssl x509 -in xxx.crt -out xxx.pem
補充4:生成安卓全部bks包(windos的jdk環境命令行,具體步驟可百度)
keytool -importcert -keystore client.bks -file client.crt -storetype BKS -provider org.bouncycastle.jce.provider.BouncyCastleProvider
補充5:常見證書格式說明
PKCS#7:Cryptographic Message Syntax Standard
PKCS#10:Certification Request Standard
PKCS#12:Personal Information Exchange Syntax Standard
X.509:是常見通用的證書格式。全部的證書都符合爲Public Key Infrastructure (PKI) 制定的 ITU-T X509 國際標準。
PKCS#7:經常使用的後綴是: .P7B .P7C .SPC
PKCS#12:經常使用的後綴有: .P12 .PFX
X.509:DER 編碼(ASCII)的後綴是: .DER .CER .CRT
X.509:PAM 編碼(Base64)的後綴是: .PEM .CER .CRT
.cer/.crt:是用於存放證書,它是2進制形式存放的,不含私鑰。
.pem:跟crt/cer的區別是它以Ascii來表示。
pfx/p12:用於存放我的證書/私鑰,他一般包含保護密碼,2進制方式
p10:是證書請求
p7r:是CA對證書請求的回覆,只用於導入
p7b:以樹狀展現證書鏈(certificate chain),同時也支持單個證書,不含私鑰。