ssl新闻资讯

文档中心

Android寮€鍙戝繀鐭ュ浣曟纭疄鐜癏TTPS鎸囧畾璇佷功楠岃瘉锛堥檮浠g爜绀轰緥锛?txt

时间 : 2025-09-27 15:40:50浏览量 : 1

2Android寮€鍙戝繀鐭ュ浣曟纭疄鐜癏TTPS鎸囧畾璇佷功楠岃瘉锛堥檮浠g爜绀轰緥锛?txt

在移动应用开发中,HTTPS通信是保障用户数据安全的基础。但仅仅使用HTTPS还不够——如果忽略证书验证,攻击者仍可能通过中间人攻击(MITM)窃取数据。本文将用通俗易懂的方式,结合代码示例,讲解Android中如何实现指定证书验证(Pinning),让你的应用更安全。

一、为什么需要指定证书验证?

HTTPS默认会验证服务器证书是否由受信任的机构(如DigiCert、Let's Encrypt)签发,但攻击者可能:

1. 伪造证书:通过恶意代理工具(如Charles、Fiddler)安装自签名证书。

2. 利用系统漏洞:如果设备被Root或越狱,攻击者可篡改系统信任的证书库。

例子:某金融App未做证书固定,黑客在公共WiFi下用Fiddler抓包,轻松获取用户的银行卡号和密码。

二、Android实现指定证书验证的3种方式

1. 公钥固定(Public Key Pinning)

只信任特定公钥,即使证书到期后重新签发(公钥不变)仍能通过验证。

```java

// 示例:OkHttp实现公钥固定

String hostname = "api.yourdomain.com";

CertificatePinner certificatePinner = new CertificatePinner.Builder()

.add(hostname, "sha256/AAAAAAAAAAAAAAAAAAAAAAAA=") // 替换为你的公钥哈希

.build();

OkHttpClient client = new OkHttpClient.Builder()

.certificatePinner(certificatePinner)

```

2. 全证书固定(Full Certificate Pinning)

直接绑定预置的完整证书文件(`.cer`或`.pem`),但需注意证书过期问题。

// 示例:使用预置的BKS格式证书库

InputStream certStream = context.getResources().openRawResource(R.raw.your_cert);

KeyStore keyStore = KeyStore.getInstance("BKS");

keyStore.load(certStream, "password".toCharArray());

TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());

tmf.init(keyStore);

SSLContext sslContext = SSLContext.getInstance("TLS");

sslContext.init(null, tmf.getTrustManagers(), null);

.sslSocketFactory(sslContext.getSocketFactory(), (X509TrustManager) tmf.getTrustManagers()[0])

3. 网络安全配置(Network Security Config)

Android 7.0+推荐的方式,通过XML文件声明信任的证书。

```xml

yourdomain.com

AAAAAAAAAAAAAAAAAAAAAAAA=

三、实际开发中的注意事项

1. 备用密钥:至少固定2个公钥,防止原密钥失效导致App无法连接。

2. 调试模式豁免:开发时可通过`android:debuggable="true"`临时关闭验证。

3. 错误处理:捕获`CertificateException`并提示用户可能存在风险。

四、测试你的实现

使用工具验证是否生效:

- Charles/Fiddler:尝试抓包应失败并报错`SSLHandshakeException`。

- Burp Suite:导入你的证书测试中间人攻击是否被阻断。

五、

HTTPS若不做证书固定,就像给门上锁却把钥匙放在门口垫子下!通过公钥固定、全证书绑定或Network Security Config,能有效防御中间人攻击。根据项目需求选择方案,并记得处理好兼容性和错误场景。

> 延伸阅读:[OWASP Mobile Security Testing Guide](https://owasp.org/www-project-mobile-security-testing-guide/)

TAG:android https 指定证书验证码,安卓手机app证书验证失败,安卓https证书,安卓开发验证码登录,android获取手机验证码