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

时间:2012-11-14 14:24:12

标签: apache ssl certificate x509

如何配置Apache httpd以信任特定的客户端证书?

我们需要将对Web服务的访问权限限制为特定(已知)合作伙伴的服务器 我们计划为此使用基于CA的解决方案(一个可靠的CA,只有在我们接受它们时才会签署值得信赖的CSR);但是,我们公司的CA不会为外部公司创建证书。

为了建立安全连接,在必要的PKI准备就绪之前,我们希望在Apache httpd代理上配置特定的客户端证书。

但httpd不接受客户端的连接,客户端尝试使用客户端证书进行连接,该客户端证书已添加到CACertificateFile(以Base64和DER格式(PEM)编码的串联x509证书),已配置为虚拟主机。

在这种情况下,客户端证书不是自签名证书。

1 个答案:

答案 0 :(得分:4)

您应该通过SSLCACertificateFileSSLCACertificatePath配置您信任的CA证书并使用SSLVerifyClientoptionalrequired,而不是optional_no_ca, (不会执行任何身份验证)使服务器请求客户端证书。

如果您在SSLVerifyClient部分中直接使用VirtualHost,则会在初始握手期间发送客户端证书。如果您将其置于Directory / .htaccess范围内,则会重新协商客户端证书。

在初始握手中发送证书时,调试更容易,因为客户端证书本身不会被加密。您应该能够通过使用Wireshark(在客户端发送的Certificate消息中)查看流量来查看它。在调试时,值得检查服务器发送Certificate Request消息,并查看其证书颁发机构列表。

问题的典型原因是,如果需要,客户端无法识别该列表或未在其链中发送其中间CA证书的客户端。

如果您想更具体地授权某些证书,可以检查变量SSL变量(例如SSL_CLIENT_S_DN_*)并在SSLRequire指令中使用它(参见example)。