首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Android HTTPS 忽略證書:4.4 正常,4.2 以下報 ASN.1 UTCTime 錯誤

     編輯:程式設計疑難解答

錯誤分析

日志關鍵行:

Caused by: org.apache.harmony.security.asn1.ASN1Exception: ASN.1 UTCTime: wrong format for DER, identifier at [112]

表明 服務器證書的時間字段編碼不符合 Android 4.2 (API 17) 及以下的舊版 Harmony 提供程序解析規則。Android 4.4+ 升級至 OpenSSL,兼容性更好。

解決方案

  1. 服務端修復(根治):重新簽發證書,確保 NotBefore/NotAfter 使用 GeneralizedTime (YYYYMMDDHHMMSSZ) 而非 UTCTime (YYMMDDHHMMSSZ),或升級服務器 TLS 庫(如 OpenSSL 1.0.2+)。
  2. 客戶端兼容(臨時):自定義 TrustManager 並使用 BouncyCastle 解析證書,繞過系統默認驗證邏輯。代碼複雜,不推薦長期使用。
  3. 升級最低 SDK:將 minSdkVersion 設為 19 (4.4) 或更高,放棄 4.2 設備支持。

驗證證書格式

openssl x509 -in server.crt -text -noout | grep -A2 Validity
# 觀察 Not Before/After 格式

總結

此為舊版 Android TLS 實現缺陷,首選服務端修正證書,若不可控則考慮升級 minSdkVersion 或引入 BouncyCastle。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved