Tomcat中的OpenSSL CRL检查拒绝所有连接

时间:2014-09-08 19:18:04

标签: tomcat openssl x509certificate

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

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

有什么理由?

修改

我打开了仅用于SSL的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

1 个答案:

答案 0 :(得分:0)

检查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

现在将crl.pem文件部署到Tomcat服务器中,然后重新启动服务器。

背景

我会在此问题上添加此评论,但由于问题已超过一年,因此OP不太可能仍然遇到问题。

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

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