x509certificate如何获取服务器证书链,然后在Java中验证其有效性和受信任性
我需要创建一个与远程服务器的Https连接,然后检索并验证证书
我已经建立了连接:
try {
url = new URL(this.SERVER_URL);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
HttpsURLConnection secured = (HttpsURLConnection) con;
secured.connect();
}
但是getServerCertificateChain()
方法似乎没有被类型HttpsURLConnection
定义
那么如何检索服务器证书链呢?我的理解是getServerCertificateChain()
应该返回一个X509Certificate
对象数组,这个类有我可以用来查询证书的方法
我需要核实:
- 证书有效且受信任
- 根据证书序列号检查证书吊销列表分发点
- 确保它没有过期,并且
- 检查证书中的URL是否与另一个(我已经检索到)匹配李>
我迷路了,非常感谢您的帮助
# 1 楼答案
您想要的方法是getServerCertificates,而不是
getServerCertificateChain
。有一些很好的示例代码here编辑
添加了一些我自己的示例代码。对你来说,这是一个很好的起点。别忘了查看HttpsURLConnection和X509Certificate的Javadocs
# 2 楼答案
这是Kirby和arulraj提到的示例代码。net已于2011年从Apache CXF中删除,不支持OCSP。{a1}项目“复活”了这段代码,并添加了OCSP支持和原始代码中缺少的更多功能,例如CRL签名检查。自2.0.13版以来,在CertificateVerifier类的示例子项目中提供了改进的源代码。它也是available online,有一些小的改进
该代码并不声称是完美的,也没有检查根目录是否可信。JIRA第PDFBOX-3017期跟踪了发展情况
# 3 楼答案
快速的谷歌搜索让我看到了这个使用BouncyCastle的例子。我认为这更好地回答了这个问题。 http://www.nakov.com/blog/2009/12/01/x509-certificate-validation-in-java-build-and-verify-chain-and-verify-clr-with-bouncy-castle/