HttpGet with HTTPS : SSLPeerUnverifiedException

前端 未结 6 1682
旧时难觅i
旧时难觅i 2020-11-27 13:29

Using HttpClient, I receive the following error when attempting to communicate over HTTPS:

Exception in thread \"main\" javax.net.ssl.SSLPeerUnverifie

6条回答
  •  感动是毒
    2020-11-27 13:58

    Method returning a "secureClient" (in a Java 7 environnement - NetBeans IDE and GlassFish Server: port https by default 3920 ), hope this could help :

    public DefaultHttpClient secureClient() {
        DefaultHttpClient httpclient = new DefaultHttpClient();
        SSLSocketFactory sf;
    
        KeyStore trustStore;
        FileInputStream trustStream = null;
        File truststoreFile;
        // java.security.cert.PKIXParameters for the trustStore
        PKIXParameters pkixParamsTrust;
    
        KeyStore keyStore;
        FileInputStream keyStream = null;
        File keystoreFile;
        // java.security.cert.PKIXParameters for the keyStore
        PKIXParameters pkixParamsKey;
    
        try {
            trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
            truststoreFile = new File(TRUSTSTORE_FILE);
            keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
            keystoreFile = new File(KEYSTORE_FILE);
            try {
                trustStream = new FileInputStream(truststoreFile);
                keyStream = new FileInputStream(keystoreFile);
            } catch (FileNotFoundException ex) {
                Logger.getLogger(ApacheHttpRestClient.class.getName()).log(Level.SEVERE, null, ex);
            }
            try {
                trustStore.load(trustStream, PASSWORD.toCharArray());
                keyStore.load(keyStream, PASSWORD.toCharArray());
            } catch (IOException ex) {
                Logger.getLogger(ApacheHttpRestClient.class.getName()).log(Level.SEVERE, null, ex);
            } catch (CertificateException ex) {
                Logger.getLogger(ApacheHttpRestClient.class.getName()).log(Level.SEVERE, null, ex);
            }
            try {
                pkixParamsTrust = new PKIXParameters(trustStore);
                // accepts Server certificate generated with keytool and (auto) signed by SUN
                pkixParamsTrust.setPolicyQualifiersRejected(false);
            } catch (InvalidAlgorithmParameterException ex) {
                Logger.getLogger(ApacheHttpRestClient.class.getName()).log(Level.SEVERE, null, ex);
            }
            try {
                pkixParamsKey = new PKIXParameters(keyStore);
                // accepts Client certificate generated with keytool and (auto) signed by SUN
                pkixParamsKey.setPolicyQualifiersRejected(false);
            } catch (InvalidAlgorithmParameterException ex) {
                Logger.getLogger(ApacheHttpRestClient.class.getName()).log(Level.SEVERE, null, ex);
            }
            try {
                sf = new SSLSocketFactory(trustStore);
                ClientConnectionManager manager = httpclient.getConnectionManager();
                manager.getSchemeRegistry().register(new Scheme("https", 3920, sf));
            } catch (KeyManagementException ex) {
                Logger.getLogger(ApacheHttpRestClient.class.getName()).log(Level.SEVERE, null, ex);
            } catch (UnrecoverableKeyException ex) {
                Logger.getLogger(ApacheHttpRestClient.class.getName()).log(Level.SEVERE, null, ex);
            }
    
        } catch (NoSuchAlgorithmException ex) {
            Logger.getLogger(ApacheHttpRestClient.class.getName()).log(Level.SEVERE, null, ex);
        } catch (KeyStoreException ex) {
            Logger.getLogger(ApacheHttpRestClient.class.getName()).log(Level.SEVERE, null, ex);
        }
        // use the httpclient for any httpRequest
        return httpclient;
    }
    

提交回复
热议问题