一、準備工作
- 環境:windows(linux類似)
- 工具:openssl、nginx
二、生成證書
- 方法一:可從正規網站獲取,有收費或者免費的,如阿里雲
- 方法二:JDK的Keytool生成證書
- 方法三:openssl生成
後兩種方法適合自己測試,正規網站獲取的證書安全性高,並且根證書都是大廠認證,瀏覽器一般內置,不需要再導入證書。
文章使用的是第三種方法,openssl生成證書。
1、創建根證書相關
- 創建根證書私鑰
openssl genrsa -out ca.key 1024
- 創建根證書請求文件
openssl req -new -out ca.csr -key ca.key
此指令,會讓填寫信息,其中國家,省市,公司等需要和後面的證書保持一致.後面challenge password的地方直接回車就好。
-
自籤根證書
openssl x509 -req -in ca.csr -out ca.cer -signkey ca.key -CAcreateserial -days 3650
-
生成p12格式根證書,密碼填寫123456(自定義)
openssl pkcs12 -export -clcerts -in ca.cer -inkey ca.key -out ca.p12
2、創建服務端證書
-
生成服務端key
openssl genrsa -out server.key 1024
-
生成服務端請求文件
openssl req -new -out server.csr -key server.key
填寫信息,國家省市公司和根證書保持一致, Common Name 要特別注意, 要用你服務器的域名,如果IP要慎用(代碼調用可能會出現異常)
- 生成服務端證書(root證書,rootkey,服務端key,服務端請求文件這4個生成服務端證書)
openssl x509 -req -in server.csr -out server.cer -signkey server.key -CA ca.cer -CAkey ca.key -CAcreateserial -days 3650
3、生成客戶端相關
-
生成客戶端key
openssl genrsa -out client.key 1024
-
生成客戶端請求文件
openssl req -new -out client.csr -key client.key
填寫證書信息
-
生成客戶端證書(root證書,rootkey,客戶端key,客戶端請求文件這4個生成客戶端證書)
openssl x509 -req -in client.csr -out client.cer -signkey client.key -CA ca.cer -CAkey ca.key -CAcreateserial -days 3650
-
生成客戶端p12格式根證書,密碼設置123456(自定)
openssl pkcs12 -export -clcerts -in client.cer -inkey client.key -out client.p12
需要的證書基本都有了
三、Nginx配置
1、雙向認證
nginx.conf配置,https的默認端口一般爲443,找到如下,將註釋去掉
server {
listen 443;
server_name www.sdkhahaha.com;
ssl on;
ssl_certificate D:/nginx1.4.7/nginx-1.4.7/ssl2/server.cer;#配置證書位置
ssl_certificate_key D:/nginx1.4.7/nginx-1.4.7/ssl2/server.key;#配置祕鑰位置
ssl_client_certificate D:/nginx1.4.7/nginx-1.4.7/ssl2/ca.cer;#雙向認證
ssl_verify_client on; #雙向認證
ssl_session_timeout 5m;
ssl_protocols SSLv2 SSLv3 TLSv1 TLSv1.1 TLSv1.2; #按照這個協議配置
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; #按照這個套件配置
#ssl_protocols SSLv2 SSLv3 TLSv1;
#ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
root D:/HBwork/tools/nginx1.4.7/nginx-1.4.7/html;
index index.html index.htm;
}
location /sr {
proxy_pass http://127.0.0.1:10702/rsfe;
}
}
啓動Nginx,(先在C:\Windows\System32\drivers\etc\hosts 裏面做好 域名和ip的映射127.0.0.1 www.sdkhahaha.com)
點擊高級,繼續前往
出現400錯誤,是因爲我們沒有帶客戶端證書的原因, 將client.p12 導入瀏覽器,則如下圖
這時候我們將我們的ca.p12也導入,證書存儲不用默認的個人,選擇 受信任的根證書頒發機構, 如果再訪問如下圖(可能要重啓瀏覽器)
2、單向認證
將nginx.conf中的標有雙向認證的兩條去掉即可