SSLHandShakeException: проверьте действительность сертификата сервера до отправки запроса - PullRequest
0 голосов
/ 31 января 2012

Я пытаюсь проверить действительность сертификата сервера перед отправкой запроса данных. Следующий код привел к появлению этого сообщения об ошибке: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: сбой построения пути PKIX: sun.security ....

, так как мне показалось, что это проблема с trustStore, первым делом я скачал небольшую java-программу под названием «Install Cert.java», чтобы загрузить и установить сертификат сайтов в моем хранилище доверенных сертификатов. Это оказалось успешным. Однако при повторном запуске кода (я использую NetBeans, но запускаю InstallCert из командной строки), выдается та же ошибка.

Я видел другие посты здесь, где совет просто не проверять - использовать фиктивное хранилище доверенных сертификатов или что-то в этом роде. Я не думаю, что это будет уместно для меня, потому что моя спецификация специально требует проверки сертификата проверки кода, даты истечения срока действия, и является ли он доверенным. (Я тоже заблудился - любой совет здесь был бы очень признателен.)

Я новичок в сетевом программировании на Java и провел два дня, стуча головой об этом.

HELP! ~

Спасибо! Marc

 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");
        }
    }
    
...