Najpierw należy zainstalować obsługę PKCS # 11. Jest to kod natywny, który prawdopodobnie pojawił się wraz z czytnikiem kart, który zapewnia .dll (lub .so), który zapewnia interfejs PKCS # 11. Inne oprogramowanie w systemie, takie jak produkty Mozilli i operator Sun's PKCS # 11, korzysta z tej biblioteki. (Produkty Microsoft często używają innego interfejsu, "CAPI".)
Następnie, postępując zgodnie ze wskazówkami w PKCS #11 Reference Guide,, skonfiguruj dostawcę SunPKCS11
. Jedyne właściwości, które musiałem dostarczyć w mojej konfiguracji, to lokalizacja natywnej "biblioteki", która została zainstalowana, oraz sufiks "nazwa" tego dostawcy. Właściwość "nazwa" jest dołączana do "SunPKCS11-", więc jeśli podasz nazwę "CAC", możesz wyszukać Provider
później za pomocą Security.getProvider("SunPKCS11-CAC")
.
Następnie można użyć standardowych właściwości systemu JSSE javax.net.ssl.keyStore
(o wartości "NONE"
) i javax.net.ssl.keyStoreType
(o wartości "PKCS11"
) z uzyskaniem dostępu do materiałów JSSE klawisz na CAC. Nie musisz ustawiać właściwości hasła, ponieważ kod natywny powinien monitować użytkownika o podanie kodu PIN w razie potrzeby.
Ograniczeniem jest to, że tylko certyfikat "podmiot końcowy" użytkownika jest dostępny w CAC. Aby zbudować zaufany łańcuch, większość serwerów oczekuje od klienta wysyłania pośrednich certyfikatów. Obejście tego jest możliwe, ale skomplikowane, ponieważ wymaga implementacji własnego javax.net.ssl.X509KeyManager
. Jeśli serwer, z którym współpracujesz, wymaga kompletnego łańcucha, opublikuj kolejne pytanie.
spójrz na http://stackoverflow.com/questions/544056/common-access-card-cac-authentication-using-java może dać ci kilka wskazówek. –