Jak zaimportować certyfikat. cer do keystore java?

Podczas tworzenia klienta Java webservice napotkałem problem. Uwierzytelnianie usługi webservice polega na użyciu certyfikatu klienta, nazwy użytkownika i hasła. Certyfikat klienta, który otrzymałem od firmy za webservice jest w formacie .cer. Gdy sprawdzam plik za pomocą edytora tekstowego, 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 wpisywania hasła!) i używać go do uwierzytelniania z webservice.

Udało mi się zaimportować ten certyfikat do keystore, najpierw usuwając pierwszą i ostatnią linię, konwertując na nowe linie Uniksa i uruchamiając base64-decode. Plik wynikowy można zaimportować do magazynu kluczy (za pomocą polecenia keytool). Gdy wyświetlam wpisy w keystore, wpis ten jest typu trustedCertEntry. Ze względu na ten typ wpisu (?) Nie mogę użyć tego certyfikatu do uwierzytelnienia za pomocą webservice. Zaczynam myśleć, że dostarczony certyfikat jest publicznym certyfikat używany do uwierzytelniania...

Obejście, które znalazłem, polega na zaimportowaniu certyfikatu w IE i wyeksportowaniu go jako pliku .pfx. Ten plik może być załadowany jako keystore i może być używany do uwierzytelniania za pomocą usługi webservice. Nie mogę jednak oczekiwać, że moi klienci wykonają te kroki za każdym razem, gdy otrzymają nowy certyfikat. Chciałbym więc załadować plik .cer bezpośrednio do Javy. Jakieś pomysły?

Dodatkowe informacje: firma stojąca za webservice powiedziała mi, że certyfikat powinien być wymagany (za pomocą IE i strony internetowej) od komputera i użytkownika, który importuje certyfikat później.

Author: Steven Vascellaro, 2010-12-01

8 answers

  • jeśli chcesz uwierzytelnić, potrzebujesz klucza prywatnego. Nie ma innego wyjścia.
  • certyfikat jest kluczem publicznym z dodatkowymi właściwościami (np. nazwa firmy, kraj,...), który jest podpisany przez jakiś organ certyfikujący, który gwarantuje, że załączone właściwości są prawdziwe.
  • .Pliki CER są certyfikatami i nie mają klucza prywatnego. Klucz prywatny jest dostarczany z ... Plik KEYSTORE PFX normalnie. Jeśli naprawdę uwierzytelniasz to dlatego, że już zaimportowałeś prywatny klucz.
  • Normalnie można importować .Certyfikaty CER bez żadnych problemów z

    keytool -importcert -file certificate.cer -keystore keystore.jks -alias "Alias"
    
 238
Author: lujop,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-21 11:56:56

Importowanie pliku certyfikatu .cer pobranego z przeglądarki (otwórz adres url i wykop po szczegóły) do cacerts keystore w java_home\jre\lib\security zadziałało dla mnie, w przeciwieństwie do prób generowania i używania własnego keystore.

  1. idź do swojego java_home\jre\lib\security
  2. (Windows ) Otwórz tam wiersz poleceń administratora używając cmd i CTRL+SHIFT+ENTER
  3. Uruchom keytool, aby zaimportować certyfikat:
    • (Zastąp yourAliasName i path\to\certificate.cer odpowiednio)

 ..\..\bin\keytool -import -trustcacerts -keystore cacerts -storepass changeit -noprompt -alias yourAliasName -file path\to\certificate.cer

W ten sposób nie musisz podawać żadnych dodatkowych opcji JVM, a certyfikat powinien być rozpoznawany przez JRE.

 49
Author: jediz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-06 16:46:27

Oto kod, którego używałem do programowego importowania .cer pliki do nowego KeyStore.

import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStream;
//VERY IMPORTANT.  SOME OF THESE EXIST IN MORE THAN ONE PACKAGE!
import java.security.GeneralSecurityException;
import java.security.KeyStore;
import java.security.cert.Certificate;
import java.security.cert.CertificateFactory;

//Put everything after here in your function.
KeyStore trustStore  = KeyStore.getInstance(KeyStore.getDefaultType());
trustStore.load(null);//Make an empty store
InputStream fis = /* insert your file path here */;
BufferedInputStream bis = new BufferedInputStream(fis);

CertificateFactory cf = CertificateFactory.getInstance("X.509");

while (bis.available() > 0) {
    Certificate cert = cf.generateCertificate(bis);
    trustStore.setCertificateEntry("fiddler"+bis.available(), cert);
}
 42
Author: Patrick M,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-17 05:49:15

Nie należy wprowadzać żadnych zmian w certyfikacie. Czy na pewno uruchamiasz odpowiednie polecenie importu?

Dla mnie działa:

keytool -import -alias joe -file mycert.cer -keystore mycerts -storepass changeit

Gdzie mycert.cer zawiera:

-----BEGIN CERTIFICATE-----
MIIFUTCCBDmgAwIBAgIHK4FgDiVqczANBgkqhkiG9w0BAQUFADCByjELMAkGA1UE
BhMCVVMxEDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAY
...
RLJKd+SjxhLMD2pznKxC/Ztkkcoxaw9u0zVPOPrUtsE/X68Vmv6AEHJ+lWnUaWlf
zLpfMEvelFPYH4NT9mV5wuQ1Pgurf/ydBhPizc0uOCvd6UddJS5rPfVWnuFkgQOk
WmD+yvuojwsL38LPbtrC8SZgPKT3grnLwKu18nm3UN2isuciKPF2spNEFnmCUWDc
MMicbud3twMSO6Zbm3lx6CToNFzP
-----END CERTIFICATE-----
 16
Author: dogbane,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-12-01 14:53:51

Certyfikat, który już posiadasz, jest prawdopodobnie certyfikatem serwera lub certyfikatem używanym do podpisania certyfikatu serwera. Będziesz go potrzebował, aby klient usługi internetowej mógł uwierzytelnić serwer.

Ale jeśli dodatkowo musisz wykonać uwierzytelnianie klienta za pomocą SSL, musisz uzyskać własny certyfikat, aby uwierzytelnić klienta usługi internetowej. W tym celu należy utworzyć żądanie certyfikatu; proces polega na stworzeniu własnego klucza prywatnego, a odpowiedni klucz publiczny i dołączenie tego klucza publicznego wraz z niektórymi informacjami (e-mail, nazwa, nazwa domeny itp.) do pliku o nazwie żądanie certyfikatu. Następnie wyślesz żądanie certyfikatu do firmy, która już Cię o to poprosiła, a ona utworzy twój certyfikat, podpisując Twój klucz publiczny swoim kluczem prywatnym, a oni odeślą Ci plik X509 z Twoim certyfikatem, który możesz teraz dodać do magazynu keystore, a Ty będziesz gotowy do połączenia się z usługą internetową za pomocą SSL wymagający uwierzytelniania klienta.

Aby wygenerować żądanie certyfikatu, użyj "keytool-certreq-alias-file-keypass-keystore". Wyślij plik wynikowy do firmy, która go podpisze.

Kiedy odzyskasz certyfikat, Uruchom "keytool-importcert-alias-keypass-keystore".

Może być konieczne użycie -storepass w obu przypadkach, jeśli keystore jest chroniony (co jest dobrym pomysłem).

 6
Author: Chochos,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-12-01 16:21:40

Open source GUI narzędzie jest dostępne na keystore-explorer.org

Keystore Explorer

Keystore Explorer jest open source ' owym zamiennikiem GUI dla Javy narzędzia wiersza poleceń keytool i jarsigner. Keystore Explorer prezentuje ich funkcjonalność i nie tylko dzięki intuicyjnej grafice interfejs użytkownika.

Następujące ekrany pomogą (są z oficjalnej strony)

Domyślny ekran, który otrzymujesz uruchamiając polecenie:

shantha@shantha:~$./Downloads/kse-521/kse.sh

Tutaj wpisz opis obrazka

I przejdź do opcji Examine i Examine a URL, a następnie podaj adres internetowy, który chcesz zaimportować.

Okno wyników będzie jak poniżej, jeśli podasz link do strony google. Tutaj wpisz opis obrazka

Jest to jeden z przypadków użycia, a reszta zależy od użytkownika (wszystkie kredyty idą do keystore-explorer.org )

 5
Author: Shantha Kumara,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-27 06:50:32

Oto skrypt, którego użyłem do importowania wsadowego kilku plików crt w bieżącym katalogu do klucza java. Po prostu zapisz to w tym samym folderze co certyfikat i uruchom go w ten sposób:

./import_all_certs.sh

Import_all_certs.sh

KEYSTORE="$(/usr/libexec/java_home)/jre/lib/security/cacerts";

function running_as_root()
{
  if [ "$EUID" -ne 0 ]
    then echo "NO"
    exit
  fi

  echo "YES"
}

function import_certs_to_java_keystore
{
  for crt in *.crt; do 
    echo prepping $crt 
    keytool -import -file $crt -storepass changeit -noprompt --alias alias__${crt} -keystore $KEYSTORE
    echo 
  done
}

if [ "$(running_as_root)" == "YES" ]
then
  import_certs_to_java_keystore
else
  echo "This script needs to be run as root!"
fi
 3
Author: Brad Parks,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-02 19:01:34

Oto jak to działa dla mnie:

  1. Zapisz jako .txt dane certyfikatu w następującym formacie w edytorze tekstu

    -----CERTYFIKAT BEGIN----- [dane serializowane przez microsoft] ----- CERTYFIKAT KOŃCOWY - - - - -

  2. Otwórz przeglądarkę chrome (ten krok może działać również w innych przeglądarkach) Ustawienia > Pokaż ustawienia zaawansowane > HTTPS / SSL > Zarządzaj certyfikatami Importuj .txt w kroku 1
  3. Wybierz i wyeksportuj ten certyfikat w zakodowanym formacie Base-64. Save it as .cer
  4. Teraz możesz użyć keytool lub Portecle, aby zaimportować go do keystore java
 2
Author: code4kix,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-25 19:40:23