Pergunta

Quando tento conectar o protocolo WebLogic T3S no Solaris Server, ele mostra este erro:

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)

Eu defini os seguintes parâmetros:

-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

Como posso consertar isso? A mesma fonte e os mesmos parâmetros estão funcionando no Windows.

Obrigada.

Foi útil?

Solução

Essa solução chega um pouco tarde do dia, mas é destinada a outras pessoas com o mesmo problema.

Aparentemente, a solução aceita de adicionar WebServiceClient+SSL.jar às obras de classe de classe, uma vez que o cliente completo WebLogic - wlfullclient.jar tem referências a outros frascos em seu arquivo manifest.mf. A adição do frasco do cliente WebServices resolve o problema, pois ele parece ter o conjunto mínimo de classes necessárias para a operação correta do cliente ao usar o SSL/TLS. O erro geralmente é encontrado quando as cópias do wlfullclient.jar e wlcipher.jar são feitas em um diretório diferente e adicionadas ao caminho de classe. A JVM falha em carregar outras classes dependentes de frascos que são referenciados no arquivo de manifesto.

A solução real seria adicionar o wlfullclient.jar que é gerado no Wl_homeservidor Lib Directory, para o caminho de classe. Todos os outros frascos dependentes seriam então retirados através do carregador de classe apropriado, uma vez que o manifesto faz referências por meio de caminhos relativos de diretório.

Outras dicas

Você está usando o mesmo fornecedor de JVM em ambas as máquinas?

Provavelmente, a CA usada para gerar a keystore está disponível no Windows Truststore, mas não está disponível no Solaris, A suposição de Keystore foi gerada no Windows e a CA ainda não foi enviada com o JRE sendo usado em Solaris. As diferenças são discutidas aqui.

Como configure o TrustStore para adicionar um CA

Finalmente, conseguimos a solução.

Basta adicionar WebServiceClient+SSL.jar ao seu caminho de classe resolverá o problema.

  • WebServiceClient+SSL.Jar não incluído em wlfullclient.jar.

Tem certeza que você keystore O arquivo é escolhido? Talvez tente usar um caminho absoluto ao especificar o -Dweblogic.security.CustomTrustKeyStoreFileName opção.

Além disso, o caminho de classe do cliente JMS é realmente idêntico em ambos os ambientes?

Tente fornecer wlserver_10.3/server/lib/wlfullclient.jar (que você cria executando o comando java -jar wljarbuilder.jar) e wlserver_10.3/server/lib/wlcipher.jar (sim, wlfullclient.jar não está cheio!) No caminho da classe.

Isso foi simplificado para 10.3.4 e acima do WebLogic.

Basta adicionar o wlthint3client.jar do diretório /servidor /lib no caminho de classe do seu cliente

Eu só confirmei que isso funciona para a comunicação EJB, mas o estado dos documentos

Esta versão suporta o seguinte:

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top