当 nginx ssl_verify_client 是可选的时,如何发送 SSL 证书?

当 nginx ssl_verify_client 是可选的时,如何发送 SSL 证书?

我有一个 Web 服务,无论是否使用 SSL 客户端证书都可以使用。只有当浏览器通过证书进行身份验证时,用户才能获得完全访问权限。否则,他们只能获得基本功能。

nginx 的设置如下:

ssl_client_certificate /etc/nginx/client-cert/ca.crt;
ssl_verify_client optional;

问题是,在连接到服务时,没有浏览器提示选择证书。

当 ssl_verify_client 是可选的时,我应该期待什么行为?我是否仍会收到提示?

如果是,问题可能出在哪里?

如果预期的行为不是提示,我该如何强制浏览器将该特定证书发送给服务?

在 Ubuntu 16.04.4 LTS 上运行 nginx 1.10.3

nginx配置:https://pastebin.com/GwjVc0cZ

答案1

从客户端(即浏览器)的角度来看,可选客户端证书和必需客户端证书之间没有区别:在这两种情况下,服务器都会请求证书,并且仅在服务器端才会确定是否接受未发送证书的客户端。

我猜想是您的客户端没有您在 中指定的任何 CA 颁发的证书/etc/nginx/client-cert/ca.crt。此文件用于构建可接受 CA 的列表,并发送给客户端。如果浏览器中安装的客户端证书均与这些 CA 中的任何一个都不匹配,则不会给出提示(因为没有可供选择的证书),也不会发送任何客户端证书。

相关内容