【问题标题】:Configuring Tomcat to check CRL Distribution Points配置 Tomcat 以检查 CRL 分发点
【发布时间】:2012-09-29 17:18:54
【问题描述】:

我正在编写一个 webapp,它需要传入连接才能使用客户端证书来确保安全。我已将其设置为仅接受安全连接,并使用 clientAuth=true。

我一直在尝试检查它是否拒绝已被吊销的证书,但它似乎没有检查 CRL。这是我第一次真正尝试使用 CRL,所以有可能/很可能我做错了什么......

测试设置:

  1. 在已添加到信任库的 openssl 中创建了测试 CA 用于服务器
  2. 为 CA 创建了 CRL,并将配置设置添加到 openssl 以在客户端证书中包含 crl 分发点(使用 Howto create a certificate using openssl including a CRL distribution point?)
  3. 使用 CA 创建了两个客户端证书
  4. 撤销了其中一个客户端证书,更新了 crl 并将其放置在指定为分发点的地址中(此后检查了 此 CRL 的内容,它确实将证书的 ID 列为已撤销)

设置完成后,我尝试使用这两个证书连接到应用程序,但是即使其中一个被撤销,它也可以让两者都成功连接?

我在 Tomcat 中是否遗漏了一个设置,它可以在收到客户端证书时检查 CRL 分发点?我会认为这将是默认行为。

我发现了各种对设置的引用,这些设置允许您将 crl 位置嵌入到 tomcat 中的连接器中 - 这不是我想要的。该系统最终将被配置为接受来自多个不同 CA 的证书。

【问题讨论】:

    标签: tomcat ssl openssl ssl-certificate client-certificates


    【解决方案1】:

    假设您使用的是 Oracle/OpenJDK JRE,如果您在 Certification Path API guide (Appendix B) 的底部向下滚动,您会发现可以使用 com.sun.security.enableCRLDP 系统属性启用 CRLDP:

    支持 CRL 分发点扩展。它是 为了兼容性,默认禁用,可以通过设置启用 将系统属性com.sun.security.enableCRLDP 更改为值true

    您可能还对以下关于 OCSP 的部分感兴趣。

    【讨论】:

    • 嗯...我不确定我是否是(对 Java 来说还是比较新的,主要是 C# 人)。我对应用程序本身进行的唯一检查仅限于使用request.getAttribute("javax.servlet.request.X509Certificate") 提取X509Certificate,然后对主题进行各种检查。我认为所有的证书检查都是由网络服务器完成的(我习惯于 IIS)。我尝试使用:java -Dcom.sun.security.enableCRLDP=true 启用该设置,但它似乎不接受此命令。
    • 是的,客户端证书信任管理由 Tomcat 连接器完成。我假设您使用的是 JSSE 连接器,而不是 APR 连接器(否则这些将是 OpenSSL 配置选项)。 OTH,您应该可以使用 Java 选项设置 -Dcom.sun.security.enableCRLDP=true,例如 catalina.sh
    • 使用System.getProperty("com.sun.security.enableCRLDP") 将值显示为空,所以看起来我可能正在使用没有此功能的东西......
    • 属性对于这个正在运行的 JVM 实例是全局的。通常,它们只被阅读一次。您需要的是设置它,而不是获取它。此外,这应该在启动 JVM 的脚本中设置(可能是catalina.sh)。
    • 是的,我曾尝试在注册表中设置它 - 我正在检查它是否正在设置。它不应该返回 true 或 false,而不是 null 吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-09
    • 1970-01-01
    • 1970-01-01
    • 2020-06-29
    • 1970-01-01
    • 2012-08-11
    相关资源
    最近更新 更多