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]

处理方式如下:

	/**
	 * 发送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;
        
    }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值