0

是否可以(...补丁、模块、任何东西...)配置 apache/mod_ssl 网络服务器(任何版本)以自动发现/下载中间颁发 CA 证书到预定义的信任根 CA?

我们需要能够为数以万计的最终用户提供 TLS 客户端身份验证,并且可能需要 Web 服务器信任数百个中间颁发 CA。我们可以访问Axway/Tumbleweed Server Validator来处理链中证书的 SCVP/OCSP/CRL 验证(撤销、OID 策略等),但是为了让 Axway Server Validator 插件通过客户端证书, apache/mod_ssl 必须首先对客户端证书进行身份验证/验证,并且它针对预配置的 apache CA 证书数据库(带有 PEM 编码 CA 证书的串联列表的文本文件或包含单个证书文件的目录的目录)发布链。

无论 apache 是否知道颁发 CA 链(因为 SCVP 将为我验证该链),我都可以接受任何证书,但我找不到任何表明这是可能的信息。

我可以手动(或通过脚本)创建 CA 证书捆绑文本文件,但我确信这将很快成为一个非常大的文件,并且需要定期扫描以删除过期的 CA 证书并添加新颁发的证书。当然,这种方法的问题是,当新的 CA 证书添加到捆绑文件/目录时,需要重新启动网络服务器,并且生成的文件可能有几兆字节大小,这对网络服务器的性能不利.

非常感谢任何帮助和/或想法。

4

1 回答 1

1

您可能对这个问题感兴趣。但是,除非您真正了解自己在做什么,否则这很可能会引入安全漏洞。

这有两个问题:

  1. SSLVerifyCLient optional_no_ca将让任何客户端证书通过。您唯一可以确定的是客户端具有与他们提供的证书中的公钥匹配的私钥(证书可能还需要当前有效并且使用 TLS 客户端密钥,我不能记住)。

  2. 指向SSLCADNRequestFile一个空的(或只是一个换行符)文件也会使服务器向其客户端通告一个空的 CA 列表。请注意,这是 TLS 1.0 之前的未记录行为(但通常有效)并从 TLS 1.1 开始授权,但作为“未指定”行为。

第一点是一个问题,因为您根本没有在 Apache Httpd 中验证证书。如果后面的应用程序(依赖于身份验证)作为其身份验证层的一部分(您将以受信任的方式将客户端证书链转发到该层)执行某些操作,则可以对于 Apache Httpd 层本身的任何内容,这绝对是不行的:Httpd 中的任何限制都会使用SSL_CLIENT_S_DN例如,或者,这样的表达式FakeBasicAuth,根本不能依赖。

第二点可能是可用性方面的问题,因为它可能会混淆许多客户端,特别是具有多个可用证书并且通常根据服务器通告的 CA 执行自动选择的客户端。

更一般地,具有如此多种中间 CA 的“数以万计的最终用户”的情况似乎不寻常。在传统的 PKI 模型中,您配置的 CA 是您信任的锚点:它们的存在是有原因的,并且您信任它们。真正应该由客户端来提供所需的中间证书(或者由服务器来信任它们并明确地宣传它们)。虽然您尝试做的事情在技术上可能是可行的,但您在实施时需要非常小心。也不清楚这在多大程度上符合各种行政标准和政策。

于 2014-03-18T15:41:11.667 回答