【问题标题】:OpenSSL CRL check in Tomcat rejects all connectionsTomcat 中的 OpenSSL CRL 检查拒绝所有连接
【发布时间】:2014-09-08 19:18:03
【问题描述】:

我正在尝试通过添加到 server.xml 文件中的 TLS 连接器的 crlFile 属性在 Tomcat 中添加对已撤销证书的检查。

不幸的是,这使得 Tomcat 拒绝所有 TLS 连接请求,即使它们的证书有效。

有什么原因吗?

编辑

我为 SSL-only 打开了 java 调试标志,我从日志中得到了这个异常

16:50:14,348 INFO  [STDOUT] %% Invalidated:  [Session-1, TLS_DHE_RSA_WITH_AES_256_CBC_SHA]
16:50:14,349 INFO  [STDOUT] http-127.0.0.1-8444-1
16:50:14,350 INFO  [STDOUT] , SEND TLSv1.1 ALERT:  
16:50:14,350 INFO  [STDOUT] fatal, 
16:50:14,351 INFO  [STDOUT] description = certificate_unknown
16:50:14,351 INFO  [STDOUT] http-127.0.0.1-8444-1, WRITE: TLSv1.1 Alert, length = 2
16:50:14,351 INFO  [STDOUT] http-127.0.0.1-8444-1, called closeSocket()
16:50:14,352 INFO  [STDOUT] http-127.0.0.1-8444-1, handling exception: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path validation failed: java.security.cert.CertPathValidatorException: Could not determine revocation status

【问题讨论】:

    标签: tomcat openssl x509certificate


    【解决方案1】:

    检查 CRL 文件的过期时间戳

    $ date -Is
    2016-01-11T17:33:23+0100
    $ openssl crl -text -noout -in crl.pem
    Certificate Revocation List (CRL):
            Version 1 (0x0)
        Signature Algorithm: sha256WithRSAEncryption
            Issuer: <WHATEVER>
            Last Update: Dec 11 17:47:52 2015 GMT
            Next Update: Jan 10 17:47:52 2016 GMT
    Revoked Certificates:
        Serial Number: 03
            Revocation Date: Dec 11 17:31:41 2015 GMT
        Serial Number: 04
            Revocation Date: Dec 11 17:47:52 2015 GMT
        Signature Algorithm: sha256WithRSAEncryption
             <CHECKSUM OMITTED>
    

    如果Next Update 时间已经过去,那么这很可能是问题的原因。将这个过期时间推迟到未来应该可以解决它。

    不幸的是,OpenSSL 似乎没有提供任何简单的方法来更改到期日期。但是 re-revoking an already revoked certificate 使用来自 OpenVPN 的 easy-rsa 脚本具有预期的效果。如果您已经在使用 easy-rsa 开始,这会更容易,但即使您没有使用它也可能是可能的。

    $ cd easy-rsa
    $ source ./vars
    $ ./revoke-full revokeme
    Using configuration from /foo/easy-rsa/openssl-1.0.0.cnf
    ERROR:Already revoked, serial number 03
    Using configuration from /foo/easy-rsa/openssl-1.0.0.cnf
    revokeme.crt: <DISTINGUISHED NAME HERE>
    error 23 at 0 depth lookup:certificate revoked
    

    现在在Tomcat服务器中部署crl.pem文件并重启服务器。


    背景

    我会将此添加为对该问题的评论,但由于该问题已存在一年多,因此 OP 不太可能仍然遇到该问题。

    我在 Web 应用程序项目中使用客户端证书进行身份验证,上周五一切正常。今天星期一,所有客户端证书显然无效,尽管没有更改配置,也没有证书过期。

    从 Tomcat server.xml 中的 &lt;Connector&gt; 元素中删除 crlFile 属性再次使客户端证书通过握手,但当然这也使撤销的证书再次“有效”,因为不再检查撤销。上面的过程解决了我的问题。

    【讨论】:

      猜你喜欢
      • 2013-05-13
      • 1970-01-01
      • 2015-02-03
      • 2014-10-13
      • 1970-01-01
      • 2016-12-04
      相关资源
      最近更新 更多