Solaris JMS client connettersi a Weblogic 11g T3 problema di sicurezza
-
20-09-2019 - |
Domanda
Quando si tenta di connettersi protocollo T3S Weblogic Server di Solaris, mostra questo errore:
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)
Ho definire i seguenti parametri:
-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
Come posso risolvere il problema? Stesso stessi parametri sorgente e sta lavorando in Windows.
Grazie.
Soluzione
Questa soluzione arriva un po 'tardi nel corso della giornata, ma è pensato per gli altri che hanno lo stesso problema.
A quanto pare, la soluzione accettata di aggiungere webserviceclient + ssl.jar alle opere classpath, dal momento che il WebLogic client completo - wlfullclient.jar ha riferimenti ad altri JAR nel suo file MANIFEST.MF. L'aggiunta del JAR webservices client risolve il problema, dal momento che sembra avere il set minimo di classi richieste per il corretto funzionamento del client quando si utilizza SSL / TLS. L'errore è di solito riscontrato quando le copie del wlfullclient.jar e wlcipher.jar sono realizzati in una directory diversa, e ha aggiunto al classpath. La JVM poi non riesce a caricare altre classi dipendenti dalla JAR cui si fa riferimento all'interno del file manifesto.
La soluzione reale sarebbe quello di aggiungere il wlfullclient.jar che si genera nel WL_HOME \ server \ lib, al CLASSPATH. Tutti gli altri JAR dipendenti sarebbero poi essere ritirato tramite il programma di caricamento classe del caso, dal momento che i riferimenti manifeste queste attraverso percorsi di directory relative.
Altri suggerimenti
Si sta utilizzando lo stesso fornitore JVM su entrambe le macchine?
Molto probabilmente il CA utilizzato per generare l'archivio chiavi è disponibile sul truststore Windows, ma non è disponibile su Solaris, l'ipotesi di essere il keystore è stato generato in Windows e la CA non è ancora fornito con il JRE utilizzato su Solaris . Le differenze sono discussi qui .
Come configurare truststore per aggiungere una CA
Infine, abbiamo ottenuto la soluzione.
Basta aggiungere webserviceclient + ssl.jar al classpath risolverà il problema.
- webserviceclient + ssl.jar non incluso nel wlfullclient.jar.
Sei sicuro che si keystore
file viene prelevato? Forse provare a utilizzare un percorso assoluto quando si specifica l'opzione -Dweblogic.security.CustomTrustKeyStoreFileName
.
Inoltre, sono il percorso di classe del client JMS davvero identici in entrambi gli ambienti?
Prova a fornire wlserver_10.3/server/lib/wlfullclient.jar
(che si crea eseguendo il comando java -jar wljarbuilder.jar
) e wlserver_10.3/server/lib/wlcipher.jar
(sì, wlfullclient.jar
non è che la piena!) Nel classpath.
Questa è stata semplificata per la 10.3.4 e superiori Weblogic.
È sufficiente aggiungere il wlthint3client.jar dalla directory / server / lib al classpath del vostro cliente
Ho confermato solo questo funziona per la comunicazione EJB ma lo stato docs
Questa versione supporta il seguente:
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