2010-01-12 94 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

相關問題