我需要创建一个与远程服务器的Https连接,然后检索并验证证书。
我已经很好地建立了连接:
try {
url = new URL(this.SERVER_URL);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
HttpsURLConnection secured = (HttpsURLConnection) con;
secured.connect();
}
但是似乎HttpsURLConnection
类型没有定义getServerCertificateChain()
方法。
那么如何检索服务器证书链呢?我的理解是getServerCertificateChain()
应该返回一个X509Certificate
对象数组,并且这个类有我可以用来查询证书的方法。
我需要验证一下:
我迷路了,真的很感谢大家的帮助!
发布于 2011-08-26 09:43:56
您想要的方法是getServerCertificates,而不是getServerCertificateChain
。这里有一些很好的示例代码here。
编辑
添加了一些我自己的示例代码。这对你来说是一个很好的起点。不要忘记查看HttpsURLConnection和X509Certificate的Javadoc。
import java.net.URL;
import java.security.cert.Certificate;
import java.security.cert.CertificateExpiredException;
import java.security.cert.X509Certificate;
import javax.net.ssl.HttpsURLConnection;
public class TestSecuredConnection {
/**
* @param args
*/
public static void main(String[] args) {
TestSecuredConnection tester = new TestSecuredConnection();
try {
tester.testConnectionTo("https://www.google.com");
} catch (Exception e) {
e.printStackTrace();
}
}
public TestSecuredConnection() {
super();
}
public void testConnectionTo(String aURL) throws Exception {
URL destinationURL = new URL(aURL);
HttpsURLConnection conn = (HttpsURLConnection) destinationURL
.openConnection();
conn.connect();
Certificate[] certs = conn.getServerCertificates();
for (Certificate cert : certs) {
System.out.println("Certificate is: " + cert);
if(cert instanceof X509Certificate) {
try {
( (X509Certificate) cert).checkValidity();
System.out.println("Certificate is active for current date");
} catch(CertificateExpiredException cee) {
System.out.println("Certificate is expired");
}
}
}
}
}
发布于 2013-04-17 04:24:47
通过快速搜索,我找到了使用BouncyCastle的示例。我认为它更好地回答了这个问题。http://www.nakov.com/blog/2009/12/01/x509-certificate-validation-in-java-build-and-verify-chain-and-verify-clr-with-bouncy-castle/
发布于 2018-12-02 23:42:35
Kirby和arulraj.net提到的这个示例代码已经在2011年从Apache CXF中删除,并且不支持OCSP。Apache PDFBox项目“复活”了这段代码,并添加了OCSP支持和原始代码中缺失的更多功能,例如CRL签名检查。从2.0.13版本开始,改进的源代码可以在examples子项目中的CertificateVerifier类中获得。它也是有一些小改进的available online。
代码并不声称是完美的,并且还没有检查根是否可信。在JIRA issue PDFBOX-3017中跟踪了开发情况。
https://stackoverflow.com/questions/7199129
复制相似问题