Java 国防部CAC ADPU司令部

Java 国防部CAC ADPU司令部,java,smartcard,apdu,cac,Java,Smartcard,Apdu,Cac,我正在尝试为我正在编写的Java应用程序允许DoD CAC注册/身份验证。我正在使用javax.smartcario包来读取卡。我可以成功连接并读取GUID。我要查找的信息是卡上的用户名(LAST.FIRST.M.123456789)。我正在使用以下帮助来访问GUID和证书: byte[] aid = {(byte) 0xA0, 0x00, 0x00, 0x03, 0x08, 0x00, 0x00, 0x10, 0x00}; 卡上是否有其他包含用户名的应用程序?用户名是否以某种方式嵌入到证书中

我正在尝试为我正在编写的Java应用程序允许DoD CAC注册/身份验证。我正在使用
javax.smartcario
包来读取卡。我可以成功连接并读取GUID。我要查找的信息是卡上的用户名(
LAST.FIRST.M.123456789
)。我正在使用以下帮助来访问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

字节数组不是空的。谢谢

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

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


此外,该值可能不止一个255字节的缓冲区。在X509“工厂”中传递有效的字节[]之前,还需要几行代码。

字节数组包含的十六进制内容是什么?请注意,要获取响应数据,您需要使用
answer.getData()
而不是
answer.getBytes()
,因为后者也将返回状态字。嘿,您有使用的压缩格式的参考吗?gunzip不喜欢我给它的证书数据。谢谢