2009-04-15 6 views
8

Potrzebuję napisać program java, aby połączyć się z serwerem HTTPS (witryna DoD). Strona wymaga uwierzytelnienia CAC (DoD common access card). Jeśli uzyskujesz dostęp do tej witryny za pomocą przeglądarki, wstaw najpierw swój CAC, a następnie wprowadź kod PIN.Jak połączyć się z serwerem HTTPS przy użyciu wspólnej karty dostępu

Potrzebuję wykonać proces uwierzytelniania programowo w java (rodzaj zachowywania się jak przeglądarka). Jak mogę pobrać informacje z CAC? Przeglądam go i czytam przewodnik referencyjny Java PKCS nr 11. Wygląda na to, że Sun Sun może to zrobić, ale potrzebna jest natywna implementacja tokena PKCS # 11.

Mam rację? Czy ktoś wcześniej to zrobił? Wszelkie sugestie i komentarze zostaną bardzo docenione.

+0

spójrz na http://stackoverflow.com/questions/544056/common-access-card-cac-authentication-using-java może dać ci kilka wskazówek. –

Odpowiedz

3

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.

Powiązane problemy