用HttpClient发送HTTPS请求报SSLException: Certificate for <域名> doesn‘t match any of the subject alternative

最近用http 推送,用apache HttpClient做https的请求(之前用阿里云的证书都是没问题的,这次是另一个开发者 他自签证书未申请颁发 域名也没备案),代码上到服务器端就报javax.net.ssl.SSLException: Certificate for <域名> doesn't match any of the subject alternative names: [域名],

用HttpClient发送HTTPS请求报SSLException: Certificate for <域名> doesn‘t match any of the subject alternative_第1张图片

仔细翻了一下文档发现是HttpClient 4.4.1版本的bug,试了很多解决方案,最后在stackoverflow上面找到了正解,链接如下:link,根本的解决还是要从调用HttpClient的代码入手,我把关键部分截图出来分享给掉进这个坑的朋友们:

用HttpClient发送HTTPS请求报SSLException: Certificate for <域名> doesn‘t match any of the subject alternative_第2张图片

单独处理下信任所有证书,关闭主机名校验,就能通过验证了 


补充:

看网上好多采取,有人可以,但是我这种情况是(毕竟自签为备案申请的)然后就会提示javax.net.ssl.SSLPeerUnverifiedException: Certificate for doesn't match any of the subject alternative names: []所以 要忽略校验和域名

			SSLContext sslContext = getSSLContext();
			Registry socketFactoryRegistry =
					RegistryBuilder.create()
							.register("http", PlainConnectionSocketFactory.INSTANCE)
							.register("https", new SSLConnectionSocketFactory(sslContext)).build();
			PoolingHttpClientConnectionManager mananger = new PoolingHttpClientConnectionManager(socketFactoryRegistry);
			mananger.setMaxTotal(100);
			mananger.setDefaultMaxPerRoute(20);
			CloseableHttpClient httpclient = HttpClients
					.custom()
					.setDefaultRequestConfig(requestConfig)
					.setConnectionManager(mananger)
					.build();

 

你可能感兴趣的:(java基础-技术点)