Java https URL主机名与服务器证书上的公用名称(CN)不匹配

Java https URL主机名与服务器证书上的公用名称(CN)不匹配,java,web-services,Java,Web Services,我得到以下错误 javax.xml.ws.soap.SOAPFaultException: Marshalling Error: The https URL hostname does not match the Common Name (CN) on the server certificate. To disable this check (NOT recommended for production) set the CXF client TLS configuration proper

我得到以下错误

javax.xml.ws.soap.SOAPFaultException: Marshalling Error: The https URL hostname does not match the Common Name (CN) on the server certificate.  To disable this check (NOT recommended for production) set the CXF client TLS configuration property "disableCNCheck" to true.
当我尝试连接和使用Web服务时

我在cxf.xml中添加了以下几行,但仍然不起作用

<http-conf:conduit  name="*.http-conduit">
<!--  deactivate HTTPS url hostname verification (localhost, etc)
WARNING ! disableCNcheck=true should NOT be used in production -->
<http-conf:tlsClientParameters  disableCNCheck="true" />

cxf.xml文件位于WEB-INF/classes/CxfService下


请告诉我会有什么问题

此配置可能没有实际问题。您在web服务的URL中使用的主机名与证书中的主机名不匹配,但这可能是由于一些合法的原因,同时仍然允许访问正确的数据

SSL提供两种保护

  • 隐私:它提供了一个加密的通道,数据通过该通道传递,以便其他人看不到该数据
  • 来源保证:它还保证您已连接到您要求连接的站点
  • 然后,您可以看到三个级别的安全性:

    • 没有任何保护措施
    • 加密通道,因此没有人可以看到您的数据
    • 加密通道,以及确保您已连接到您希望连接的站点
    您正在禁用的是后一个功能。该站点提供一个加密证书,可以对该证书进行解码,以说明用于访问该站点的DNS名称。如果您使用的名称与证书中的名称不匹配,则会收到此警告。您可能知道,有多种方法可以寻址服务器,并且证书仅与证书所针对的一个DNS名称匹配。可能您没有使用正确的名称访问服务?或者,您可能有一个“自签名”服务,它提供加密通道,但不提供源代码保证

    要问自己的问题是:您是否担心有人会入侵DNS系统,并导致您的请求(通过DNS名称)被路由到服务器,然后服务器将提供虚假数据来代替您期望的web服务。这肯定会发生,我不想说它从未发生过,但这是非常罕见的。看


    这就是潜在的问题:有人可能会欺骗您正在调用的web服务。安全专家永远不会建议采取折衷的立场,但您应该评估数据的价值、欺骗服务的可能性以及此类欺骗可能造成的损害。如果这是一个重大问题,那么您必须使用与证书匹配的主机名,或者您必须获得与您使用的主机名匹配的证书。

    cxf.xml文件不应该直接位于
    WEB-INF/classes
    下吗?@Peter,感谢您的回复,但是cxf.xml的位置在这里重要吗,因为它在WEB-INF/classes下是1级?@Peter:我尝试过将cxf.xml文件放在WEB-INF/classes下,但也没有帮助。还是一样的消息。也许是个愚蠢的问题,但是:你不能修复SSL证书吗?@miniBill:谢谢。我给出了一个错误的URL,并解决了它。