Nginx之SSL雙向認證的正向代理設定實例
1. 正向代理與反向代理
正向代理與反向代理都是代理伺服器,所處的位置都是在於客戶端與真實伺服器之間,所做的事情也都是把客戶端的請求轉發給伺服器,再把伺服器的響應轉發給客戶端,但是二者之間還是有一定的差異的。
1.1 正向代理伺服器
是客戶端的代理,幫助客戶端存取無法直接訪問的目標伺服器資源,客戶端可明確知道要訪問的目標網址,通常架設在客戶端,主要是用來解決訪問上限制的問題。
1.2 反向代理伺服器
是伺服器端的代理,幫助伺服器做負載均衡、安全防護,客戶端無法得知真實伺服器所在,通常架設在伺服器端,主要是用來做負載均衡及安全防護。
2. 準備自簽測試憑證
2.1 下載OpenSSL工具
https://www.openssl.org/
2.2 OpenSSL設定
2.2.1 建立產生憑證所需目錄
◎ 請於安裝完成後之bin目錄下建立目錄demoCA
◎ 請於目錄demoCA建立目錄newcerts
◎ 請於目錄demoCA下建立2個檔案index.txt和serial
◎ 請編輯檔案serial,輸入自簽憑證之初始序號(請自編流水號,Ex.代號+yyyymmdd)
◎ 每次以根憑證簽發成功後,序號會自動+1,並記錄至index.txt和newcerts
2.3 建立CA根憑證
● -subj的參數請自行調整為單位適合的名稱
◎ C:國家或地區名稱
◎ ST:州/省
◎ L:州/省
◎ O:組織
◎ OU:組織單位
◎ CN:通用名稱
● 根憑證金鑰長度為4096,效期為10年
● 語法如下:
openssl req -x509 -subj "/C=TW/ST=Taipei/L=Taipei/O=TPI/OU=TPI/CN=Thinkpower Root CA" -new -sha256 -newkey rsa:4096 -keyout ThinkpowerCA.key -out ThinkpowerCA.cer -days 3650
2.4 建立伺服器憑證與憑證請求檔
● -subj的參數請自行調整為單位適合的名稱,欄位說明請參考【2.3建立CA根憑證】
● 語法如下:
openssl genrsa -out ThinkpowerServer.key 2048
openssl req -subj "/C=TW/ST=Taipei/L=Taipei/O=TPI/OU=TPI/CN=Thinkpower Server" -new -sha256 -key ThinkpowerServer.key -out ThinkpowerServer.csr
2.5 簽發自我憑證
● 語法如下:
openssl x509 -req -in ThinkpowerServer.csr -CA ThinkpowerCA.cer -CAkey ThinkpowerCA.key -CAcreateserial -out ThinkpowerServer.cer -days 730 -sha256
● 顯示憑證用途,語法如下:
openssl x509 -purpose -in ThinkpowerServer.cer -inform PEM
3. Nginx設定
Nginx需先升級為1.18版以上,方可支援此正向代理SSL憑證模組。(Nginx官方說明文件上標示「proxy_ssl_certificate」及「proxy_ssl_certificate_key」設定於1.7.8版本開始支援,但經實測,在1.12.2版上雖然可進行設定,但卻無法產生SSL雙向認證的結果,升級至1.18版後才可正常訪問SSL雙向認證之網站)
3.1 正向代理SSL憑證設定
# TPI Server
server {
listen 8300; # 監聽port號
location / {
proxy_pass https://xxx.xxx.com.tw; # 代理位置
proxy_ssl_certificate ./ThinkpowerServer.cer; # 自我憑證檔路徑
proxy_ssl_certificate_key ./ThinkpowerServer.key; # 自我憑證檔密鑰路徑
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
4. 參考連結
● https://www.openssl.org/
● https://kknews.cc/tech/k66p2gb.html
● http://nginx.org/en/docs/http/ngx_http_proxy_module.html