当我尝试在weblogic中调用https服务调用时,我收到ssl握手失败。 我已将服务器证书添加到weblogic信任库 - " cacerts"。
用于在weblogic启动脚本中添加信任库的命令:
JAVA_OPTIONS="-Dweblogic.security.SSL.trustedCAKeyStore="/weblogic92/server/lib/cacerts" ${JAVA_OPTIONS}"
导出JAVA_OPTIONS
我错过了其他任何内容 - 有什么指针可以解决这个问题吗?
使用SSLPoke.java测试了app server框内的ssl连接,并且成功了。
java -Djavax.net.ssl.trustStore=/weblogic92/server/lib/cacerts
-Djavax.net.ssl.trustStorePassword=changeit SSLPoke 192.16.2.6 8443
Weblogic服务器日志跟踪:
javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:174)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1628)
at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:230)
at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:224)
at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1027)
at com.sun.net.ssl.internal.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:120)
at com.sun.net.ssl.internal.ssl.Handshaker.processLoop(Handshaker.java:574)
at com.sun.net.ssl.internal.ssl.Handshaker.process_record(Handshaker.java:510)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:888)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1117)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.writeRecord(SSLSocketImpl.java:629)
at com.sun.net.ssl.internal.ssl.AppOutputStream.write(AppOutputStream.java:59)
at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:65)
答案 0 :(得分:1)
您还可以尝试其他一些事项:
您是否也尝试过JAVA_OPTIONS =“$ {JAVA_OPTIONS} -Dweblogic.security.SSL.trustedCAKeyStore = / weblogic92 / server / lib / cacerts”
尝试使用控制台添加证书(servers-> server_name-> keystores)
您可能还需要添加以下java选项:
-Dweblogic.security.SSL.verbose = true
-Dweblogic.security.SSL.enable.renegotiation = true
-Dsun.security.ssl.allowUnsafeRenegotiation =真
在服务器中 - > server_name-> SSL(高级)检查使用JSSE SSL。
选中使用服务器证书。
将主机名验证更改为无
答案 1 :(得分:1)
我知道这是一个非常古老的线程,但是由于在获取部署在Weblogic(12.1)上的Web应用程序以通过HTTPS与外部Web服务进行通信并通过各种解决方案最终获得它时,我面临着相同的挑战上班时,很少提供我的建议,希望对以后的工作有所帮助。
有关此主题的Oracle官方文档可访问here
How WebLogic Server Locates Trust
---------------------------------
WebLogic Server uses the following algorithm when it loads its trusted CA certificates:
1. If the keystore is specified by the -Dweblogic.security.SSL.trustedCAkeystore
command-line argument, load the trusted CA certificates from that keystore.
2. Else if the keystore is specified in the configuration file (config.xml), load
trusted CA certificates from the specified keystore. If the server is configured
with DemoTrust, trusted CA certificates will be loaded from the
WL_HOME\server\lib\DemoTrust.jks and the JDK cacerts keystores.
3. Else if the trusted CA file is specified in the configuration file (config.xml),
load trusted CA certificates from that file (this is only for compatibility
with 6.x SSL configurations).
4. Else load trusted CA certificates from WL_HOME\server\lib\cacerts keystore.
我尝试了选项1,即提供了cacert -Dweblogic.security.SSL.trustedCAkeystore 的路径,该路径已将证书导入到正在运行的JDK内的推荐信任库中,但是它不起作用。尽管我知道导入是成功的,因为它可以与Java类一起使用,而我编写的Java类是通过在Weblogic外部的同一JDK上运行它来访问同一HTTPS位置的。
随后,我尝试了选项2,即,将证书导入了位于WL_HOME \ server \ lib \ DemoTrust.jks的DemoTrust.jks中。 成功使我部署的Web应用程序可以通过HTTPS与外部Web服务进行通信
答案 2 :(得分:0)
这是报价问题。删除无意义的内部引号:
JAVA_OPTIONS="-Dweblogic.security.SSL.trustedCAKeyStore=/weblogic92/server/lib/cacerts ${JAVA_OPTIONS}"