我想强制对我的虚拟主机进行 ssl 客户端验证。但是得到“没有发送所需的 SSL 证书”错误,试图从中获取一些东西。
这是我的测试配置:
# defaults
ssl_certificate /etc/certs/server.cer;
ssl_certificate_key /etc/certs/privkey-server.pem;
ssl_client_certificate /etc/certs/allcas.pem;
server {
listen 1443 ssl;
server_name server1.example.com;
root /tmp/root/server1;
ssl_verify_client off;
}
server {
listen 1443 ssl;
server_name server2.example.com;
root /tmp/root/server2;
ssl_verify_client on;
}
Run Code Online (Sandbox Code Playgroud)
第一个服务器回复 200 http 代码,但第二个服务器返回“400 Bad Request, No required SSL certificate was sent, nginx/1.0.4”。
也许,在同一个 IP 上使用 ssl_verify_client 是不可能的?我应该将这些服务器绑定到不同的 IP,它会解决我的问题吗?
小智 6
我遇到了类似的问题,但希望区分ssl_verify_clients服务器块内的位置块之间,而不是服务器块之间。您可以通过将默认的 ssl 配置内容移动到两台服务器中来解决您的问题(当然是复制它,或者将它们全部放在一个服务器块中,接受多个子域并使用位置)。
对于基于位置的解决方案,如下所示。用
ssl_verify_client optional;
在 server 块中,并在各个位置使用 if 语句,例如:
if ($ssl_client_verify != SUCCESS) {
return 403;
}
我需要这样做以授予管理员访问 web 应用程序的权限,但仍然允许来自 github 的 webhooks 而无需为 github 提供客户端 ssl 证书。
小智 0
您是否已在浏览器中加载由 CA“/etc/certs/allcas.pem”签名的客户端证书(PKCS12 格式)?在 Firefox 中,您可以通过进入“首选项”->“高级”->“加密”->“查看证书”->“您的证书”来检查您的客户端证书。
参数“ssl_verify_client”的值如果默认为“off”。如果 SSL 客户端证书不是必需的,您也可以使用值“可选”。