2016-03-21 5 views
1

Javaを使用して、sslを使用して自分のサーバーのいずれかに接続しようとしています。私は、テスト目的のために、オプションjavax.net.ssl.SSLHandshakeExceptionを解決するには:java.security.cert.CertificateEx ception:名前が一致しません

String jwtUrl = "https://ABC.XYZ.COM:3333/api/auth"; 
String username = "ABC"; 
String password = "ABC"; 


String userCredentials = username + ":" + password; 
String basicAuth = "Basic " 
+ new String(org.apache.commons.codec.binary.Base64.encodeBase64(userCredentials.getBytes())); 

HttpHeaders headers1 = new HttpHeaders(); 
headers1.set("Authorization", basicAuth); 
HttpEntity httpEntity = new HttpEntity(headers1); 
ResponseEntity<String> responseEntity = restTemplate1.exchange(jwtUrl, HttpMethod.GET, httpEntity, 
String.class); 

System.out.println("Response Body = " + responseEntity.getBody()); 

私はこの例外を取得していますたくさんの、それは私の作品

Caused by: javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateEx 
ception: No name matching ABC.XYZ.COM found 
     at sun.security.ssl.Alerts.getSSLException(Unknown Source) 
     at sun.security.ssl.SSLSocketImpl.fatal(Unknown Source) 
     at sun.security.ssl.Handshaker.fatalSE(Unknown Source) 
     at sun.security.ssl.Handshaker.fatalSE(Unknown Source) 
     at sun.security.ssl.ClientHandshaker.serverCertificate(Unknown Source) 
     at sun.security.ssl.ClientHandshaker.processMessage(Unknown Source) 
     at sun.security.ssl.Handshaker.processLoop(Unknown Source) 
     at sun.security.ssl.Handshaker.process_record(Unknown Source) 
     at sun.security.ssl.SSLSocketImpl.readRecord(Unknown Source) 
     at sun.security.ssl.SSLSocketImpl.performInitialHandshake(Unknown Source 
) 

この方法を試してみました良い方法でこれを解決する方法

static { 
     disableSslVerification(); 
} 

private static void disableSslVerification() { 
     try { 
      // Create a trust manager that does not validate certificate chains 
      TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() { 
       @Override 
       public java.security.cert.X509Certificate[] getAcceptedIssuers() { 
        return null; 
       } 

       @Override 
       public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException { 
        // TODO Auto-generated method stub 

       } 

       @Override 
       public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException { 
        // TODO Auto-generated method stub 

       } 
      } }; 

      // Install the all-trusting trust manager 
      SSLContext sc = SSLContext.getInstance("SSL"); 
      sc.init(null, trustAllCerts, new java.security.SecureRandom()); 
      HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); 

      // Create all-trusting host name verifier 
      HostnameVerifier allHostsValid = new HostnameVerifier() { 

       @Override 
       public boolean verify(String hostname, SSLSession session) { 
        // TODO Auto-generated method stub 
        return false; 
       } 
      }; 

      // Install the all-trusting host verifier 
      HttpsURLConnection.setDefaultHostnameVerifier(allHostsValid); 
     } catch (NoSuchAlgorithmException e) { 
      e.printStackTrace(); 
     } catch (KeyManagementException e) { 
      e.printStackTrace(); 
     } 
    } 

。 ssl検証を無効にできません。他のオプションはありますか? 私は春休みテンプレート、風袋などを使用しています 私は完全に証明書のチェックを無視したくありません。

+0

証明書がトラストストアファイルにあることを確認してください。それをあなたのJavaプログラムに言います。詳細については、http://javarevisited.blogspot.com/2012/03/add-list-certficates-java-keystore.htmlを参照してください。 –

答えて

0

証明書がトラストストアファイルにあることを確認してください。 JREのトラストストアは、デフォルトではJAVA_HOME/jre/lib/securityフォルダにあり、一般に「cacerts」と呼ばれます。サーバー証明書をこのファイルにインポートし、javax.net.ssl.trustStore JVMプロパティで指定します。詳細については、javarevisited.blogspot.com/2012/03/...を参照してください。

+0

私の場合、サーバーは私の証明書を提供していません。 –

+0

これらのリンクを試してください。http:// serverfault .com/questions/139728/how-to-download-the-ssl-certificate-from-a-website http://superuser.com/questions/97201/how-to-save-a-remote-server-ssl-証明書 - ファイルとしてローカルに –

関連する問題