具有自定义 SSLSocketFactory 的 T3 客户端

T3 client with custom SSLSocketFactory

我的 T3 客户端代码如下:

private InitialContext initContext() {
    Properties p = new Properties();
    p.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
    p.put(Context.PROVIDER_URL, context.providerURL);

    for (Map.Entry<String, String> entry : getEnvironmentProperties().entrySet()) {
        p.put(entry.getKey(), entry.getValue());
    }

    InitialContext res = null;
    try {
        res = new InitialContext(p);
    } catch (NamingException e) {
        e.printStackTrace();
    }

    return res;
}

我的 t3 客户端部署在 Tomcat(使用 wlthint3client-12.1.3.jar)并尝试查找部署在 Weblogic 上的外部系统的远程 bean。

然而,当我尝试执行新的 InitialContext(p) 时,我收到 SSLHandshake 异常,因为它使用标准 SSLConext 和标准 java 信任库获取标准 SSLSocketFactory。

我的问题 - 有什么方法可以给 InitialContext 一些 属性 来覆盖 SSLSocketFacory。我的目标是将我的自定义信任库填充到这个 t3 客户端。

像这样更改标准信任库

System.setProperty("javax.net.ssl.trustStore", "pathToTrustStore"); 

工作正常,但是如果我的 t3 客户端用于与 2 个不同的外部系统通信,这样做可能会出现问题。

有一些 属性 我可以填充吗?

Properties p = new Properties();
p.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
**p.put("CUSTOM SSL SOCKET FACTORY, "MY CLASS");**

通过在应用程序端添加几个参数解决了问题

export JAVA_OPTS ="$JAVA_OPTS -Djavax.net.ssl.trustStore=path/truststore.jks"
export JAVA_OPTS ="$JAVA_OPTS -Djavax.net.ssl.trustStorePassword=changeIT"