Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java8中注册自定义HostnameVerifier_Java_Ssl_Https - Fatal编程技术网

如何在Java8中注册自定义HostnameVerifier

如何在Java8中注册自定义HostnameVerifier,java,ssl,https,Java,Ssl,Https,我有一个Java6项目,其中的代码按预期工作 HostnameVerifier hv = new HostnameVerifier() { public boolean verify(String hostname, SSLSession session) { return true; } }; System.setProperty("java.protocol.handler.pkgs", "com.sun.net.ssl.in

我有一个Java6项目,其中的代码按预期工作

HostnameVerifier hv = new HostnameVerifier() {

    public boolean verify(String hostname, SSLSession session) {
         return true;
    }
};
System.setProperty("java.protocol.handler.pkgs", "com.sun.net.ssl.internal.www.protocol");
HttpsURLConnection.setDefaultHostnameVerifier(hv);

但是,在另一个使用Java 8的项目中,它不能作为主机名验证程序工作。验证永远不会被调用。这两个项目都使用
org.apache.cxf.jaxrs.client.JAXRSClientFactory
来创建服务实例,以便执行对第三方API的请求

如果您的目标是允许连接到具有无效SSL证书的站点,那么您需要的不仅仅是HostnameVerifier。您需要将设置为使用TrustManager初始化的上下文,该上下文将覆盖其所有检查。为什么要删除主机名测试?这样做会使您容易受到攻击,因为无论发生什么情况,基本上任何证书都是有效的。这样做会使您失去HTTPS的几乎所有用处,您也可以像使用HTTP一样好。@PatrickMevzek因为在我的本地develepomet环境中,我使用SSH隧道来访问这个第三方API,以便URL将请求发送到HTTP-ttps://localhost:some_port/...@VGR这是自Java6以来发生的变化吗?因为在使用Java 6的项目中,TrustManager和SSLContext类仅在实用程序类中使用(需要从CMD手动运行等),通过提供URL帮助开发人员安装证书,因此不需要手动将证书放入cacerts中。除此之外,TrustManager和SSLContext不在任何地方使用。”所以发送请求的URL变成了h-ttps://localhost:some_port/... “所以不要这样做。使用真实的主机名。在
/etc/hosts
或全局DNS中。