我有一个可以使用或不使用 SSL 客户端证书的 Web 服务。只有当他们的浏览器使用证书进行身份验证时,用户才能获得完全访问权限。否则,他们将获得基本功能。
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
从客户端(即浏览器)的角度来看,可选客户端证书或必需证书之间没有区别:在这两种情况下,服务器都会请求证书,并且只有在服务器端才会确定客户端是否没有发送证书将被接受与否。
我的猜测是您的客户没有来自您在里面指定的任何 CA 的证书
/etc/nginx/client-cert/ca.crt
。此文件用于构建发送给客户端的可接受 CA 列表。如果浏览器中安装的客户端证书都与这些 CA 中的任何一个都不匹配,则不会给出提示(因为没有可供选择的内容)并且不会发送客户端证书。