Как подключиться к серверу HTTPS с помощью карты общего доступа

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

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

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


person Community    schedule 15.04.2009    source источник
comment
взгляните на stackoverflow.com /questions/544056/ это может дать вам некоторые подсказки.   -  person    schedule 12.02.2010


Ответы (1)


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

Затем следуйте инструкциям в Справочном руководстве по PKCS #11. , настроить поставщика SunPKCS11. Единственные свойства, которые я должен был указать в своей настройке, — это расположение встроенной «библиотеки», которая была установлена, и суффикс «имя» для этого поставщика. Свойство «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. Если для сервера, с которым вы работаете, требуется полная цепочка, задайте дополнительный вопрос.

person erickson    schedule 15.04.2009