Во-первых, вам нужно установить поддержку 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