3

我正在尝试为我正在编写的 Java 应用程序允许 DoD CAC 注册/身份验证。我正在使用javax.smartcario包裹来读取卡片。我可以成功连接并读取 GUID。我要查找的信息是卡上的用户名 ( LAST.FIRST.M.123456789)。我正在使用以下 AID,它使我可以访问 GUID 和证书:

byte[] aid = {(byte) 0xA0, 0x00, 0x00, 0x03, 0x08, 0x00, 0x00, 0x10, 0x00};

存储用户名的卡上是否有不同的应用程序?用户名是否以某种方式嵌入在证书中?谢谢!

[编辑]

我正在尝试根据 APDU 命令响应生成证书,但引发了异常。

 // X.509 Certificate for PIV auth command
 byte[] apdu = {0x00, (byte)0xCB, 0x3F, 
            (byte)0xFF, 0x05, 0x5C, 0x03, 0x5F, (byte)0xC1, 0x05};
 answer = channel.transmit(new CommandAPDU(apdu));

 CertificateFactory cf = CertificateFactory.getInstance("X.509");
 X509Certificate cert = (X509Certificate)cf.generateCertificate(
                 new ByteArrayInputStream(answer.getBytes()));

引发以下异常:

java.security.cert.CertificateException: Could not parse certificate: java.io.IOException: Empty input

字节数组不为空。谢谢!

4

1 回答 1

1

您必须同时查看 0x70 和 0x71 标签。

0x70 有证书数据,0x71 告诉你格式(过度简化将是 0 未压缩和 1 已压缩(gzip))

该值也可能超过一个 255 字节的缓冲区。您需要多写几行代码才能将有效的 byte[] 传入 X509“工厂”。

于 2014-06-13T04:17:01.670 回答