我正在嘗試爲我寫的Java應用程序允許國防部CAC註冊/身份驗證。我正在使用javax.smartcario
包來讀取卡。我可以成功連接並讀取GUID。我正在查找的信息是卡上的用戶名(LAST.FIRST.M.123456789
)。我使用下面的AID這使我獲得了GUID和證書:國防部CAC ADPU命令
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
字節數組不爲空。謝謝!
字節數組在十六進制中包含什麼?請注意,要獲取響應數據,您需要使用'answer.getData()'而不是'answer.getBytes()',因爲後者也會返回狀態字。 –