最近在作一个项目,有个接口安全性要求比较高,因此要用到双向认证,就开始究了一下具体搭建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; } }
若是还有同窗有更好的方法,也能够交流一下