【问题标题】:Solaris JMS Client connect to Weblogic 11g t3s security problemSolaris JMS Client 连接到 Weblogic 11g t3s 安全问题
【发布时间】:2010-01-12 09:00:41
【问题描述】:

当我尝试在 Solaris Server 中连接 Weblogic t3s 协议时,它显示此错误:

java.lang.IllegalStateException: Not enough cryptography available to enable a cipher suite!
        at com.certicom.tls.interfaceimpl.TLSSystem.resetCipherSuiteSupport(Unknown Source)
        at com.certicom.tls.interfaceimpl.TLSSystem.setCertificateSupport(Unknown Source)
        at com.certicom.tls.interfaceimpl.TLSSystem.<init>(Unknown Source)
        at com.certicom.tls.interfaceimpl.TLSSystem.<init>(Unknown Source)
        at com.certicom.net.ssl.SSLContext.<init>(Unknown Source)
        at com.bea.sslplus.CerticomSSLContext.<init>(Unknown Source)
        at sun.reflect.GeneratedConstructorAccessor6.newInstance(Unknown Source)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
        at java.lang.Class.newInstance0(Class.java:355)
        at java.lang.Class.newInstance(Class.java:308)
        at weblogic.security.utils.SSLSetup.getSSLDelegateInstance(SSLSetup.java:122)
        at weblogic.security.utils.SSLContextWrapper.<init>(SSLContextWrapper.java:48)
        at weblogic.security.utils.SSLContextWrapper.getInstance(SSLContextWrapper.java:43)
        at weblogic.security.utils.SSLSetup.getSSLContext(SSLSetup.java:238)
        at weblogic.security.SSL.SSLClientInfo.getSSLSocketFactory(SSLClientInfo.java:101)
        at weblogic.socket.ChannelSSLSocketFactory.getSocketFactory(ChannelSSLSocketFactory.java:170)
        at weblogic.socket.ChannelSSLSocketFactory.createSocket(ChannelSSLSocketFactory.java:77)
        at weblogic.socket.ChannelSSLSocketFactory.createSocket(ChannelSSLSocketFactory.java:114)
        at weblogic.socket.BaseAbstractMuxableSocket.createSocket(BaseAbstractMuxableSocket.java:133)
        at weblogic.rjvm.t3.MuxableSocketT3.newSocketWithRetry(MuxableSocketT3.java:206)
        at weblogic.rjvm.t3.MuxableSocketT3.connect(MuxableSocketT3.java:375)
        at weblogic.rjvm.t3.ConnectionFactoryT3S.createConnection(ConnectionFactoryT3S.java:34)
        at weblogic.rjvm.ConnectionManager.createConnection(ConnectionManager.java:1773)
        at weblogic.rjvm.ConnectionManager.findOrCreateConnection(ConnectionManager.java:1416)
        at weblogic.rjvm.ConnectionManager.bootstrap(ConnectionManager.java:437)
        at weblogic.rjvm.ConnectionManager.bootstrap(ConnectionManager.java:315)
        at weblogic.rjvm.RJVMManager.findOrCreateRemoteInternal(RJVMManager.java:251)
        at weblogic.rjvm.RJVMManager.findOrCreate(RJVMManager.java:194)
        at weblogic.rjvm.RJVMFinder.findOrCreateRemoteServer(RJVMFinder.java:238)
        at weblogic.rjvm.RJVMFinder.findOrCreateInternal(RJVMFinder.java:200)
        at weblogic.rjvm.RJVMFinder.findOrCreate(RJVMFinder.java:170)
        at weblogic.rjvm.ServerURL.findOrCreateRJVM(ServerURL.java:153)
        at weblogic.jndi.WLInitialContextFactoryDelegate$1.run(WLInitialContextFactoryDelegate.java:344)
        at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:363)
        at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:147)
        at weblogic.jndi.WLInitialContextFactoryDelegate.getInitialContext(WLInitialContextFactoryDelegate.java:339)
        at weblogic.jndi.Environment.getContext(Environment.java:315)
        at weblogic.jndi.Environment.getContext(Environment.java:285)
        at weblogic.jndi.WLInitialContextFactory.getInitialContext(WLInitialContextFactory.java:117)
        at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:667)
        at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:288)
        at javax.naming.InitialContext.init(InitialContext.java:223)
        at javax.naming.InitialContext.<init>(InitialContext.java:197)

我已经定义了以下参数:

-Djava.protocol.handler.pkgs=weblogic.net -Dweblogic.security.SSL.ignoreHostnameVerification=true -Dweblogic.security.TrustKeyStore=CustomTrust -Dweblogic.security.CustomTrustKeyStoreType=JKS -Dweblogic.security.CustomTrustKeyStoreFileName=keystore -Dweblogic.security.CustomTrustKeyStorePassPhrase=passphrase -Dssl.debug=true -Dweblogic.StdoutDebugEnabled=true

我该如何解决?相同的源和相同的参数在 Windows 中工作。

谢谢。

【问题讨论】:

    标签: java security jms weblogic weblogic11g


    【解决方案1】:

    这个解决方案来得有点晚,但适用于遇到同样问题的其他人。

    显然,将 webserviceclient+ssl.jar 添加到类路径的公认解决方案有效,因为 WebLogic 完整客户端 - wlfullclient.jar 在其 MANIFEST.MF 文件中引用了其他 JAR。添加 web 服务客户端 JAR 解决了该问题,因为它似乎具有使用 SSL/TLS 时客户端正确操作所需的最少类集。当 wlfullclient.jar 和 wlcipher.jar 的副本在不同的目录中创建并添加到类路径时,通常会遇到此错误。然后,JVM 无法从 MANIFEST 文件中引用的 JAR 加载其他依赖类。

    实际的解决方案是将 WL_HOME\server\lib 目录中生成的 wlfullclient.jar 添加到 CLASSPATH。然后将通过适当的类加载器获取所有其他依赖的 JAR,因为清单通过相对目录路径引用这些。

    【讨论】:

      【解决方案2】:

      您是否在两台机器上使用相同的 JVM 供应商?

      很可能用于生成密钥库的 CA 在 Windows 信任库中可用,但在 Solaris 上不可用,假设密钥库是在 Windows 中生成的,并且 CA 尚未与在 Solaris 上使用的 JRE 一起提供。讨论了这些差异here

      如何configure信任库添加CA

      【讨论】:

      • 我已经建立了一个新的信任库并存储了 Weblogic CA。我也使用指向文件的绝对路径。 THX
      【解决方案3】:

      终于,我们找到了解决方案。

      只需将 webserviceclient+ssl.jar 添加到您的类路径即可解决问题。

      • webserviceclient+ssl.jar 未包含在 wlfullclient.jar 中。

      【讨论】:

      • 是的,JMS 客户端需要一个用于 Web 服务的 jar,这很明显。为什么这个jar在windows下的类路径中!?疯狂!
      • 我不知道。我仔细检查了我的 windows 环境,有 2 个环境变量: WEBLOGIC_HOME=D:\weblogic\bea10.3\wlserver_10.3 WL_HOME=D:\weblogic\bea10.3\wlserver_10.3 但我不认为这是相关的.
      【解决方案4】:

      您确定您的keystore 文件已被拾取吗?也许在指定-Dweblogic.security.CustomTrustKeyStoreFileName 选项时尝试使用绝对路径。

      另外,JMS 客户端的类路径在两种环境中真的相同吗?

      尝试在类路径上提供wlserver_10.3/server/lib/wlfullclient.jar(您通过运行命令java -jar wljarbuilder.jar 创建) wlserver_10.3/server/lib/wlcipher.jar(是的,wlfullclient.jar 不是那么完整!)。

      【讨论】:

      • 是的,wlcipher.jar 在类路径中,密钥库是绝对路径。
      【解决方案5】:

      这已针对 10.3.4 及更高版本的 Weblogic 进行了简化。

      只需将 wlthint3client.jar 从 /server/lib 目录添加到客户端的类路径

      我已确认这仅适用于 ejb 通信,但文档状态

      此版本支持以下内容:

      Oracle WebLogic's T3/T3S protocol for Remote Method Invocation (RMI), including RMI over HTTP (HTTP tunneling). For more information on WebLogic T3 communication, see "Using WebLogic RMI with T3 Protocol" in Programming RMI for Oracle WebLogic Server.
      
      Access to JMS, JMX, JNDI, and EJB resources available in WebLogic Server.
      

      http://docs.oracle.com/cd/E17904_01/web.1111/e13717/wlthint3client.htm

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-05-12
        • 2014-04-17
        • 1970-01-01
        • 1970-01-01
        • 2014-03-28
        • 1970-01-01
        • 2012-10-10
        相关资源
        最近更新 更多