通过使用 Apache Web 服务器成为自己的 CA 来生成客户端证书是一项简单的工作,并且有大量文档介绍如何实现这一点。我的问题略有不同。
我有几个客户想要拥有自己的 PKI 基础设施。他们希望能够生成自己的客户端证书并撤销它们。当他们访问我们的 Web 服务时,我们的 Web 服务器仍负责授权他们。
有人能告诉我可以研究哪些可能的解决方案吗?我看到 Apache 2.3 有一些与 SSLOCSP* 相关的指令 (http://httpd.apache.org/docs/2.3/mod/mod_ssl.html),但我对使用 Apache 2.3 并不十分满意,甚至看起来 SSLOCSP* 存在浏览器限制,而我们正在处理一些不可接受的客户端。
答案1
目前还没有真正自动化的方法。
我个人不太喜欢这些SSL*Path
指令,因为它们维护起来很麻烦。所以我们要做的是使用SSLCACertificateFile
、SSLCADNRequestFile
和SSLCARevocationFile
。然后使用一些 Python 脚本来处理 CRL 更新,如下所示:
- 从 CRL 分发点 (x509v3 扩展) 获取最新的 CRL。
- 根据 CA 证书的本地副本验证 CRL 内容。
- 将新的 CRL 写入磁盘。
- 对其他 CA 重复此操作。
- 正常重启 Apache。
在这种情况下,您只需要从管理其自己的 CA 的客户端获取 CA 证书和 CRL 分发点。
答案2
假设您乐意信任其 CA 签署的每个证书,那么您应该能够使用SSLCACertificatePath
和SSLVerifyClient require
验证您的客户端。但这确实意味着您无法知道何时应该拒绝已撤销的证书。Apache 2.2 确实有一个SSLCARevocationPath
选项允许您将 CRL 文件放入。这将要求您定期同步您的 CRL 文件。更新频率取决于同步所需的时间以及证书被撤销后您愿意接受它的时间。如果同步时间比您满意的时间长,那么这种方法将不起作用。如果您确实需要实时检查您的证书,那么您可能必须等到 Apache 2.4 发布。
http://www.apacheweek.com/features/crl似乎提供了有关如何正确设置的更多细节。
关于 OCSP,您需要浏览器支持吗?如果您只检查客户端证书是否有效,则只有服务器需要支持 OCSP。