3

当我尝试在 weblogic 中调用 https 服务调用时出现 ssl 握手失败。我已将服务器证书添加到 weblogic 信任库-“cacerts”中。

用于在 weblogic 启动脚本中添加信任库的命令:

     JAVA_OPTIONS="-Dweblogic.security.SSL.trustedCAKeyStore="/weblogic92/server/lib/cacerts" ${JAVA_OPTIONS}"

导出 JAVA_OPTIONS

我还缺少其他任何东西 - 任何解决此问题的指针?

使用 SSLPoke.java 测试了应用服务器框中的 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)
4

3 回答 3

1

您还可以尝试其他几件事:

  1. 您是否也尝试过 JAVA_OPTIONS="${JAVA_OPTIONS} -Dweblogic.security.SSL.trustedCAKeyStore=/weblogic92/server/lib/cacerts"

  2. 尝试使用控制台添加证书(servers->server_name->keystores)

  3. 您可能还需要添加以下 java 选项:

    1. -Dweblogic.security.SSL.verbose=true

    2. -Dweblogic.security.SSL.enable.renegotiation=true

    3. -Dsun.security.ssl.allowUnsafeRenegotiation=true

  4. 在 servers->server_name->SSL (advanced) 检查 Use JSSE SSL。

  5. 检查使用服务器证书。

  6. 将主机名验证更改为无

于 2013-07-08T09:58:19.560 回答
1

我知道这是一个非常古老的线程,但是由于我在让部署在 Weblogic(12.1)上的 Web 应用程序通过 HTTPS 与外部 Web 服务通信并通过各种解决方案最终让它工作时遇到了同样的挑战,提供了我工作中的一些指示,希望它对将来的某人有所帮助。

Oracle 关于此主题的官方文档可在此处获得

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 类一起工作,通过在同一个 JDK 但从 Weblogic 外部运行它来访问相同的 HTTPS 位置。

随后,我尝试了选项 2,即我在位于 WL_HOME\server\lib\DemoTrust.jks 的 DemoTrust.jks 中导入了证书。这成功地允许我部署的 Web 应用程序通过 HTTPS 与外部 Web 服务进行通信

于 2020-07-07T22:48:07.613 回答
0

这是一个引号问题。删除无意义的内引号:

JAVA_OPTIONS="-Dweblogic.security.SSL.trustedCAKeyStore=/weblogic92/server/lib/c‌​acerts ${JAVA_OPTIONS}"
于 2016-03-12T02:17:44.533 回答