安卓客戶端向服務器發送數據,需防範竄改、重放、中間人攻擊。三層防護體系:
1. 雙向身份驗證(防偽造端點)
- 客戶端驗證服務器證書(CA 簽發或 Pinning 公鑰哈希)
- 服務器驗證客戶端憑證/Token(OAuth2、JWT、API Key)
2. 傳輸加密(防竊聽/竄改)
- 強制 HTTPS(TLS 1.2+),禁用 HTTP 明文
- OkHttp 配置
CertificatePinner 防止證書劫持
- 敏感字段(密碼、身份證)應用層再加密(AES-GCM/RSA)
3. 數字簽名/完整性校驗(防重放/篡改)
// 請求體 + 時間戳 + Nonce → HMAC-SHA256(secret) → Signature Header
String sign = HmacSHA256(body + timestamp + nonce, secretKey);
headers.put("X-Signature", sign);
headers.put("X-Timestamp", timestamp);
headers.put("X-Nonce", nonce);
- 服務器驗證簽名、時間戳在窗口內(±5min)、Nonce 去重(Redis Set)
最小可行方案
- 全站 HTTPS + 有效 CA 證書
- 登錄返回 JWT,後續請求 Header 攜帶
- 關鍵業務(支付、改密)增加體加密 + 簽名