在Android开发中,绕过SSL证书检测通常用于测试环境或处理自签名证书。以下是详细步骤和注意事项:
方法一:自定义TrustManager(适用于HttpsURLConnection)
1. 创建信任所有证书的TrustManager
TrustManager[] trustAllCerts = new TrustManager[]{
new X509TrustManager() {
public void checkClientTrusted(X509Certificate[] chain, String authType) {}
public void checkServerTrusted(X509Certificate[] chain, String authType) {}
public X509Certificate[] getAcceptedIssuers() {
return new X509Certificate[0];
}
}
};
2. 初始化SSLContext并应用
SSLContext sslContext = SSLContext.getInstance("SSL");
sslContext.init(null, trustAllCerts, new SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory());
HttpsURLConnection.setDefaultHostnameVerifier((hostname, session) -> true);
方法二:配置OkHttpClient
OkHttpClient client = new OkHttpClient.Builder()
.sslSocketFactory(sslContext.getSocketFactory(), (X509TrustManager) trustAllCerts[0])
.hostnameVerifier((hostname, session) -> true)
.build();
方法三:网络安全配置(针对用户证书)
1. 创建res/xml/network_security_config.xml
<network-security-config>
<base-configcleartextTrafficPermitted="true">
<trust-anchors>
<certificatessrc="system" />
<certificatessrc="user" />
</trust-anchors>
</base-config>
</network-security-config>
2. 在AndroidManifest.xml中引用配置
<application
android:networkSecurityConfig="@xml/network_security_config"
...>
处理WebView的SSL错误
webView.setWebViewClient(new WebViewClient() {
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
handler.proceed(); // 忽略SSL错误(慎用!)
}
});
注意事项
- 仅用于测试环境:生产环境必须严格验证证书,避免中间人攻击。
- 兼容性问题:Android 7.0+默认不信任用户证书,需通过网络安全配置显式允许。
- 安全风险:绕过证书验证会显著降低应用安全性,务必在发布版本中移除相关代码。
- 主机名验证:禁用HostnameVerifier可能导致
推荐阅读
为什么你的逆向分析总失败?90%的人忽略的IDA Pro脚本技巧
原文始发于微信公众号(哆啦安全):Android15绕过SSL证书检测方法
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论