Nginx配置客戶端SSL雙向認證


對於 NGINX 的 HTTPS 配置,通常情況下我們只需要實現服務端認證就行,因為瀏覽器內置了一些受信任的證書頒發機構(CA),服務器端只需要拿到這些機構頒發的證書並配置好,瀏覽器會自己校驗證書的可用性並通過 SSL 進行通訊加密。

但特殊情況下我們也需要對客戶端進行驗證,只有受信任的客戶端才能使用服務接口,此時我們就需要啟用雙向認證來達到這個目的,只有 當客戶端請求帶了可用的證書才能調通服務端接口 。

CA 與自簽名

CA 是權威機構才能做的,並且如果該機構達不到安全標准就會被瀏覽器廠商“封殺”,前不久的沃通、StartSSL 就被 Mozilla、Chrome 封殺了。不過這並不影響我們進行雙向認證配置,因為我們是自建 CA 的..

為了方便,我們就在 NGINX 的目錄下進行證書相關制作:

創建相關目錄

#mkdir ssl

#cd ssl

制作 CA 私鑰

#openssl genrsa -out ca.key 2048

制作 CA 根證書(公鑰)

#openssl req -new -x509 -days 3650 -key ca.key -out ca.crt

服務器端證書

制作服務端私鑰

#openssl genrsa -out server.pem 1024

#openssl rsa -in server.pem -out server.key

生成簽發請求

#openssl req -new -key server.pem -out server.csr

用 CA 簽發

#openssl x509 -req -sha256 -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -days 3650 -out server.crt

客戶端證書

和服務端證書制作一樣。

 

至此需要的證書都弄好了,現在開始配置Nginx。

部分主要配置:

server{

  ssl on;

  ssl_certificate ssl/server.crt; #server公鑰

  ssl_certificate_key ssl/server.key; #server私鑰

  ssl_client_certificate ssl/ca.crt; #根級證書公鑰,用於驗證各個二級client

  ssl_verify_client on;

}

配置好后就就重新reload nginx。

 

請求驗證

1、瀏覽器驗證

由於是雙向認證,直接通過瀏覽器訪問https地址是被告知400 Bad Request(No required SSL certificate was sent)的,需要在本機安裝client證書。
windows上安裝的證書需要pfx格式,也叫p12格式,生成方式如下:
openssl pkcs12 -export -inkey ssl/client.key -in ssl/client.crt -out ssl/client.pfx #執行后會提示輸入密碼(用於安裝使用的)
然后考到windows中雙擊即可進行安裝,安裝時會提示輸入生成證書時設置的密碼。
安裝成功后,重啟瀏覽器輸入網址訪問,瀏覽器可能會提示你選擇證書,選擇剛才安裝的那個證書即可。
此時有些瀏覽器會提示用戶該證書不受信任,地址不安全之類,這是因為我們的server證書是我們自己頒發的,而非真正的權威CA機構頒布,忽略它既可。
2、CURL驗證
執行curl命令,帶上證書,但是有些問題,貌似是curl本身的問題,這里就不研究了,應為用瀏覽器已經驗證通過。
相關命令:
curl -k --cert ssl/client.crt --key client.key https://ip:443


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM