對於 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、瀏覽器驗證