搭建https單、雙向認證

一、準備工作

  • 環境: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中的標有雙向認證的兩條去掉即可

參考:https://www.cnblogs.com/yelao/p/9486882.html

https://www.cnblogs.com/xiao987334176/p/11041241.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章