From a28fd0d4d8c0c5f86bc00dba7e683d06effd502e Mon Sep 17 00:00:00 2001 From: pppscn <35696959@qq.com> Date: Wed, 21 Apr 2021 11:23:37 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BD=AC=E5=8F=91=E5=88=B0webhook=E6=97=B6?= =?UTF-8?q?=E5=BF=BD=E7=95=A5ssl=E8=AF=81=E4=B9=A6=E6=A0=A1=E9=AA=8C?= =?UTF-8?q?=EF=BC=88=E6=8F=90=E9=AB=98=E8=87=AA=E5=BB=BA=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E7=AB=AF=E5=85=BC=E5=AE=B9=E6=80=A7=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../forwarder/sender/SenderWebNotifyMsg.java | 7 +- .../idormy/sms/forwarder/utils/CertUtils.java | 70 +++++++++++++++++++ 2 files changed, 76 insertions(+), 1 deletion(-) create mode 100644 app/src/main/java/com/idormy/sms/forwarder/utils/CertUtils.java diff --git a/app/src/main/java/com/idormy/sms/forwarder/sender/SenderWebNotifyMsg.java b/app/src/main/java/com/idormy/sms/forwarder/sender/SenderWebNotifyMsg.java index 6c217ce1..674a0744 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/sender/SenderWebNotifyMsg.java +++ b/app/src/main/java/com/idormy/sms/forwarder/sender/SenderWebNotifyMsg.java @@ -5,6 +5,7 @@ import android.os.Handler; import android.util.Base64; import android.util.Log; +import com.idormy.sms.forwarder.utils.CertUtils; import com.idormy.sms.forwarder.utils.LogUtil; import java.io.IOException; @@ -70,7 +71,11 @@ public class SenderWebNotifyMsg { request = new Request.Builder().url(webServer).method("POST", body).build(); } - OkHttpClient client = new OkHttpClient().newBuilder().build(); + OkHttpClient client = new OkHttpClient().newBuilder() + //忽略https证书 + .sslSocketFactory(CertUtils.getSSLSocketFactory(), CertUtils.getX509TrustManager()) + .hostnameVerifier(CertUtils.getHostnameVerifier()) + .build(); Call call = client.newCall(request); call.enqueue(new Callback() { @Override diff --git a/app/src/main/java/com/idormy/sms/forwarder/utils/CertUtils.java b/app/src/main/java/com/idormy/sms/forwarder/utils/CertUtils.java new file mode 100644 index 00000000..4e8c1284 --- /dev/null +++ b/app/src/main/java/com/idormy/sms/forwarder/utils/CertUtils.java @@ -0,0 +1,70 @@ +package com.idormy.sms.forwarder.utils; + +import java.security.KeyStore; +import java.security.SecureRandom; +import java.security.cert.X509Certificate; +import java.util.Arrays; + +import javax.net.ssl.HostnameVerifier; +import javax.net.ssl.SSLContext; +import javax.net.ssl.SSLSocketFactory; +import javax.net.ssl.TrustManager; +import javax.net.ssl.TrustManagerFactory; +import javax.net.ssl.X509TrustManager; + +public class CertUtils { + + //获取这个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; + } + +} \ No newline at end of file