Apache httpd:如何信任特定的客户端证书?

7
如何配置Apache httpd以信任特定客户端证书?
我们需要将对WebService的访问限制在特定(已知)合作伙伴的服务器上。我们计划使用基于CA的解决方案(一个受信任的CA,只会签署我们所接受的可信CSR),但是,我们公司的CA不会为外部公司创建证书。
为了建立安全连接,直到必要的PKI准备好,我们希望在Apache httpd代理上配置特定的客户端证书作为受信任证书。
但是,httpd不接受试图使用已添加到CACertificateFile(以Base64编码和DER格式(PEM)进行拼接的x509证书)的虚拟主机中配置的客户端证书进行连接的客户端。
在这种情况下,客户端证书不是自签名证书。
1个回答

5
您应该通过 SSLCACertificateFileSSLCACertificatePath 配置您信任的 CA 证书,使用 SSLVerifyClient (optionalrequired,不要使用 optional_no_ca,因为它不会执行任何身份验证) 来使服务器请求客户端证书。
如果您直接在您的 VirtualHost 部分中使用 SSLVerifyClient,则客户端证书将在初始握手期间发送。如果您将其放在 Directory/.htaccess 中,则客户端证书将重新协商。
当证书在初始握手过程中发送时,更容易进行调试,因为客户端证书本身不会被加密。您可以通过使用 Wireshark (在客户端发送的 Certificate 消息中)查看流量来查看它。在调试时,值得检查服务器是否发送了 Certificate Request 消息,并查看其认证机构列表。
一个常见的问题是客户端无法识别该列表或客户端未发送其链中的中间 CA 证书(如果需要)。
如果您想更具体地授权某些证书,则可以检查 SSL 变量 (例如 SSL_CLIENT_S_DN_*) 并在 SSLRequire 指令中使用它(见 例子)。

2
嗨,布鲁诺,我们想要更具体地授权某些证书。在检查SSL变量时,有没有办法检查证书的指纹?在我们的情况下,这是我们唯一可以用来授权的信息。但我发现没有这样的变量。 - Xilang
2
还是说有变量可以获取证书的公钥?我也没有找到。 - Xilang
你如何将客户端证书(通过SSL握手传输)放入像.htaccess这样的目录中? - Pramod

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接