Hostname * not verified:certificate,HTTPS接口调用处理

这篇具有很好参考价值的文章主要介绍了Hostname * not verified:certificate,HTTPS接口调用处理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

使用OKHTTP调用HTTPS接口时,报错/异常信息:

Hostname * not verified:
certificate: sha256/F0yVXJ/nbG7JtrM+11NhtuKkepfbtzvXufVCUQ5Gxm4=
DN: CN=*.xxx.com, O=*有限公司, L=北京市, ST=北京市, C=CN
subjectAltNames: [*.xxx.com, xxx.com]

处理方式如下:文章来源地址https://www.toymoban.com/news/detail-636244.html

	/**
	 * 发送POST请求,调用HTTP接口
	 * @param url 接口地址
	 * @param params 接口参数(JSon格式)
	 * @return JSon
	 * 
	 */
	public static String post(String url, String params) throws Exception {
	    
		String json = null;
		if(params == null) params = "";
		TrustManagerFactory trustManagerFactory = null;
		trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
		trustManagerFactory.init((KeyStore) null);
		TrustManager[] trustManagers = trustManagerFactory.getTrustManagers();
		if (trustManagers.length != 1 || !(trustManagers[0] instanceof X509TrustManager)) {
		    throw new IllegalStateException("Unexpected default trust managers:" + Arrays.toString(trustManagers));
		}
		X509TrustManager trustManager = (X509TrustManager) trustManagers[0];
		SSLContext sslContext = SSLContext.getInstance("TLS");
		sslContext.init(null, new TrustManager[]{trustManager}, null);
		
    	OkHttpClient client = new OkHttpClient().newBuilder().connectTimeout(15, TimeUnit.SECONDS)
    	.readTimeout(70, TimeUnit.SECONDS).sslSocketFactory(create(), trustManager).hostnameVerifier(trusts()).build();
    	MediaType mediaType = MediaType.parse("application/json");
    	RequestBody body = RequestBody.create(mediaType, params);
	    
		Request.Builder builder = new Request.Builder();
		builder.url(url); //接口地址
		builder.method("POST", body);
		builder.addHeader("Content-Type", "application/json");
		Request request = builder.build();
		Response response = client.newCall(request).execute();
		ResponseBody responseBody = response.body();
		
		if (response.isSuccessful() && responseBody != null) {
			json = responseBody.string();
		} else {
			if(responseBody != null) json = responseBody.string();
		}
	    
    	return json;

	}

	/**
	 * 处理SSL协议(添加信任域名)
	 */
	private static HostnameVerifier trusts() {
		
	    return new HostnameVerifier() {
	        @Override
	        public boolean verify(String hostname, SSLSession session) {            
	            HostnameVerifier verifier = HttpsURLConnection.getDefaultHostnameVerifier();
	            return verifier.verify("*.xxx.com", session);
	        }
	    };
	    
	}
	
	/**
	 * 创建SSLSocketFactory
	 * @return SSLSocketFactory
	 */
	private static SSLSocketFactory create() {

        SSLSocketFactory sslFactory = null;
        try {
            SSLContext ctx = SSLContext.getInstance("TLS");
            ctx.init(null, new TrustManager[]{new Verifier()}, new SecureRandom());
            sslFactory = ctx.getSocketFactory();
        } catch (Exception e) {
        	e.printStackTrace();
        }

        return sslFactory;
        
    }

到了这里,关于Hostname * not verified:certificate,HTTPS接口调用处理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包