我已经在这个问题上挣扎了好几天了。我在Windows上使用WebLogic 11g(10.3.4.0)(Linux的行为相同)。我已根据http://emo.sourceforge.net/cert-login-howto.html和http://middlewareforum.com/weblogic/?p=312的详细信息设置了双向SSL身份验证。我使用JMeter作为具有以下JVM参数的客户端。独立Java客户端的行为相同。
-Djavax.net.ssl.keyStoreType = pkcs12 -Djavax.net.ssl.trustStoreType = jks -Djavax.net.ssl.keyStore = c:/Users/sli/keys/browser.p12 -Djavax.net.debug = ssl -Djavax.net.ssl.keyStorePassword = PASSWORD-Djavax.net.ssl.trustStorePassword = changeit -Dweblogic.security.SSL.ignoreHostnameVerification = true
它适用于t3瘦客户端(wlthint3client.jar),但是当我切换到完整客户端(wlfullclient.jar)时它不起作用。其中一个应用程序以某种方式坚持完整客户端这本身就是一个不同的问题。 BTW,完整客户端不满,因为它需要webserviceclient + ssl.jar和SSL的cryptoj.jar。它在客户处抱怨。
javax.naming.CommunicationException [root exception is java.net.ConnectException:t3s:// localhost:7503:Destination unreachable;嵌套异常是: com.bea.sslplus.TwoWaySSLHandshakeStageSocketException:双向握手时的SocketException;检查客户端证书或网络连接;没有可用的路由器到目的地]
这是服务器端日志。
< 39146459没有填充的SSL版本2> < 39149058 SSL3 / TLS MAC> < 39149058收到SSL_20_RECORD> < 39149058 SSL3 / TLS MAC> < 39149058收到HANDSHAKE> (未知来源) at com.certicom.tls.record.handshake.HandshakeHandler.fireAlert(Unknown Source) at com.certicom.tls.record.handshake.ServerStateSentHelloDone.handle(Unknown Source) 在com.certicom.tls.record.handshake.HandshakeHandler.handleHandshakeMessage(未知来源) 在com.certicom.tls.record.handshake.HandshakeHandler.handleHandshakeMessages(未知来源) at com.certicom.tls.record.MessageInterpreter.interpretContent(Unknown Source) at com.certicom.tls.record.MessageInterpreter.decryptMessage(Unknown Source) 在com.certicom.tls.record.ReadHandler.processRecord(未知来源) 在com.certicom.tls.record.ReadHandler.readRecord(未知来源) 在com.certicom.tls.record.ReadHandler.readUntilHandshakeComplete(未知来源) at com.certicom.tls.interfaceimpl.TLSConnectionImpl.completeHandshake(Unknown Source) 在javax.net.ssl.impl.SSLSocketImpl.startHandshake(未知来源) at weblogic.server.channels.DynamicSSLListenThread $ 1.run(DynamicSSLListenThread.java:130) 在weblogic.work.ExecuteThread.execute(ExecuteThread.java:207) 在weblogic.work.ExecuteThread.run(ExecuteThread.java:176) > < 37447543没有填充的SSL版本2> < 37447552 SSL3 / TLS MAC> < 37447552收到SSL_20_RECORD> < 37447552 SSL3 / TLS MAC> < 37447552收到HANDSHAKE> (未知来源) at com.certicom.tls.record.handshake.HandshakeHandler.fireAlert(Unknown Source) at com.certicom.tls.record.handshake.ServerStateSentHelloDone.handle(Unknown Source) 在com.certicom.tls.record.handshake.HandshakeHandler.handleHandshakeMessage(未知来源) 在com.certicom.tls.record.handshake.HandshakeHandler.handleHandshakeMessages(未知来源) at com.certicom.tls.record.MessageInterpreter.interpretContent(Unknown Source) at com.certicom.tls.record.MessageInterpreter.decryptMessage(Unknown Source) 在com.certicom.tls.record.ReadHandler.processRecord(未知来源) 在com.certicom.tls.record.ReadHandler.readRecord(未知来源) 在com.certicom.tls.record.ReadHandler.readUntilHandshakeComplete(未知来源) at com.certicom.tls.interfaceimpl.TLSConnectionImpl.completeHandshake(Unknown Source) 在javax.net.ssl.impl.SSLSocketImpl.startHandshake(未知来源) at weblogic.server.channels.DynamicSSLListenThread $ 1.run(DynamicSSLListenThread.java:130) 在weblogic.work.ExecuteThread.execute(ExecuteThread.java:207) 在weblogic.work.ExecuteThread.run(ExecuteThread.java:176) >
我做了一些研究,发现这个(http://stackoverflow.com/questions/2047732/solaris-jms-client-connect-to-weblogic-11g-t3s-security-problem)有人让它工作了使用t3s上的完整客户端进行双向SSL身份验证,但该链接未提供方式。我也尝试使用那里提到的WebLogic安全选项,它仍然不适用于我。
谢谢你的任何帮助。
答案 0 :(得分:0)
在为wlfullclient
设置SSL时,您必须使用这些属性:
-Dweblogic.security.TrustKeyStore=CustomTrust -Dweblogic.security.CustomTrustKeyStoreFileName=....
搜索weblogic.security.TrustKeyStore
以查找所有相关设置。