我有这样的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");**
通过在应用程序侧添加少量参数解决了问题
export JAVA_OPTS ="$JAVA_OPTS -Djavax.net.ssl.trustStore=path/truststore.jks" export JAVA_OPTS ="$JAVA_OPTS -Djavax.net.ssl.trustStorePassword=changeIT"