最近在作一個項目,有個接口安全性要求比較高,因此要用到雙向認證,就開始究了一下具體搭建html
具體是參考這裏:http://blog.csdn.net/kunoy/article/details/8239653 nginx
遇到的問題做一下筆記安全
主要是雙向認證問題,不少分享都是基於整個域名訪問都是雙向認證的,可是不少時候,咱們開發可能只是某個路由或某個接口下才須要雙向認證session
不少的分享只要加上 ssl_verify_client on; ssl_client_certificate ca.crt; 實現的,達不到咱們只是局部接口才須要雙向認證的,下面就是完整解決辦法 主要是 ssl_verify_client optional; 這個選項app
也在一些社區看到的提示dom
path based client ssl verification is messy as it requires the client/server to do a (secure) renegotiation.ui
You’re better off doing a separate domain or make it ssl_verify_client optional at the top level and check the compliance at application level.spa
最後在location 里加上.net
location /test {
if ($ssl_client_verify != 'SUCCESS') {
return 403;
break;
}
return 200 "success";
} code
server { listen 443; server_name xxx.xx.com; ssl on; ssl_certificate server.crt; ssl_certificate_key server.key; ssl_client_certificate ca.crt; ssl_session_timeout 30m; ssl_verify_client optional; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; ssl_prefer_server_ciphers on; location /test { if ($ssl_client_verify != 'SUCCESS') { return 403; break; } return 200 "success"; } location / { root html; #站點目錄 index index.html index.htm; } }
若是還有同窗有更好的方法,也能夠交流一下