私が書いている Java アプリケーションの DoD CAC 登録/認証を許可しようとしています。javax.smartcario
パッケージを使用してカードを読み取ります。正常に接続して GUID を読み取ることができます。探している情報は、カードに記載されているユーザー名です ( LAST.FIRST.M.123456789
)。GUID と証明書にアクセスできる次の AID を使用しています。
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
バイト配列が空ではありません。ありがとう!