SSLHandShakeException:在提交查询之前检查服务器证书的有效性

时间:2012-01-31 02:19:35

标签: java ssl ssl-certificate x509certificate truststore

我正在尝试在提交数据请求之前检查服务器证书的有效性。以下代码导致此错误消息: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");
        }
    }
    

0 个答案:

没有答案