Apache 客户端 SSL 证书验证漏洞检查

Apache 客户端 SSL 证书验证漏洞检查

我正在寻找一种简洁的安全实现,以便客户端与我的 Apache 实例进行通信。它基本上是一种系统到系统 API 通信,不涉及组织外部的任何客户端。到目前为止,我们实现的内容如下所示,

  1. 我们创建了一个客户端密钥并生成了一个 CSR。
  2. 由组织CA签署的CSR。
  3. 我们的证书与客户端私钥结合并生成了 pfx。该 pfx 已共享给 API 调用者系统。

对 Apache httpd.conf 进行了以下修改

SSLVerifyClient require
SSLVerifyDepth 3
<Location />
    SSLRequire %{SSL_CLIENT_S_DN_CN} eq "client_cn_name" 
</Location>

这是正确的方法吗?这里的问题是没有服务器端验证,从某种意义上说,它没有与 Apache 实例进行握手。客户端证书直接位于根证书下。我在想,用实际上由组织 CA 颁发的 Apache 域私钥签署客户端 csr 是不是一个好主意?

另外,有人能解释一下这个 SSLRequire 指令的行为吗?我尝试生成一个自签名证书,它看起来类似于客户端证书,并且根证书和客户端的 CN 相同。但握手并不顺利,但我不确定自签名证书是否存在任何漏洞,可以通过此安全性?

感谢您的想法。

答案1

您可以使用组织证书或 Apache 服务器证书签署客户端证书。无论使用哪一个,请务必将其放入 SSLCACertificateFile 指令中,例如:

SSLCACertificateFile /path/to/apache/cert

作为SSLCACertificateFile 的文档表示,这是“您与之打交道的证书颁发机构 (CA) 的证书”文件。这些证书用于客户端身份验证。因此,这将确保要接受客户端证书,必须由该证书和密钥签名。如果您为此使用 Apache 服务器证书,则将其视为客户端证书的中间签名证书。

请注意 SSLRequire 是已弃用. 文档说这做了同样的事情:

Require expr %{SSL_CLIENT_S_DN_CN} eq "client_cn_name"

这有助于明确不涉及 SSL 证书检查;它只是检查表达式是否为真。

相关内容