Как подключиться к HTTPS-серверу с помощью Common Access Card

Мне нужно написать Java-программу для подключения к HTTPS-серверу (веб-сайт DoD). Веб-сайт требует проверки подлинности CAC (карта общего доступа DoD). Если вы заходите на этот сайт через браузер, сначала вставьте свой CAC, а затем введите PIN-код.

Мне нужно выполнить процесс аутентификации программно в Java (вроде как браузер). Как мне получить информацию из CAC? Я гуглил и читал Справочное руководство по Java PKCS#11. Похоже, что провайдер Sun PKCS#11 может это сделать, но вам нужна собственная реализация токена PKCS # 11.

Я прав? Кто-нибудь делал это раньше? Любые предложения или комментарии будут с благодарностью.

1 ответ

Во-первых, вам нужно установить поддержку PKCS #11. Это некоторый нативный код, который, вероятно, поставлялся с вашим устройством для чтения карт, предоставляющим.dll (или.so), который обеспечивает интерфейс PKCS #11. Другое программное обеспечение в системе, такое как продукты Mozilla и поставщик PKCS #11 от Sun, использует эту библиотеку. (Продукты Microsoft часто используют другой интерфейс, "CAPI".)

Затем, следуя указаниям в Справочном руководстве PKCS #11, настройте SunPKCS11 поставщик. Единственные свойства, которые я должен был указать в моей настройке, - это расположение собственной "библиотеки", которая была установлена, и суффикс "name" для этого провайдера. Свойство "name" добавляется к "SunPKCS11-", поэтому, если вы укажете "CAC" для имени, вы можете найти Provider позже с Security.getProvider("SunPKCS11-CAC"),

Затем вы можете использовать стандартные свойства системы JSSE javax.net.ssl.keyStore (со значением "NONE") а также javax.net.ssl.keyStoreType (со значением "PKCS11") предоставить JSSE доступ к ключевому материалу в CAC. Вам не нужно устанавливать свойство пароля, потому что собственный код должен запрашивать у пользователя его PIN-код, когда это необходимо.

Предостережение заключается в том, что только сертификат конечного объекта пользователя доступен из CAC. Чтобы построить доверенную цепочку, большинство серверов ожидают, что клиент отправит любые промежуточные сертификаты. Обойти это возможно, но сложно, поскольку это включает в себя реализацию вашего собственного javax.net.ssl.X509KeyManager, Если сервер, с которым вы работаете, требует полной цепочки, пожалуйста, оставьте следующий вопрос.

Другие вопросы по тегам