Mam to w konfiguracji ActiveMQ:
<sslContext>
<sslContext keyStore="file:/home/alex/work/amq/broker.ks"
keyStorePassword="password" trustStore="file:${activemq.base}/conf/broker.ts"
trustStorePassword="password"/>
</sslContext>
Mam parę certyfikatu X.509 i plik klucza.
Jak zaimportować te dwa, aby użyć ich w złączach SSL i SSL + stomp? Wszystkie przykłady, w których mógłbym google, zawsze generują klucz samodzielnie, ale mam już klucz.
próbowałem
keytool -import -keystore ./broker.ks -file mycert.crt
ale to tylko importuje certyfikat, a nie plik klucza i powoduje
2009-05-25 13:16:24,270 [localhost:61612] ERROR TransportConnector - Could not accept connection : No available certificate or key corresponds to the SSL cipher suites which are enabled.
Próbowałem połączyć certyfikat i klucz, ale uzyskałem ten sam wynik.
Jak zaimportować klucz?
Odpowiedzi:
Wierz lub nie, keytool nie zapewnia tak podstawowych funkcji, jak importowanie klucza prywatnego do magazynu kluczy. Możesz wypróbować to obejście, łącząc plik PKSC12 z kluczem prywatnym w magazynie kluczy.
Lub po prostu użyj bardziej przyjaznego dla użytkownika KeyMan firmy IBM do obsługi magazynu kluczy zamiast keytool.exe.
źródło
Zastosowałem następujące dwa kroki, które znalazłem w komentarzach / postach połączonych w innych odpowiedziach:
Krok pierwszy: Przekształć certyfikat i klucz x.509 w plik pkcs12
Uwaga: upewnij się, że umieściłeś hasło w pliku pkcs12 - w przeciwnym razie otrzymasz wyjątek wskaźnika zerowego podczas próby jego zaimportowania. (W przypadku, gdy ktoś inny miał ten ból głowy). ( Dzięki jocull! )
Uwaga 2: Możesz dodać
-chain
opcję zachowania pełnego łańcucha certyfikatów. ( Dzięki Mafuba )Krok drugi: Konwertuj plik pkcs12 na magazyn kluczy Java
Skończone
OPCJONALNIE Krok zero: Utwórz samopodpisany certyfikat
Twoje zdrowie!
źródło
-CAfile ca.crt -caname root
nie wyświetlała poprawnie certyfikatów CA. Zamiast tego użyłem-certfile concatenedCAFiles.pem
-chain
argumentu z openssl, aby dołączyć pełny łańcuch certyfikatów do pliku pfx / p12, jeśli chcesz to w magazynie kluczy.pvk2pfx
(standardowe narzędzie VS dostępne wcmd
wierszu VS ).pfx
wypluje - równoważne z.p12
. Porada @ jocull jest nadal aktualna; umieść na nim hasło. Nieopenssl
potrzebne.p12
klucz będzie miał hasło do oryginalnego.p12.
Tomcatjava.security.UnrecoverableKeyException: Cannot recover key
. Innymi słowy: jeśli chcesz wykonać-deststorepass changeit -srcstorepass some-password
przy użyciu różnych haseł, musisz dołączyć-destkeypass changeit
(z takim samym hasłem jak-deststorepass
)Keytool w Javie 6 ma tę funkcję: funkcję Importowanie kluczy prywatnych do magazynu kluczy Java za pomocą keytool
Oto podstawowe informacje z tego postu.
Konwertuj istniejący certyfikat na PKCS12 za pomocą OpenSSL. Hasło jest wymagane, gdy zostaniesz o to poproszony, w przeciwnym razie będzie można złożyć skargę.
Konwertuj PKCS12 na plik Java Keystore.
źródło
I jeszcze jeden:
źródło
Najpierw przekonwertuj na p12:
Utwórz nowy JKS z p12:
źródło
Tak, to naprawdę smutny fakt, że keytool nie ma funkcji importowania klucza prywatnego.
Dla przypomnienia, na koniec poszedłem z rozwiązaniem opisanym tutaj
źródło
W moim przypadku miałem plik pem, który zawierał dwa certyfikaty i zaszyfrowany klucz prywatny do użycia we wzajemnym uwierzytelnianiu SSL. Mój plik pem wyglądał tak:
Oto co zrobiłem:
Podziel plik na trzy osobne pliki, tak aby każdy zawierał tylko jeden wpis, zaczynając od „--- BEGIN ..” i kończąc na wierszach „--- END ..”. Załóżmy, że mamy teraz trzy pliki: cert1.pem cert2.pem i pkey.pem
Konwertuj pkey.pem do formatu DER za pomocą openssl i następującej składni:
openssl pkcs8 -topk8 -nocrypt -in pkey.pem -inform PEM -out pkey.der -outform DER
Pamiętaj, że jeśli klucz prywatny jest zaszyfrowany, musisz podać hasło (uzyskać od dostawcy oryginalnego pliku pem), aby przekonwertować go na format DER, openssl poprosi o podanie hasła w następujący sposób: „wprowadź frazę klucza dla klucza .pem: „Jeśli konwersja się powiedzie, otrzymasz nowy plik o nazwie„ pkey.der ”
Utwórz nowy magazyn kluczy Java i zaimportuj klucz prywatny i certyfikaty:
(opcjonalnie) Sprawdź zawartość nowego magazynu kluczy:
keytool -list -keystore mykeystore -storepass password
(opcjonalnie) Przetestuj swoje certyfikaty i klucz prywatny z nowego magazynu kluczy na serwerze SSL: (Możesz włączyć debugowanie jako opcję maszyny wirtualnej: -Djavax.net.debug = wszystko)
Na koniec zarejestruj swoje certyfikaty w HttpsURLConnection, jeśli planujesz ich użyć:
źródło
HttpsURLConnection
zamiast próbować pisać własny. (Inny problem ze swoim przykładzie, że używasz tego samego magazynu kluczy jako kluczy i truststore, co nie zawsze jest dobrym pomysłem ...)Korzystanie z certyfikatów Let's Encrypt
Zakładając, że utworzyłeś swoje certyfikaty i klucze prywatne za pomocą Let's Encrypt in
/etc/letsencrypt/live/you.com
:1. Utwórz PKCS # 12 plik
Łączy to certyfikat SSL
fullchain.pem
i klucz prywatnyprivkey.pem
w jednym pliku,pkcs.p12
.Zostaniesz poproszony o podanie hasła do
pkcs.p12
.Ta
export
opcja określa, że plik PKCS # 12 zostanie utworzony, a nie parsowany (z instrukcji) ).2. Utwórz magazyn kluczy Java
Jeśli
keystore.jks
nie istnieje, zostanie utworzony zawierającypkcs.12
plik utworzony powyżej. W przeciwnym razie zaimportujeszpkcs.12
do istniejącego magazynu kluczy.Te instrukcje pochodzą z tego postu na blogu .
Oto więcej na temat różnych rodzajów plików w
/etc/letsencrypt/live/you.com/
.źródło
W oparciu o powyższe odpowiedzi, oto jak stworzyć zupełnie nowy magazyn kluczy dla twojego serwera WWW z Javą, z niezależnie utworzonego certyfikatu Comodo i klucza prywatnego za pomocą keytool (wymaga JDK 1.6+)
Wydaj to polecenie i po wyświetleniu monitu o hasło wpisz gdzieś - „server.crt” to certyfikat twojego serwera, a „server.key” to klucz prywatny, którego użyłeś do wydania CSR:
openssl pkcs12 -export -in server.crt -inkey server.key -out server.p12 -name www.yourdomain.com -CAfile AddTrustExternalCARoot.crt -caname "AddTrust External CA Root"
Następnie użyj keytool, aby przekonwertować magazyn kluczy p12 na magazyn kluczy jks:
keytool -importkeystore -deststorepass somepass -destkeypass somepass -destkeystore keystore.jks -srckeystore server.p12 -srcstoretype PKCS12 -srcstorepass somepass
Następnie zaimportuj pozostałe dwa certyfikaty root / pośrednie otrzymane od Comodo:
Importuj COMODORSAAddTrustCA.crt:
keytool -import -trustcacerts -alias cert1 -file COMODORSAAddTrustCA.crt -keystore keystore.jks
Importuj COMODORSADomainValidationSecureServerCA.crt:
keytool -import -trustcacerts -alias cert2 -file COMODORSADomainValidationSecureServerCA.crt -keystore keystore.jks
źródło
Możesz wykonać te czynności, aby zaimportować klucz do istniejącego magazynu kluczy. Instrukcje są łączone z odpowiedziami w tym wątku i innych witrynach. Te instrukcje działały dla mnie (magazyn kluczy Java):
openssl pkcs12 -export -in yourserver.crt -inkey yourkey.key -out server.p12 -name somename -certfile yourca.crt -caname root
(W razie potrzeby wstaw opcję -chain. Nie udało mi się wstawić). Spowoduje to podanie hasła - musisz podać prawidłowe hasło, w przeciwnym razie pojawi się błąd (błąd nagłówka lub błąd wypełnienia itp.).
*.jks
uruchomienia pliku:keytool -importkeystore -srckeystore server.p12 -srcstoretype PKCS12 -destkeystore yourexistingjavakeystore.jks -deststoretype JKS -deststorepass existingjavastorepassword -destkeypass existingjavastorepassword
(Bardzo ważne - nie pomijaj parametrów deststorepass i destkeypass).
źródło
Poprzednie odpowiedzi poprawnie wskazują, że można to zrobić tylko za pomocą standardowych narzędzi JDK, konwertując najpierw plik JKS do formatu PKCS # 12. Jeśli jesteś zainteresowany, stworzyłem kompaktowe narzędzie do importowania kluczy pochodzących z OpenSSL do pliku kluczy w formacie JKS bez konieczności wcześniejszej konwersji pliku kluczy do PKCS # 12: http://commandlinefanatic.com/cgi-bin/showarticle. cgi? article = art049
Użyłbyś takiego narzędzia połączonego:
(podpisz CSR, odzyskaj localhost.cer)
źródło
Jeśli masz plik PEM (np.
server.pem
) Zawierający:następnie możesz zaimportować certyfikat i klucz do magazynu kluczy JKS w następujący sposób:
1 ) Skopiuj klucz prywatny z pliku PEM do pliku ascii (np
server.key
)2 ) Skopiuj certyfikat z pliku PEM do pliku ascii (np
server.crt
)3 ) Wyeksportuj certyfikat i klucz do pliku PKCS12:
-CAfile
opcji .winpty
na początku polecenia, aby można było wprowadzić hasło eksportu.4 ) Konwertuj plik PKCS12 do magazynu kluczy JKS:
srcstorepass
hasło powinno pasować do hasła eksportu z kroku 3)źródło
To, co próbowałem osiągnąć, to użycie już dostarczonego klucza prywatnego i certyfikatu do podpisania wiadomości, która szła w miejsce, które musiało mieć pewność, że wiadomość pochodzi ode mnie (klucze prywatne podpisują się podczas szyfrowania kluczy publicznych).
Więc jeśli masz już plik .key i plik .crt?
Spróbuj tego:
Krok 1: Konwertuj klucz i certyfikat na plik .p12
Krok 2: Zaimportuj klucz i utwórz plik .jsk za pomocą jednego polecenia
Krok 3: W Twojej Javie:
Jeśli musisz podpisać jakiś ciąg za pomocą tego klucza, wykonaj następujące czynności:
Krok 1: Konwertuj tekst, który chcesz zaszyfrować
Krok 2: Uzyskaj klucz prywatny zakodowany w standardzie base64
Bibliografia:
Ostateczny program
źródło
Wystarczy utworzyć plik kluczy PKCS12, Java może teraz używać go bezpośrednio. W rzeczywistości, jeśli wymienisz magazyn kluczy w stylu Java, to samo narzędzie keytool ostrzega o tym, że PKCS12 jest teraz preferowanym formatem.
Powinieneś otrzymać wszystkie trzy pliki (server.crt, server.key, ca.crt) od swojego dostawcy certyfikatu. Nie jestem pewien, co tak naprawdę oznacza „-caname root”, ale wydaje się, że trzeba to określić w ten sposób.
W kodzie Java upewnij się, że podałeś właściwy typ magazynu kluczy.
W ten sposób mój certyfikat SSL wydany przez comodo.com działa dobrze w NanoHTTPD.
źródło
w przypadku Elliptic Curve i odpowiedz na pytanie importuj istniejący certyfikat x509 i klucz prywatny z magazynu kluczy Java , możesz zajrzeć również do tego wątku Jak czytać klucz prywatny EC w Javie w formacie pliku .pem
źródło