Чтение закрытого ключа со смарт-карты для цифровой подписи XML-документа - PullRequest
1 голос
/ 10 мая 2019

Я занимаюсь разработкой приложения, в котором пользователь должен иметь возможность цифровой подписи документов XML с помощью смарт-карты, которая будет содержать их закрытый ключ.

Во время тестирования я могу сгенерировать данную подпись XMLпути к файлам двух ключей (открытого и закрытого).

Моя проблема заключается в том, как прочитать закрытый ключ со смарт-карты.Я могу получить ответ от карты, используя следующий код:

        TerminalFactory factory = TerminalFactory.getDefault();
        List<CardTerminal> terminals = factory.terminals().list();

        CardTerminal terminal = terminals.get(0);

        Card card = terminal.connect("*");
        System.out.println("Card: " + card);

        CardChannel channel = card.getBasicChannel();
        ResponseAPDU r = channel.transmit(new CommandAPDU(0x00, 0x84, 0x00, 0x00, 0x08));

        String hex = DatatypeConverter.printHexBinary(r.getBytes());
        System.out.println("Response: " + hex);

Буду признателен за любую помощь в том, как читать / просматривать содержимое карты, чтобы найти личный ключ.

Спасибо!

1 Ответ

0 голосов
/ 11 мая 2019

Закрытый ключ не может быть считан со смарт-карты.Используя библиотеку PKCS11, такую ​​как SunPKCS11 или другие устройства обработки PKCS11, вы можете получить дескриптор закрытого ключа, а затем использовать PKCS11 для подписи с аппаратного устройства, скажем, смарт-карты.Вам потребуется указать путь к драйверу смарт-карты для настройки провайдера Java Security JCA / JCE.

Для получения более подробной информации вы можете обратиться: JDK 8 Справочное руководство PKCS # 11

В качестве альтернативы, вы можете использовать любую легкодоступную библиотеку для этой цели. Signer Digital , предоставляемый моей компанией, являющейся одной из тех коммерческих библиотек на стороне сервера.Хотя расширения для браузеров, которые подписываются с использованием смарт-карты или USB-токена, бесплатны.

...