Java SSL证书撤销检查
我目前正在使用SSL编写一个网络TCP服务器。在生产中,我们最终将要求客户端使用证书进行身份验证
为了在紧急情况下撤销证书,我们还希望建立一个CRL
我的问题是:Java是立即检查CRL(如果提供了证书),还是需要手动实现这样的检查
为了进行测试,我准备了一个带有CRL集的证书,但Java似乎没有尝试验证它(我将其放入了本地web服务器,无法访问)
我只找到了com。太阳网ssl。checkRevocation=trueVM选项,但显然它不会查询CRL。虚拟机调试设置为java。安全debug=certpath也不会生成任何输出
Java的子系统中似乎有相关的类(例如,Java.security.cert.X509CRLSelector),但显然它没有发挥作用
编辑:删除过时的Dropbox链接
# 1 楼答案
OCSP对你合适吗
下面的代码为我启用OCSP:
在CRL上失败,错误如下:How to check revocation status of X509Certificate chain using JAVA?
# 2 楼答案
首先,您可以在jcontrol(1.8版)中配置的撤销检查仅适用于applet和WebStart下载和签名者证书检查! 对于已编程的https客户端,您可以使用上面提到的PKIXRevocationChecker,但根据我的经验,Oracle实现根本不支持LDAP CDP下载。 当我遇到这个问题时,我需要使用CRL实现完整的证书链检查,并在自定义TrustManager的checkXXXX函数后面立即从LDAP下载CA证书
# 3 楼答案
请注意,禁用撤销检查是一种糟糕的安全做法。你可以做到,但一定要知道风险所在
currently accepted answerby@DoNuT通过设置
PKIXRevocationChecker.Option.SOFT_FAIL
来工作,这会导致验证器即使撤销检查失败也不会抛出异常。下面的答案完全禁用了撤销检查,因此在根本不需要验证的情况下会更快。这是因为执行撤销检查需要联系CRL分发点或OCSP服务器,如果您不想这样做,则无需支付费用只需在类型为
PKIXBuilderParameters
的对象上使用setRevocationEnabled(false)