2010-01-12 122 views
2

当我尝试连接Weblogic的T3S协议的Solaris服务器,它显示了这个错误:的Solaris JMS客户端连接到WebLogic11克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中使用相同的源和相同的参数。

谢谢。

回答

2

这个解决方案来的时间有点晚,但意味着其他人有同样的问题。

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

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

1

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

最有可能用来生成密钥库中的CA可在Windows信任而不是可以在Solaris,被在Windows中产生的假设密钥库和CA尚未随JRE在Solaris使用。差异讨论here

如何configure信任库添加CA

+0

我已经构建了一个新的信任存储并存储了Weblogic CA.另外我使用指向文件的绝对路径。 THX – chris13work 2010-01-12 16:29:32

0

你确定你keystore文件回升?在指定-Dweblogic.security.CustomTrustKeyStoreFileName选项时,可能尝试使用绝对路径。

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

尽量提供wlserver_10.3/server/lib/wlfullclient.jarwlserver_10.3/server/lib/wlcipher.jar(您通过运行该命令java -jar wljarbuilder.jar创建)(是的,wlfullclient.jar是不是满了!)在类路径上。

+0

ya,wlcipher.jar位于类路径中,密钥存储区是绝对路径。 – chris13work 2010-01-12 16:25:24

1

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

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

  • WebServiceClient此类+ ssl.jar不包括在wlfullclient.jar。
+0

是的,JMS客户端需要一个用于web服务的jar,这非常明显。为什么地狱是在Windows下的类路径中的这个罐子!?疯狂! – 2010-01-14 04:01:20

+0

我不知道。我仔细检查我的Windows环境中,有2个环境变量: WEBLOGIC_HOME = d:\ weblogic的\ bea10.3 \ wlserver_10.3 WL_HOME = d:\ weblogic的\ bea10.3 \ wlserver_10.3 但我不我认为这是相关的。 – chris13work 2010-01-14 08:42:52

0

这已被简化为10.3.4及以上的Weblogic。

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

我只是证实了这一点适用于EJB的通信,但是文档状态

This release supports the following:

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