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

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

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

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

1 Ответ

4 голосов
/ 15 апреля 2009

Во-первых, вам нужно установить поддержку 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. Если сервер, с которым вы работаете, требует полной цепочки, пожалуйста, оставьте следующий вопрос.

...