2016-09-19 1 views
1

Wir verwenden HttpsUrlConnection in einem WebSphere TAI in WebSphere Liberty-Profil, um eine Verbindung mit einem Sicherheitsserver herzustellen. Ich hatte viele Probleme mit SSL-Cert-Fehlern, bis ich entdeckte, dass es im WLP-Schlüsselspeicher nach Unterzeichnerzertifikaten sucht, nicht nach dem WLP-Truststore oder dem JVM-Truststore. Es ist nichts in der Code-Einstellung dies, es muss ein Standard sein. Aber ich bin verwirrt, denn wenn wir einen HTTP-Client in anderem Code verwenden, verwendet es den Truststore der JVM.HttpsUrlConnection mit KeyStore anstelle von TrustStore mit WebSphere Liberty-Profil

Wie kann ich die HttpsUrlConnection verwenden den WLP oder JVM Truststore, und nicht den Keystore?

+0

Was ist Ihre 'server.xml'? Im '' Element können Sie 'trustStoreRef =" defaultTrustStore "' haben, das auf den konfigurierten Truststore zeigt. Wenn Sie dies auslassen, ist der Standard-Truststore der Keystore. Weitere Informationen finden Sie unter [Liberty: SSL-Konfigurationsattribute] (https://www.ibm.com/support/knowledgecenter/en/SSAW57_8.5.5/com.ibm.websphere.wlp.nd.doc/ae/rwlp_ssl.html) . – Gas

+0

Danke. Ich habe bereits SSL in meiner 'server.xml' eingerichtet. Am Ende habe ich getan, was in der ersten Antwort unten beschrieben ist. – Westy

Antwort

1

Sie können Ihren Trust Store wie folgt laden und auf SSLContext setzen, der in HttpsUrlConnection eingestellt werden kann. Da dies ein Beispiel ist, habe ich Standardwerte verwendet. Sie sollten sie durch geeignete Algorithmen, Protokolle und Truststores ersetzen.

 try (FileInputStream truststoreFile = new FileInputStream("path/to/your/truststore.jks")) { 
      TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); 
      KeyStore truststore = KeyStore.getInstance(KeyStore.getDefaultType()); 
      char[] trustorePassword = "<truststorePassword".toCharArray(); 
      truststore.load(truststoreFile, trustorePassword); 
      trustManagerFactory.init(truststore); 
      SSLContext sslContext = SSLContext.getInstance("TLSv1.2"); 
      KeyManager[] keyManagers = {};//if you have key managers; 

      sslContext.init(keyManagers, trustManagerFactory.getTrustManagers(), new SecureRandom()); 

      URL httpsUrl = new URL("<your https url>"); 
      URLConnection urlConnection = httpsUrl.openConnection(); 

     } catch (NoSuchAlgorithmException | KeyStoreException | CertificateException | IOException e) { 
      //handle exception 
     } catch (KeyManagementException e) { 
      //handle exception 
     } 
+1

Danke, das ist was ich brauchte. – Westy

+0

Beachten Sie, dass 'SSLContext.getDefault()' unveränderlich ist, daher müssen Sie '.getInstance()' verwenden: https://Stackoverflow.com/a/35506488/1599699 – Andrew

Verwandte Themen