我正在尝试在提交数据请求之前检查服务器证书的有效性。以下代码导致此错误消息:javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException:PKIX路径构建失败:sun.security ....
因为它看起来像一个trustStore问题,我做的第一件事是下载一个名为“Install Cert.java”的小型java程序,在我的信任库中下载并安装站点证书。这似乎成功了。但是,在再次运行代码(我使用NetBeans但从命令行运行InstallCert)时,引发了同样的错误。
我在这里看过其他帖子,建议只是不检查 - 使用虚拟信任库或其他东西。我认为这不适合我,因为我的规范特别要求代码检查证书有效,到期日期以及是否可信。 (我也失去了你的意见 - 这里的任何建议都会受到赞赏。)
我是Java网络编程的新手,并且花了两天的时间来反对这一点。
HELP!〜
谢谢! 马克
private void connectToNetConnect() throws SSLPeerUnverifiedException {
X509Certificate xCertificate;
HttpsURLConnection secured;
HostnameVerifier hostNameVerifier;
try {
url = new URL(this.SERVER_URL);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
secured = (HttpsURLConnection) con;
secured.connect();
// now get servercertificates and check some stuff
java.security.cert.Certificate[] certs = secured.getServerCertificates();
// prints out the certificates
System.out.println("CERTIFICATES: ");
for(java.security.cert.Certificate cert : certs) {
System.out.println("Certificate is: " + cert);
}
java.security.cert.Certificate firstCert = certs[0];
xCertificate = (X509Certificate)firstCert;
try {
xCertificate.checkValidity();
} catch(CertificateExpiredException e) {
System.out.println("Certificate Expired");
} catch(CertificateNotYetValidException e) {
System.out.println("Certificate Not Yet Valid");
} catch(Exception e) {
System.out.println("Error checking Certificate Validity. See admin.");
}
} catch(MalformedURLException e) {
System.out.println("Malformed URL");
} catch(SSLHandshakeException e) {
System.out.println("Handshake exceptionn");
e.printStackTrace();
} catch(Exception e) {
System.out.println("Plain ole exception");
}
}