Solaris JMSクライアントはウェブロジック11G T3Sセキュリティ問題に接続します
-
20-09-2019 - |
質問
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で動作しています。
ありがとうございました。
解決
このソリューションは一日の少し遅れていますが、同じ問題を抱えている他の人を対象としています。
どうやら、weblogicフルクライアント-wlfullclient.jarはそのmanifest.mfファイルの他のjarへの参照を持っているため、webserviceclient+ssl.jarをクラスパスに追加するという受け入れられたソリューションが機能します。 WebSvicesクライアントJARを追加すると、SSL/TLSを使用するときにクライアントの正しい操作に必要なクラスの最小セットがあると思われるため、問題が解決します。通常、wlfullclient.jarとwlcipher.jarのコピーが別のディレクトリで作成され、classPathに追加された場合にエラーが発生します。 JVMは、マニフェストファイル内から参照されるJARSから他の従属クラスをロードできません。
実際の解決策は、で生成されるwlfullclient.jarを追加することです wl_homeserver libディレクトリ、ClassPathへ。マニフェストは相対ディレクトリパスを介してこれらを参照するため、他のすべての従属ジャーは適切なクラスローダーを介してピックアップされます。
他のヒント
最後に、解決策を手に入れました。
ClassPathにWebSviceClient+SSL.jarを追加するだけで問題が解決します。
- WebServiceClient+ssl.jarはwlfullclient.jarに含まれていません。
確かにあなたはそうですか 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
ClassPathで。
これは、10.3.4以降のWeblogic以上で簡素化されています。
/server /libディレクトリからwlthint3client.jarをクライアントの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