具有自定义SSLSocketFactory的T3客户端

时间:2018-09-17 13:45:23

标签: java tomcat ssl ejb weblogic

我有这样的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");**

1 个答案:

答案 0 :(得分:0)

通过在应用程序端添加一些参数来解决问题

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