URL的openStream报javax.net.ssl.SSLKeyException

<2014-7-22 上午11时38分03秒 CST>     
<2014-7-22 上午11时38分03秒 CST>     
<2014-7-22 上午11时38分03秒 CST>     
<2014-7-22 上午11时38分03秒 CST>     
<2014-7-22 上午11时38分03秒 CST>     
<2014-7-22 上午11时38分03秒 CST>     
<2014-7-22 上午11时38分03秒 CST>     
<2014-7-22 上午11时38分03秒 CST>     
<2014-7-22 上午11时38分03秒 CST>     
<2014-7-22 上午11时38分03秒 CST>     
<2014-7-22 上午11时38分04秒 CST>     
<2014-7-22 上午11时38分04秒 CST>     
<2014-7-22 上午11时38分04秒 CST>     

使用财付通接口时遇到的问题,经查证异常为:javax.net.ssl.SSLKeyException

查了一下,原因是默认情况下,当 WebLogic Server 实例充当 SSL 客户端角色(它会尝试通过 SSL 连接到其他服务器或应用程序)时,它会验证 SSL 服务器在数字证书中返回的主机名是否与用于连接 SSL 服务器的 URL 主机名相匹配。如果主机名不匹配,则删除此连接。

 

1.-Dweblogic.security.SSL.ignoreHostnameVerification=true
用此设置关闭主机名验证,具体可在startWebLogic.cmd文件中的任意一行加入一条命令:
set JAVA_OPTIONS=%JAVA_OPTIONS% -Dweblogic.security.SSL.ignoreHostnameVerification=true

2.-Dweblogic.security.SSL.hostnameVerifier=examples.security.sslclient.NulledHostnameVerifier
用此设置更改主机名验证,类examples.security.sslclient.NulledHostnameVerifier是weblogic的一个实现,用于取消主机名验证;另可以指定自定义主机名验证器类名,该类必须实现weblogic.security.SSL.HostnameVerifier 接口。

3.设置布署主机的SSL选项主机认证为无。

我是用第三种办法,在weblogic的控制台设置了一下,然后重启一下布暑结点就可以了。

=========================================================

weblogic        对参数   Dweblogic.security.SSL.ignoreHostnameVerification 的解释如下:

禁用主机名验证


使用以下方法之一关闭主机名验证:

  • 在 SSL 客户机的命令行中,输入以下参数:

    -Dweblogic.security.SSL.ignoreHostnameVerification=true

    注:当使用独立 SSL 客户机时,必须通过命令行或 API 设置主机名验证。

  • 在 WebLogic Server 管理控制台中:
  1. 如果尚未执行此操作,请在管理控制台的更改中心中单击锁定并编辑 (请参阅使用更改中心)。
  2. 在控制台的左侧窗格中,展开环境,然后选择服务器
  3. 单击要禁用其主机名验证的服务器名。
  4. 选择配置 > SSL,然后在页的底部单击高级
  5. 主机名验证字段设置为

    Oracle 建议您在生产环境中使主机名验证处于启用状态。

  6. 单击保存
  7. 要激活这些更改,请在管理控制台的更改中心中单击激活更改
    并非所有更改都立即生效。某些更改必须重新启动后才能生效 (请参阅使用更改中心)。

完成后

所有服务器 SSL 属性都是动态的;在通过控制台进行修改时,服务器 SSL 属性会导致相应的 SSL 服务器或通道 SSL 服务器重新启动,然后为新连接使用新设置。旧连接将继续在旧配置下运行。根据指定的配置,为确保所有的 SSL 连接存在,必须重新引导 WebLogic Server。



你可能感兴趣的:(weblogic,ssl)