从Weblogic发送服务请求时,证书validation错误

我正在尝试拨打salesforce.com的服务电话。 我已经将证书链添加到我的密钥库,但是当服务validation域证书时,它将被挂在CN的子域部分的通配符上,但这是我直接从该站点获取的证书。 我发现WebLogic不支持证书CN中的通配符。 是否有可能修改CN而不使证书无效。

从WebLogic OSB中testing服务时发生的错误是:

调用导致错误:[安全性:090504]证书链从sensis-proxy-vs.sensis.com.au – 161.117.32.128 – > cs5.salesforce.com收到失败的主机名validation检查。 证书包含* .salesforce.com,但检查预期的cs5.salesforce.com。

这里的问题是,WebLogic的默认主机名validation器不支持CN包含主机名的通配符的SSL证书。

可以更改WebLogic的主机名称validation程序,并且WebLogic附带可以使用通配符validationCN的类。

  1. 转至WebLogicpipe理控制台 – >环境 – >服务器 – >您的服务器 – >configuration – > SSL

  2. 点击“locking和编辑”

  3. 打开“高级”襟翼

  4. 将“BEA Hostname Verifier”中的“Hostname Verification”更改为“Custom Hostname Verifier”

  5. 将“自定义主机名validation程序”设置为weblogic.security.utils.SSLWLSWildcardHostnameVerifier

  6. 点击“保存”,然后点击“激活更改”

  7. 重新启动您的服务器。

朋友,你正在寻找与weblogic服务器debuggingSSL问题?

错误:

 FINE: ……….. Eating Exception ………. java.security.NoSuchAlgorithmException: Algorithm ECDH not available + at javax.crypto.KeyAgreement.getInstance(DashoA13*..)+ 

原因:

这就像客户端和服务器无法在通用密码(algorithm)上协商,因此握手失败。

只是给你一个简单的想法:密码由客户端初始化,服务器必须select客户端提供的任何一个密码来通过SSL进行通信。 如果服务器不支持这种客户端通用的密码algorithm,那么通信就不会发生。

因此,如果可以强制客户端(Weblogic)使用较弱的密码,并且服务器对使用有限的密码没有任何约束,那么我们可以通过SSL进行连接。

parsing度:

默认情况下,Weblogic Server使用SSL的certicom实现。

以上例外是因为SSL的certicom实现不能获得通用的密码协商。

我们可以告诉Weblogic服务器使用SUN的SUN实现来解决这个问题。

为了使用SSL的SUN实现,我们可以在Weblogic服务器中使用以下属性:

  • Djavax.net.ssl.keyStore
  • Djavax.net.ssl.keyStoreType
  • Djavax.net.ssl.keyStorePassword
  • Djavax.net.ssl.trustStore
  • Djavax.net.ssl.trustStoreType
  • Djavax.net.ssl.trustStorePassword
  • Djava.protocol.handler.pkgs = com.sun.net.ssl.internal.www.protocol

所有上述属性都可以用作JAVA属性,以便WLS JVM使用这些值而不是使用自己的实现。

我们也可以在我们的代码中使用上面的属性,如下所述:

 System.setProperty( “javax.net.ssl.keyStore”, “***” ); System.setProperty( “javax.net.ssl.keyStoreType”, “JKS” ); System.setProperty( “javax.net.ssl.keyStorePassword”, “***” ); System.setProperty( “javax.net.ssl.trustStore”, “***” ); System.setProperty( “javax.net.ssl.trustStoreType”, “JKS” ); System.setProperty( “javax.net.ssl.trustStorePassword”, “***” ); Security.addProvider( new com.sun.net.ssl.internal.ssl.Provider() ); System.setProperty( “java.protocol.handler.pkgs”, “com.sun.net.ssl.internal.www.protocol” ); 

– 对于SSL运行时debugging,也可以使用pipe理控制台。 用于服务器login到pipe理控制台>>>>服务器>>> MS1 >>>debugging>>>> weblogic树>>>> ssl选项。 检查选项并点击启用。

转至WebLogicpipe理控制台 – >环境 – >服务器 – >您的服务器 – >configuration – > SSL

打开“高级”襟翼

将“BEA Hostname Verifier”中的“Hostname Verification”更改为“None”

点击“保存”

重新启动您的服务器。

或者,我们可以像下面那样工作。

以上答案#设置“设置”自定义主机名validation“到weblogic.security.utils.SSLWLSWildcardHostnameVerifier”没有为我工作。

我已经完成了它为我工作的以下步骤:

去的

WebLogicpipe理控制台 – >环境 – >服务器 – >您的服务器 – >configuration – > SSL

  • 点击“locking和编辑”

    • 打开“高级”襟翼

    • 将“BEA Hostname Verifier”中的“Hostname Verification”更改为“None”

    • 点击“保存”,然后点击“激活更改”

    • 重新启动您的服务器。

和连接到这个启用SSL的环境的客户端应用程序,我已经运行java与以下-D选项:

 -Dweblogic.security.SSL.ignoreHostnameVerification=true 

现在,我可以从客户端应用程序连接到启用SSL的环境。在内部,我的客户端需要在Weblogic服务器中使用启用了t3s(SSL)的JMS。 它解决了我在客户端应用程序中遇到的以下exception:

 javax.naming.CommunicationException: t3s://slc09kty.MYHost.com:7202: Destination 10.XX.XX.164, 7202 unreachable; nested exception is: javax.net.ssl.SSLKeyException: Hostname verification failed: