我一直在尝试设置客户端证书身份验证近三天,但无济于事。
我已经在heliohost注册了一个免费域名并安装了由加密发布的免费ssl证书。
我的计划是拥有自签名证书并在以后针对数据库进行检查(用于用户身份验证),因此我将SSLVerifyClient
设置为htaccess文件中的optional_no_ca
。我安装了几个由openssl生成的自签名证书,但无论我尝试使用哪种浏览器(Chrome,Firefox或IE),当我尝试通过Chrome访问手机时,我没有提示选择除之外的证书,在这种情况下,它提供安装证书,因为我没有通过电话。
这是我的.htaccess文件的内容:
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]
SSLOptions +StdEnvVars
SSLRequireSSL
SSLVerifyDepth 1
SSLVerifyClient optional_no_ca
我真的很感激有关这个问题的任何反馈,这是我第一次尝试实现这一点,而且我不确定天气问题是我的设置还是镀铬。
我也使用chrome 59
KRISS
答案 0 :(得分:0)
您已省略了ssl证书颁发机构配置的部分内容。需要配置签署客户端证书的CA证书(请参阅this
SSLCACertificateFile "conf/ssl.crt/ca.crt"
服务器没有发送根CA,因为您已将SSLVerifyClient设置为optional_no_ca,浏览器会自动执行连接,因为它找不到任何合适的证书(参见下面的TLS1.2注释)
由于您已在服务器中设置optional_no_ca
,即使未显示证书,它也会接受连接。您设置require
后,您会发现Chrome与该连接失败。
SSLCACertificateFile
在.htaccess中无法配置。由于您无法自定义chrome,我担心您需要配置此参数以强制提供证书提示
当证书列表为空时,浏览器之间的行为可能会有所不同,因为TLS规范允许它
请参阅TLS1.2 RFC
<强> 7.4.4。证书申请
certificate_authorities
可接受的专有名称[X501]的列表 certificate_authorities,以DER编码格式表示。这些 专有名称可以为a指定所需的专有名称 根CA或从属CA;因此,此消息可用于 描述已知的根以及所需的授权空间。 如果 certificate_authorities列表为空,然后客户端为MAY 发送相应ClientCertificateType 的任何证书, 除非有相反的外部安排。
<强> 7.4.6。客户证书
[...] 如果客户端没有发送任何证书,那么 服务器可以自行决定是否继续握手 客户端身份验证,或使用致命的handshake_failure进行响应 警报。强>
答案 1 :(得分:0)
问题是由于chrome,我遗憾的是无法确定它但是设法让它工作并提示我在firefox上获得证书。 谢谢你的答案。