Я пытаюсь разрешить регистрацию/аутентификацию DoD CAC для приложения Java, которое я пишу. Я использую пакет 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
Массив байтов не пуст. Спасибо!
answer.getData()
, а неanswer.getBytes()
, поскольку позднее также будет возвращено слово состояния. - person Maarten Bodewes   schedule 17.05.2014