Nginx配置客戶端SSL雙向認證

對於 NGINX 的 HTTPS 配置,一般狀況下咱們只須要實現服務端認證就行,由於瀏覽器內置了一些受信任的證書頒發機構(CA),服務器端只須要拿到這些機構頒發的證書並配置好,瀏覽器會本身校驗證書的可用性並經過 SSL 進行通信加密。nginx

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

CA 與自簽名

CA 是權威機構才能作的,而且若是該機構達不到安全標準就會被瀏覽器廠商「封殺」,前不久的沃通、StartSSL 就被 Mozilla、Chrome 封殺了。不過這並不影響咱們進行雙向認證配置,由於咱們是自建 CA 的..瀏覽器

爲了方便,咱們就在 NGINX 的目錄下進行證書相關製做:安全

建立相關目錄服務器

#mkdir sslcurl

#cd sslui

製做 CA 私鑰加密

#openssl genrsa -out ca.key 2048url

製做 CA 根證書(公鑰)server

#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。

 

請求驗證

一、瀏覽器驗證

因爲是雙向認證,直接經過瀏覽器訪問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機構頒佈,忽略它既可。
二、CURL驗證
執行curl命令,帶上證書,可是有些問題,貌似是curl自己的問題,這裏就不研究了,應爲用瀏覽器已經驗證經過。
相關命令:
curl -k --cert ssl/client.crt --key client.key https://ip:443
相關文章
相關標籤/搜索