如何获取服务器证书链,然后验证它';它在Java中有效且可信
我需要创建一个与远程服务器的Https连接,然后检索并验证证书 我已经建立了连接:如何获取服务器证书链,然后验证它';它在Java中有效且可信,java,x509certificate,Java,X509certificate,我需要创建一个与远程服务器的Https连接,然后检索并验证证书 我已经建立了连接: try { url = new URL(this.SERVER_URL); HttpURLConnection con = (HttpURLConnection) url.openConnection(); HttpsURLConnection secured = (HttpsURLConnection) con; secured.connect(); }
try {
url = new URL(this.SERVER_URL);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
HttpsURLConnection secured = (HttpsURLConnection) con;
secured.connect();
}
但是类型HttpsURLConnection
似乎未定义getServerCertificateChain()
方法
那么如何检索服务器证书链呢?我的理解是getServerCertificateChain()
应该返回一个X509Certificate
对象数组,并且这个类有我可以用来查询证书的方法
我需要核实:
getServerCertificateChain
。这里有一些很好的示例代码
编辑 添加了一些我自己的示例代码。对你来说,这是一个很好的起点。不要忘了查看Javadocs中的和
快速的谷歌搜索让我看到了这个使用BouncyCastle的例子。我认为这更好地回答了这个问题。
Kirby和arulraj.net提到的这个示例代码已于2011年从Apache CXF中删除,不支持OCSP。该项目“复活”了该代码,并添加了OCSP支持以及原始代码中缺少的更多功能,例如CRL签名检查。自2.0.13版以来,在CertificateVerifier类的示例子项目中提供了改进的源代码。它也有一些小的改进
该代码并不声称是完美的,也没有检查根目录是否可信。《JIRA》一期追踪了开发情况。谢谢——我正在按照一本大公司手册中的规范编写代码,我开始怀疑编写本节的人犯了错误。我是一个java网络新手,所以我花了几个小时试图弄清楚GetServerCertificateCain和getServerCertificates之间到底有什么区别。根据我上面列出的四个要求,我该如何查询证书?您必须将证书转换为X509Certificates和X509Certificates使用该类上的方法。如何检索证书中的url?如何检查它是否有效、可信且未过期?我是一名网络新手,我发现网络上的大多数资源只会让我更加困惑。警告:上面的代码没有完全验证链,它只检查证书是否在其有效期内。你确定Java的https客户端代码没有为你做所有这四件事吗?你得到解决方案了吗?证书是否可信?该代码的任何解决方案在该博客中的格式都不正确。。这是源代码
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");
}
}
}
}
}