Android 网络安全
HTTPS原理
核心概念
-
SSL/TLS协议
- 握手过程
- 证书验证
- 数据加密
- 密钥交换
-
证书体系
- CA证书
- 数字签名
- 证书链
- 证书验证
实现示例
// 自定义证书验证
class CustomTrustManager : X509TrustManager {
private val defaultTrustManager: X509TrustManager
init {
val trustManagerFactory = TrustManagerFactory.getInstance(
TrustManagerFactory.getDefaultAlgorithm()
)
trustManagerFactory.init(null as KeyStore?)
defaultTrustManager = trustManagerFactory.trustManagers[0] as X509TrustManager
}
override fun checkClientTrusted(chain: Array<X509Certificate>, authType: String) {
defaultTrustManager.checkClientTrusted(chain, authType)
}
override fun checkServerTrusted(chain: Array<X509Certificate>, authType: String) {
try {
defaultTrustManager.checkServerTrusted(chain, authType)
} catch (e: CertificateException) {
// 自定义证书验证逻辑
}
}
override fun getAcceptedIssuers(): Array<X509Certificate> {
return defaultTrustManager.acceptedIssuers
}
}网络攻击防护
常见攻击类型
-
中间人攻击
- 证书固定
- 双向认证
- 证书透明度
-
注入攻击
- 参数验证
- 转义处理
- 预编译语句
防护措施
// 证书固定示例
val certificatePinner = CertificatePinner.Builder()
.add("api.example.com", "sha256/XXXX=") // 证书指纹
.build()
val client = OkHttpClient.Builder()
.certificatePinner(certificatePinner)
.build()数据加密
加密算法
-
对称加密
- AES
- DES
- 3DES
-
非对称加密
- RSA
- ECC
- DSA
实现示例
// AES加密工具类
class AESEncryption {
private val keySpec: SecretKeySpec
private val cipher: Cipher
init {
val key = generateKey()
keySpec = SecretKeySpec(key, "AES")
cipher = Cipher.getInstance("AES")
}
fun encrypt(data: String): String {
cipher.init(Cipher.ENCRYPT_MODE, keySpec)
val encrypted = cipher.doFinal(data.toByteArray())
return Base64.encodeToString(encrypted, Base64.DEFAULT)
}
fun decrypt(data: String): String {
cipher.init(Cipher.DECRYPT_MODE, keySpec)
val decoded = Base64.decode(data, Base64.DEFAULT)
return String(cipher.doFinal(decoded))
}
}面试常见问题
1. HTTPS的工作原理?
-
握手过程
- 客户端发送随机数和支持的加密算法
- 服务器返回证书和随机数
- 生成会话密钥
- 验证证书有效性
-
数据传输
- 使用对称加密
- 密钥协商
- 数据完整性校验
2. 如何防止中间人攻击?
-
证书固定
- 预埋证书
- 指纹验证
- 证书链验证
-
其他措施
- 双向认证
- 证书透明度
- 证书吊销检查
3. 常见的加密算法有哪些?
-
对称加密
- 优点:速度快
- 缺点:密钥分发问题
- 应用:数据加密
-
非对称加密
- 优点:安全性高
- 缺点:速度慢
- 应用:密钥交换
4. 如何保护API密钥?
-
存储安全
- 使用NDK存储
- 加密存储
- 混淆保护
-
传输安全
- HTTPS传输
- 参数签名
- 时间戳验证
最佳实践
-
证书管理
- 正确配置证书
- 定期更新证书
- 证书备份
-
密钥管理
- 安全存储
- 定期轮换
- 访问控制
-
加密策略
- 选择合适算法
- 密钥长度
- 加密模式
注意事项
-
性能考虑
- 加密开销
- 网络延迟
- 内存消耗
-
兼容性
- 系统版本
- 加密库版本
- 证书兼容
-
调试与测试
- 证书验证
- 加密测试
- 性能测试