【问题标题】:AXIS web service not using defined Truststore on Weblogic serverAXIS Web 服务未使用 Weblogic 服务器上定义的信任库
【发布时间】:2017-02-23 07:13:49
【问题描述】:

我正在开发基于 AXIS 的 Web 服务,其中服务提供商实施了 1 路 TLS。为了使用此服务,我使用 javax.net.ssl.keyStore 或 javax.net.ssl.trustStore 在 weblogic 启动脚本中提供了 keystore 和 truststore 属性。

当我们运行测试时,我们得到以下异常:

原因:java.security.NoSuchAlgorithmException:构造实现时出错(算法:默认,提供者:IBMJSSE2,类:com.ibm.jsse2.ec) 在 java.security.Provider$Service.newInstance(Provider.java:1271) 在 sun.security.jca.GetInstance.getInstance(GetInstance.java:249) 在 sun.security.jca.GetInstance.getInstance(GetInstance.java:177) 在 javax.net.ssl.SSLContext.getInstance(SSLContext.java:26) 在 javax.net.ssl.SSLContext.getDefault(SSLContext.java:9) 在 javax.net.ssl.SSLSocketFactory.getDefault(SSLSocketFactory.java:23) 在 org.apache.axis.components.net.JSSESocketFactory.initFactory(JSSESocketFactory.java:87) 在 org.apache.axis.components.net.JSSESocketFactory.create(JSSESocketFactory.java:105) ... 22 更多

原因:java.lang.Exception:信任库文件不存在:/home/apps/weblogic/.keystore 在 com.ibm.jsse2.rc.a(rc.java:38) 在 com.ibm.jsse2.ec.f(ec.java:19) 在 com.ibm.jsse2.ec.(ec.java:21) 在 sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 在 sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:86) 在 sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:58) 在 java.lang.reflect.Constructor.newInstance(Constructor.java:542) 在 java.security.Provider$Service.newInstance(Provider.java:1252) ... 29 更多

即使在设置了密钥库/信任库属性之后,我什至不确定它从哪里选择 /home/apps/weblogic/.keystore 位置。

当我检查 AXIS JAR 文件时,我看到在 org.apache.axis.components.net.SunJSSESocketFactory 类中,我们有以下信任库的默认属性:

静态布尔 defaultClientAuth = false; 私人布尔客户端身份验证=假; 静态字符串 defaultKeystoreFile = System.getProperty("user.home") + "/.keystore"; 静态字符串 defaultKeyPass = "changeit";

谁能解释为什么 AXIS API 使用此默认密钥库而不是命令行参数中提供的密钥库。

【问题讨论】:

    标签: java ssl weblogic axis keystore


    【解决方案1】:

    我找到了这个问题的根本原因,而根本不是 AXIS。 问题出在用于 f5 Big-IP 通信的 iControl.Interface 类中。在此类的构造函数中,信任存储系统属性已被以下行覆盖: System.setProperty("javax.net.ssl.trustStore", System.getProperty("user.home") + "/.keystore");

    这不会在 weblogic 启动脚本中设置的位置查找信任库,而是在 user.home 中查找 .keystore 文件。

    我们可以修改 iControl JAR 以删除此硬编码值或将其升级到 11.5 版本。

    其他解决方法是在调用 iControl.Interfaces 类的构造函数后再次设置 truststore 属性。

    您还可以在调用 iControl.Interfaces 构造函数之前初始化默认 SSL 上下文,该构造函数将使用 weblogic 启动脚本中提到的属性加载 SSL 上下文。

    【讨论】:

      猜你喜欢
      • 2016-10-26
      • 1970-01-01
      • 2019-05-12
      • 2012-02-13
      • 1970-01-01
      • 2013-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多