Podczas opracowywania klienta Java Webservice napotkałem problem. Uwierzytelnianie dla usługi internetowej polega na użyciu certyfikatu klienta, nazwy użytkownika i hasła. Certyfikat klienta, który otrzymałem od firmy za usługą internetową, ma .cer
format. Kiedy sprawdzam plik za pomocą edytora tekstu, ma on następującą zawartość:
-----BEGIN CERTIFICATE-----
[Some base64 encoded data]
-----END CERTIFICATE-----
Mogę zaimportować ten plik jako certyfikat w Internet Explorerze (bez konieczności podawania hasła!) I użyć go do uwierzytelnienia w usłudze internetowej.
Byłem w stanie zaimportować ten certyfikat do magazynu kluczy, najpierw usuwając pierwszą i ostatnią linię, konwertując na nowe znaki unix i uruchamiając dekodowanie base64. Plik wynikowy można zaimportować do magazynu kluczy (za pomocą keytool
polecenia). Gdy wymieniam wpisy w magazynie kluczy, ten wpis jest tego typu trustedCertEntry
. Z powodu tego typu wpisu (?) Nie mogę użyć tego certyfikatu do uwierzytelnienia w usłudze sieciowej. Zaczynam myśleć, że podany certyfikat jest certyfikatem publicznym używanym do uwierzytelniania ...
Rozwiązaniem, które znalazłem, jest zaimportowanie certyfikatu do IE i wyeksportowanie go jako .pfx
pliku. Ten plik można załadować jako plik kluczy i można go użyć do uwierzytelnienia w usłudze sieciowej. Nie mogę jednak oczekiwać, że moi klienci wykonają te kroki za każdym razem, gdy otrzymają nowy certyfikat. Chciałbym więc załadować .cer
plik bezpośrednio do Java. jakieś pomysły?
Informacje dodatkowe: firma odpowiedzialna za serwis internetowy powiedziała mi, że należy zażądać certyfikatu (przy użyciu IE i strony internetowej) z komputera i użytkownika, który zaimportuje certyfikat później.
źródło
Importowanie
.cer
pliku certyfikatu pobranego z przeglądarki (otwórz adres URL i wyszukaj szczegóły) do magazynu kluczy cacerts wjava_home\jre\lib\security
mnie działało, w przeciwieństwie do prób generowania i używania własnego magazynu kluczy.java_home\jre\lib\security
cmd
i CTRL+ SHIFT+ENTERyourAliasName
ipath\to\certificate.cer
odpowiednio)W ten sposób nie musisz określać żadnych dodatkowych opcji JVM, a certyfikat powinien być rozpoznawany przez środowisko JRE.
źródło
java_home\jdk_x.xx\jre\lib\security
Dla ścieżki bezwzględnej użyj ukośnika odwrotnego, np."C:\myCert.crt"
Znaki cudzysłowu są opcjonalne, jeśli ścieżka nie zawiera białych znaków.Oto kod, którego używałem do programowego importowania plików .cer do nowego magazynu kluczy.
źródło
Nie powinieneś wprowadzać żadnych zmian w certyfikacie. Czy na pewno używasz właściwego polecenia importu?
Poniższe działa dla mnie:
gdzie mycert.cer zawiera:
źródło
Narzędzie GUI typu open source jest dostępne na keystore-explorer.org
Pomogą Ci następujące ekrany (pochodzą z oficjalnej strony)
Domyślny ekran wyświetlany po uruchomieniu polecenia:
Idź do
Examine
iExamine a URL
opcję, a następnie podaj adres URL, który chcesz zaimportować.Okno wyników będzie wyglądać jak poniżej, jeśli podasz link do witryny Google.
Jest to jeden z przypadków użycia, a reszta należy do użytkownika (wszystkie kredyty trafiają do keystore-explorer.org )
źródło
Certyfikat, który już masz, jest prawdopodobnie certyfikatem serwera lub certyfikatem używanym do podpisywania certyfikatu serwera. Będziesz go potrzebował, aby Twój klient usługi WWW mógł uwierzytelnić serwer.
Ale jeśli dodatkowo musisz przeprowadzić uwierzytelnianie klienta za pomocą protokołu SSL, musisz uzyskać własny certyfikat, aby uwierzytelnić klienta usługi WWW. W tym celu musisz utworzyć żądanie certyfikatu; proces ten obejmuje utworzenie własnego klucza prywatnego i odpowiedniego klucza publicznego oraz dołączenie tego klucza publicznego wraz z niektórymi informacjami (e-mail, nazwa, nazwa domeny itp.) do pliku zwanego żądaniem certyfikatu. Następnie wysyłasz tę prośbę o certyfikat do firmy, która już o to poprosiła, a ona utworzy Twój certyfikat, podpisując Twój klucz publiczny za pomocą swojego klucza prywatnego, i odeśle Ci plik X509 z Twoim certyfikatem, który możesz teraz dodaj do swojego magazynu kluczy, a będziesz gotowy do połączenia z usługą internetową za pomocą protokołu SSL wymagającego uwierzytelnienia klienta.
Aby wygenerować żądanie certyfikatu, użyj „keytool -certreq -alias -file -keypass -keystore”. Wyślij wynikowy plik do firmy, która zamierza go podpisać.
Po odzyskaniu certyfikatu uruchom polecenie „keytool -importcert -alias -keypass -keystore”.
Może być konieczne użycie -storepass w obu przypadkach, jeśli magazyn kluczy jest chroniony (co jest dobrym pomysłem).
źródło
Oto skrypt, którego użyłem do wsadowego zaimportowania kilku plików CRT z bieżącego katalogu do magazynu kluczy Java. Po prostu zapisz to w tym samym folderze co twój certyfikat i uruchom go w następujący sposób:
import_all_certs.sh
źródło
Oto jak to dla mnie działało:
źródło