1. 程式人生 > 其它 >OkHttpClient跳過證書驗證

OkHttpClient跳過證書驗證

package com.example.test.utils;

import javax.net.ssl.*;
import java.security.KeyStore;
import java.security.SecureRandom;
import java.security.cert.X509Certificate;
import java.util.Arrays;

public class SSLSocketClient {

    /**
     * 獲取這個SSLSocketFactory
     * */
    public static SSLSocketFactory getSSLSocketFactory() {
        
try { SSLContext sslContext = SSLContext.getInstance("SSL"); sslContext.init(null, getTrustManager(), new SecureRandom()); return sslContext.getSocketFactory(); } catch (Exception e) { throw new RuntimeException(e); } } /** * 獲取TrustManager *
*/ private static TrustManager[] getTrustManager() { return new TrustManager[]{ new X509TrustManager() { @Override public void checkClientTrusted(X509Certificate[] chain, String authType) { } @Override
public void checkServerTrusted(X509Certificate[] chain, String authType) { } @Override public X509Certificate[] getAcceptedIssuers() { return new X509Certificate[]{}; } } }; } /** * 獲取HostnameVerifier * */ public static HostnameVerifier getHostnameVerifier() { return (s, sslSession) -> true; } public static X509TrustManager getX509TrustManager() { X509TrustManager trustManager = null; try { TrustManagerFactory 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)); } trustManager = (X509TrustManager) trustManagers[0]; } catch (Exception e) { e.printStackTrace(); } return trustManager; } }

呼叫

public static HashMap httpPost(String url, HashMap<String, Object> data, String token) throws IOException {
        HashMap<String, Object> result = new HashMap<>();
        if ("".equals(url)) {
            return result;
        }
        OkHttpClient client = new OkHttpClient.Builder()
                .readTimeout(60, TimeUnit.SECONDS)
                .connectTimeout(60, TimeUnit.SECONDS)
                .sslSocketFactory(SSLSocketClient.getSSLSocketFactory(), SSLSocketClient.getX509TrustManager())
                .hostnameVerifier(SSLSocketClient.getHostnameVerifier())
                .build();

        MediaType mediaType = MediaType.parse("application/json;charset=utf8");
        RequestBody body = RequestBody.create(mediaType, JSON.toJSONString(data));
        Request request = new Request.Builder()
                .url(url)
                .post(body)
                .addHeader("content-type", "application/json")
                .addHeader("X-Auth-Token", token)
                .build();
        Response response = client.newCall(request).execute();
        String responseData = response.body().string();
        String getToken = response.header("X-Subject-Token");
        HashMap res = JSON.parseObject(responseData, HashMap.class);
        result.put("token", getToken);
        result.put("res", res);
        return result;
    }