You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Android设备PSAM卡槽的智能卡中获取完整X509证书?

解决Android设备PSAM卡槽智能卡获取完整X509证书的方案

1. 逆向Windows端的证书读取逻辑

Windows能读取到完整证书,说明智能卡驱动/中间件一定是通过某种APDU交互拿到了证书数据。你可以用工具(比如Wireshark配合USB抓包,或专用智能卡APDU日志工具)捕获Windows下解锁PIN后读取证书的APDU指令序列,再将这些指令移植到Android的SDK中执行。

  • 操作要点:抓包时覆盖从PIN验证到证书显示的全流程,重点关注PIN验证成功后的文件选择、数据读取类指令(如00 A4选文件、00 B0读二进制)。

2. 遍历智能卡文件系统定位证书数据

大部分智能卡遵循ISO 7816-4规范,证书通常存储在特定的EF(基本文件)中。你可以尝试以下通用指令序列:

  • 选择主文件MF:00 A4 00 00 02 3F 00(响应90 00表示成功)
  • 遍历可能的DF(专用文件):尝试选择常见DF路径,比如00 A4 00 00 02 D0 01(PKCS#15常用DF),或用00 A4 00 0C指令按名称选DF
  • 选中DF后遍历EF文件:用00 B2 01 0C读取目录文件(如果存在),获取所有EF的ID和属性,逐个读取EF内容,通过开头30 82的特征判断是否为完整X509 DER证书

3. 基于PKCS#15规范查找证书

如果你的智能卡支持PKCS#15标准,可按以下步骤操作:

  • 选择PKCS#15的DF:00 A4 00 00 02 D0 01
  • 读取PKCS#15目录文件(EF.DIR):00 B0 00 00 [文件长度],解析其中的证书对象条目,获取证书存储的EF路径和偏移
  • 根据解析到的路径读取对应EF文件内容,提取完整证书

4. 验证公钥匹配性确认目标证书

当读取到疑似完整证书的DER数据后,可解析其公钥,与你已获取的“仅含公钥的DER”比对(如计算公钥哈希值),确认是否为目标证书。Android中可通过X509Certificate类解析DER数据:

byte[] derData = // 从卡中读取的疑似证书数据
CertificateFactory cf = CertificateFactory.getInstance("X.509");
X509Certificate cert = (X509Certificate) cf.generateCertificate(new ByteArrayInputStream(derData));
PublicKey publicKey = cert.getPublicKey();
// 将公钥编码为DER,与已有公钥DER比对
byte[] certPubKeyDer = publicKey.getEncoded();
if (Arrays.equals(certPubKeyDer, existingPubKeyDer)) {
    // 确认是目标证书
}

5. 检查设备SDK的隐藏接口

部分Android设备的PSAM卡槽SDK可能封装了更高层的证书读取API,而非仅暴露底层APDU指令。你可以仔细排查SDK文档,或反编译SDK的jar包,查看是否存在getCertificate()类方法——可能需要先完成PIN验证(若SDK支持PIN输入接口)再调用这些方法。


内容的提问来源于stack exchange,提问作者some rand

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 00:33:24