2

当我尝试在 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 中工作。

谢谢你。

4

5 回答 5

2

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

显然,将 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,因为清单通过相对目录路径引用这些。

于 2010-04-06T21:27:09.663 回答
1

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

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

如何配置信任库以添加 CA

于 2010-01-12T12:02:25.280 回答
1

最后,我们得到了解决方案。

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

  • webserviceclient+ssl.jar 未包含在 wlfullclient.jar 中。
于 2010-01-14T03:30:17.173 回答
0

你确定你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不是那么完整!)。

于 2010-01-12T13:32:28.853 回答
0

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

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

我只确认这适用于 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

于 2013-07-12T18:27:14.790 回答