【问题标题】:Apache httpd: How to trust specific client certificates?Apache httpd:如何信任特定的客户端证书?
【发布时间】:2012-11-03 01:20:21
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: apache ssl certificate x509


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 嗨 Bruno,我们也想更具体地授权某些证书。检查 SSL 变量时,是否有检查证书的指纹/指纹?在我们的例子中,这是我们可以用来授权的唯一信息。但是我发现没有这样的变量。
    • 或者,是否有变量来获取证书的公钥?我也没找到。
    • 如何将客户端证书(通过 SSL 握手)放入像 .htaccess 这样的目录中?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-25
    • 2020-10-29
    • 2014-02-14
    • 2010-09-13
    • 2010-09-16
    • 1970-01-01
    相关资源
    最近更新 更多