详解Nginx SSL快速双向认证配置(脚本)
這篇文章主要介紹了詳解Nginx SSL快速雙向認(rèn)證配置(腳本),現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
目前遇到一個項目有安全性要求,要求只有個別用戶有權(quán)限訪問。本著能用配置解決就絕不用代碼解決的原則,在Nginx上做一下限制和修改即可。
這種需求其實(shí)實(shí)現(xiàn)方式很多,經(jīng)過綜合評估考慮,覺得SSL雙向認(rèn)證方案對用戶使用最簡單,遂決定用此方案。
注: 本方案在Ubuntu Server 16.04 LTS實(shí)施,其他操作系統(tǒng)請酌情修改
SSL雙向認(rèn)證
絕大多數(shù)SSL應(yīng)用都以單向認(rèn)證為主,即客戶端只要信任服務(wù)端,就可以使用服務(wù)端的公鑰加密后向服務(wù)端發(fā)起請求,由服務(wù)端的私鑰解密之后獲得請求數(shù)據(jù)。
如果這個過程反過來,讓服務(wù)端信任客戶端,服務(wù)端使用客戶端的公鑰加密之后將數(shù)據(jù)返回給客戶端,其實(shí)也是可以做到的,原理和實(shí)現(xiàn)跟單向認(rèn)證都差不多。友情鏈接檢查
服務(wù)端信任客戶端的操作往往也會伴隨著客戶端認(rèn)證服務(wù)端的過程,所以讓服務(wù)端信任客戶端的SSL認(rèn)證方式往往也被稱為SSL雙向認(rèn)證,并且要配置SSL雙向認(rèn)證必須先開啟服務(wù)端SSL,先配置客戶端信任服務(wù)端。
Nginx的SSL雙向認(rèn)證配置
第一步 開啟https訪問
根據(jù)理論知識,我們必須先開啟Nginx的SSL配置,即啟用https。這個過程較為簡單,目前有l(wèi)et’s encrypt這種免費(fèi)的證書方案,再也不用發(fā)愁自己搭建CA自簽了。申請免費(fèi)證書的過程略過,直接貼啟用https的配置:
server { listen 80; listen 443 ssl http2; server_name example.com; ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # 只有Nginx >= 1.13.0 版本才支持TLSv1.3協(xié)議 # ssl_protocols TLSv1.3; # Nginx低于1.13.0版本用這個配置 ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; ssl_dhparam dhparam.pem; # openssl dhparam -out /etc/nginx/dhparam.pem 4096 ssl_ciphers ‘EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH’; ssl_ecdh_curve secp384r1; # Requires nginx >= 1.1.0 ssl_session_timeout 10m; ssl_session_cache shared:SSL:10m; ssl_session_tickets off; # Requires nginx >= 1.5.9 ssl_stapling on; # Requires nginx >= 1.3.7 ssl_stapling_verify on; # Requires nginx => 1.3.7 resolver 223.5.5.5 114.114.114.114 valid=300s; resolver_timeout 5s; # 啟用HSTS的配置,如果你的域名下還有非標(biāo)準(zhǔn)端口訪問的http應(yīng)用,請勿啟用HSTS # add_header Strict-Transport-Security “max-age=63072000; includeSubDomains; preload”; # 下面這個配置會拒絕Frame標(biāo)簽內(nèi)容,請確認(rèn)你的網(wǎng)站沒有frame / iframe add_header X-Frame-Options DENY; add_header X-Content-Type-Options nosniff; add_header X-XSS-Protection “1; mode=block”; # 為了let’s encrypt續(xù)期用,不用let’s encrypt不需要這個location location /.well-known { root /usr/share/nginx/html; } … SNIP … # 強(qiáng)制http跳轉(zhuǎn)為https if (KaTeX parse error: Expected '}', got 'EOF' at end of input: …rn 301 https://http_host$request_uri; }}
以上那一大堆ssl的配置參考來自于: https://cipherli.st/ 加強(qiáng)SSL的安全性配置
特別注意最后的強(qiáng)制https跳轉(zhuǎn),我們的目的是SSL雙向認(rèn)證,不走h(yuǎn)ttps無任何意義,所以必須強(qiáng)制跳轉(zhuǎn)https。
總結(jié)
以上是生活随笔為你收集整理的详解Nginx SSL快速双向认证配置(脚本)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Nginx服务器上安装并配置PHPMyA
- 下一篇: Nginx+Keepalived实现双机