一尘不染

具有自定义SSLSocketFactory的T3客户端

tomcat

我有这样的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客户端填充我的cutum信任库。

像这样改变标准的信托商店

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");**

阅读 312

收藏
2020-06-16

共1个答案

一尘不染

通过在应用程序侧添加少量参数解决了问题

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