gpt4 book ai didi

java - HttpsURLConnection.setDefaultHostnameVerifier : method verify not invoked

转载 作者:太空宇宙 更新时间:2023-11-03 14:56:38 27 4
gpt4 key购买 nike

我这样配置 HttpsUrlConnection:

HttpsURLConnection.setDefaultSSLSocketFactory(sslFactory);
HttpsURLConnection.setDefaultHostnameVerifier(new DummyHostnameVerifier());

虚拟主机名 validator :

public class DummyHostnameVerifier implements HostnameVerifier {
@Override
public boolean verify(String s, SSLSession sslSession) {
return true;
}
}

当然,这只是配置的一部分。但问题是未调用 DummyHostnameVerifier 中的验证方法。当我在本地机器 glassfish 3 服务器上测试我的应用程序时,验证已调用并且我没有收到任何异常。但是当我在远程环境中测试它时,验证没有被调用,我收到了这个:

java.io.IOException: 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.

在远程环境中,应用程序在 jboss 5 上运行。也许这取决于一些 jboss 配置?我不明白,在设置我的 validator 后,默认主机名 validator 在哪里发生了变化。

最佳答案

我认为如果您想绕过 certificateValidation,您需要创建不会进行证书验证的 Trustmanager

HttpsURLConnection.setDefaultHostnameVerifier(new DummyHostnameVerifier());
// Create a TrustManager which wont validate certificate chains start

javax.net.ssl.TrustManager[] trustAllCertificates = new javax.net.ssl.TrustManager[1];

javax.net.ssl.TrustManager tm = new miTM();

trustAllCertificates[0] = tm;

javax.net.ssl.SSLContext sc = javax.net.ssl.SSLContext.getInstance("SSL");

sc.init(null, trustAllCertificates, null);
// Create a TrustManager which wont validate certificate chains end
HttpsURLConnection.setDefaultSSLSocketFactory(sslFactory);

能否请您尝试使用上面的代码,如果您得到解决方案,请告诉我?

关于java - HttpsURLConnection.setDefaultHostnameVerifier : method verify not invoked,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28561553/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com