Java HttpsUrlConnection使用密钥库而不是具有WebSphere Liberty概要文件的信任库

Java HttpsUrlConnection使用密钥库而不是具有WebSphere Liberty概要文件的信任库,java,ssl,websphere-liberty,Java,Ssl,Websphere Liberty,我们正在WebSphere Liberty概要文件中的WebSphere TAI中使用HttpsUrlConnection连接到安全服务器。我在SSL证书错误方面遇到了很多问题,直到我发现它在WLP密钥库中查找签名者证书,而不是WLP信任库或JVM信任库。代码中没有设置此值,它必须是默认值。但我感到困惑,因为当我们在其他代码中使用HTTP客户机时,它使用JVM的信任库 如何使HttpsUrlConnection使用WLP或JVM信任库而不是密钥库?您可以按如下方式加载信任库,并将其设置为SSLC

我们正在WebSphere Liberty概要文件中的WebSphere TAI中使用HttpsUrlConnection连接到安全服务器。我在SSL证书错误方面遇到了很多问题,直到我发现它在WLP密钥库中查找签名者证书,而不是WLP信任库或JVM信任库。代码中没有设置此值,它必须是默认值。但我感到困惑,因为当我们在其他代码中使用HTTP客户机时,它使用JVM的信任库


如何使HttpsUrlConnection使用WLP或JVM信任库而不是密钥库?

您可以按如下方式加载信任库,并将其设置为SSLContext,然后将其设置为HttpsUrlConnection。因为这是我使用默认值的一个示例,所以应该用适当的算法、协议和信任库类型替换它们

        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
        }
try(FileInputStream truststoreFile=newfileinputstream(“path/to/your/truststore.jks”)){
TrustManagerFactory TrustManagerFactory=TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
KeyStore truststore=KeyStore.getInstance(KeyStore.getDefaultType());

char[]trustorePassword=“什么是您的
server.xml
?在
元素中,您可以拥有
trustStoreRef=“defaultTrustStore“
它将指向已配置的信任库。如果忽略此项,默认的信任库就是密钥库。有关详细信息,请参阅。谢谢。我已经在我的'server.xml'中设置了SSL。我完成了下面第一个答案中描述的操作。谢谢,这就是我需要的。请注意,
SSLContext.getDefault()
是不可变的,因此必须使用
.getInstance()