ssl新闻资讯

文档中心

AndroidHTTPS璇佷功PEM鏂囦欢璇﹁В鍘熺悊銆侀闄╀笌瀹炴垬閰嶇疆鎸囧崡

时间 : 2025-09-27 15:40:30浏览量 : 3

2AndroidHTTPS璇佷功PEM鏂囦欢璇﹁В鍘熺悊銆侀闄╀笌瀹炴垬閰嶇疆鎸囧崡

在移动应用开发中,HTTPS加密通信是保障用户数据安全的核心手段。而PEM格式的证书作为Android系统中常见的证书载体,其正确配置直接关系到通信的安全性。本文将以“Android HTTPS证书PEM”为核心,用通俗易懂的语言解析其工作原理、潜在风险,并通过实际案例演示如何正确配置。

一、PEM证书是什么?为什么Android需要它?

PEM(Privacy-Enhanced Mail)是一种Base64编码的文本文件格式,通常以`.pem`或`.crt`为后缀。它就像一张“数字身份证”,用于验证服务器的真实性。例如:

```

--BEGIN CERTIFICATE--

MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJK

...

--END CERTIFICATE--

为什么Android需要它?

当你的App通过HTTPS访问服务器时,系统会默认信任操作系统内置的CA(证书颁发机构)颁发的证书。但如果服务器使用自签名证书(比如企业内部测试环境),就需要手动将PEM证书导入Android,否则会报错:`SSLHandshakeException: Certificate chain not trusted`。

二、典型风险场景与攻击案例

1. 中间人攻击(MITM)

如果App没有正确校验PEM证书,攻击者可能伪造一个假证书进行拦截。例如:

- 案例:某金融App仅用`TrustAllCerts`代码跳过验证,黑客通过公共WiFi植入恶意证书,窃取用户转账数据。

- 防御:必须实现严格的证书锁定(Certificate Pinning)

2. 过期或弱签名算法

使用SHA-1签名的PEM证书已被证明不安全:

```openssl

openssl x509 -in server.pem -text -noout | grep "Signature Algorithm"

输出若为`SHA-1`则需立即更换为SHA-256。

3. 私钥泄露

PEM文件可能包含私钥(如PKCS

8格式),若泄露会导致服务器身份被冒用:

--BEGIN PRIVATE KEY--

MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC9gVjq...

三、实战:Android中配置PEM证书的3种方法

方法1:将PEM打包到Assets目录

适用于自签名证书场景:

```kotlin

val certificateFactory = CertificateFactory.getInstance("X.509")

val inputStream = context.assets.open("server.pem")

val certificate = certificateFactory.generateCertificate(inputStream)

方法2:使用OkHttp的CertificatePinner(推荐)

直接绑定证书公钥哈希值,即使CA被攻破也能防护:

val certPin = "sha256/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=" // 替换为实际哈希

val client = OkHttpClient.Builder()

.certificatePinner(CertificatePinner.Builder()

.add("example.com", certPin)

.build())

.build()

获取哈希值的命令:

```bash

openssl x509 -in server.pem -pubkey -noout | openssl rsa -pubin -outform der | openssl dgst -sha256 -binary | openssl enc -base64

方法3:系统级信任(需Root)

将PEM证书放入系统CA存储目录:

adb push server.pem /system/etc/security/cacerts/

adb shell chmod 644 /system/etc/security/cacerts/server.pem

四、进阶技巧与排查工具

1. 检测网络流量

使用Burp Suite或Frida抓包时,若遇到SSL错误,可能是证书校验未被绕过。可通过以下代码动态调试:

```java

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

sslContext.init(null, 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[0]; }

}}, new SecureRandom());

```

2. 自动化扫描工具

- MobSF:自动检测Apk中的证书配置漏洞。

- openssl命令行:快速验证PEM文件有效性:

```bash

openssl verify -CAfile root-ca.pem server.pem

```

五、关键要点

| 安全实践 | 错误示例 | 正确做法 |

|-||--|

| 证书校验 | 信任所有证书 | Certificate Pinning |

| 算法选择 | SHA-1签名 | SHA-256/ECDSA |

| PEM文件存储 | APK中包含私钥 | 仅部署公钥+服务端严格保管私钥 |

通过合理使用PEM证书并遵循上述原则,可显著提升Android应用的HTTPS安全性。记住:安全不是一次性的工作,定期更新和审计才是关键!

TAG:android https证书pem,android app证书,安卓https证书,android 证书 信任 设置