6

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

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

无论如何,为了建立安全连接,在必要的 PKI 准备好之前,我们希望将特定的客户端证书配置为在我们的 Apache httpd 代理上受信任。

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

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

4

1 回答 1

5

您应该通过SSLCACertificateFileor配置您信任的 CA 证书,SSLCACertificatePath并使用SSLVerifyClient( optionalor required, not optional_no_ca,不会执行任何身份验证) 使服务器请求客户端证书。

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

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

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

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

于 2012-11-14T18:52:18.423 回答