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

Bin*_*y42 5 apache ssl certificate x509

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

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

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

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

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

Bru*_*uno 5

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

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

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

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

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

  • 嗨布鲁诺,我们也想更具体地授权某些证书。检查 SSL 变量时,是否可以检查证书的指纹/指纹?在我们的例子中,这是我们可以用来授权的唯一信息。但我发现没有这样的变量。 (2认同)
  • 或者,是否有获取证书公钥的变量?我也没找到。 (2认同)