不幸的, nginx不支持特定路径开启ssl_verify_client, 如果在location下面使用ssl_verify_client, 就会提示
nginx: [emerg] “ssl_verify_client” directive is not allowed here
某处看到的说法是
path based client ssl verification is messy as it requires the client/server to do a (secure) renegotiation.
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.
我们该怎么办呢?
方法是有的, 通过如下配置即可 “特定路径开启ssl_verify_client”。
ssl_client_certificate 用于验证客户端的证书的证书的路径; ssl_verify_client optional; ssl_verify_depth 5; location ~ 一个匹配需要证书验证的路径的正则表达式 { if ($ssl_client_verify != SUCCESS) { return 403; break; } }
考察 “ssl_verify_client optional” , 也就是说只要有符合的证书, 无论是否需要验证, 刚开始都会弹出选择证书的对话框, 很麻烦。
发表评论