Java如何将带trustAllCerts的SSLSocketFactory适配带超时的SSLSocket创建
解决方法
你已经创建了配置好trustAllCerts的自定义sslSocfactory,直接用它调用无参createSocket()方法替换方法2里的默认工厂调用即可,无需用全局默认的SSLSocketFactory,完整实现代码如下:
SSLSocket socket = null; SSLContext sc = null; sc = SSLContext.getInstance("TLS"); sc.init(null, trustAllCerts, new java.security.SecureRandom()); // 直接从自定义SSLContext获取socket工厂,无需设置全局默认(除非你需要给全局HttpsURLConnection使用) SSLSocketFactory sslSocfactory = sc.getSocketFactory(); // 整合后的逻辑,同时满足自定义证书信任、连接超时生效的需求 socket = (SSLSocket) sslSocfactory.createSocket(); socket.connect(new InetSocketAddress(host, port), timeout); socket.setSoTimeout(timeout);
说明
- 所有
SSLSocketFactory实现都支持无参createSocket()方法,你自己通过SSLContext生成的自定义工厂和全局默认工厂的API完全一致,不存在适配问题,不会出现编译报错。 - 如果你的业务不需要给全局
HttpsURLConnection配置自定义信任规则,可以删掉HttpsURLConnection.setDefaultSSLSocketFactory(...)那行代码,避免全局配置污染其他HTTP请求逻辑。
内容的提问来源于stack exchange,提问作者Tacoma50
相关产品推荐
相关产品推荐

