2012-01-05 16 views
26

Używam openssl do tworzenia samopodpisanych certyfikatów. Otrzymuję ten błąd z wygenerowanymi przeze mnie certyfikatami: javax.net.ssl.SSLHandshakeException: java.security.cert.Certificate wyjątek: brak dostępnych alternatywnych nazw podmiotowychjak dodać temat alernatywny do certyfikatów ssl?

Czy ktoś wie, jak określić "alternatywną nazwę podmiotu" podczas tworzenie certyfikatu? To jak mam generowania kluczy:

sudo $JAVA_HOME/bin/keytool -genkey -dname "CN=192.168.x.xxx, OU=I, O=I, L=T, ST=On, C=CA" -alias tomcat -validity 3650 -keyalg RSA -keystore /root/.keystore -keypass abcd -storepass abcd 

wygenerować klucz:

openssl s_client -connect 192.168.x.xxx:8443 2>/dev/null 

Proszę o pomoc! Dzięki!

+0

możliwe duplikat [? Jak są nazwy serwerów Certyfikat SSL rozwiązany/Mogę dodać alternatywne nazwy używając keytool] (http://stackoverflow.com/questions/8443081/how-are-ss-clificate-server-names-resolved-can-i-add-alternative-names-using) – Bruno

+0

@ Sapphire: Nie rozumiem twojego problemu. Alternatywna nazwa podmiotu jest "NIE" wymaganym rozszerzeniem w certyfikacie X.509. Tak więc, jeśli masz certyfikat bez niego, nie ma problemu. Jak więc uzyskać ten wyjątek? – Cratylus

+0

@ user384706 Czy możesz spojrzeć na to pytanie? Nawet jestem zdezorientowany, dlaczego rzuca ten błąd. [http://stackoverflow.com/questions/8759956/failed-to-create-service-exception-javax-xml-ws-webserviceexception/8760118#8760118] – Sapphire

Odpowiedz

37

Chociaż this question był bardziej konkretnie o adresach IP w Temacie Alt. Nazwy, polecenia są podobne (przy użyciu wpisów DNS dla nazwy hosta i wpisów IP dla adresów IP).

Cytując sobie:

Jeśli używasz keytool, od Java 7, keytool ma możliwość obejmują Subject Alternative Name (patrz tabela w dokumentacji dla -ext): można użyć -ext san = DNS: www.example.com lub -ext san = ip: 10.0.0.1

Należy pamiętać, że trzeba tylko Java 7 na keytool używać tego polecenia. Po przygotowaniu magazynu kluczy powinien on działać z poprzednimi wersjami języka Java.

(Reszta tej odpowiedzi wspomina również, jak to zrobić z OpenSSL, ale to nie wydaje się być to, czego używasz.)

+0

Nie mogę zmienić na Java7. Czy istnieje sposób na ominięcie sprawdzania nazwy podmiotu w moim kodzie Java? – Sapphire

+3

Nie unikaj tego czeku. Jak już powiedziałem, potrzebujesz tylko Java 7, aby użyć tej komendy 'keytool'. Gdy to zrobisz, powinieneś być w stanie użyć pliku JKS przy instalacji Java 6 (lub niższej) (nie musi to być nawet na tym samym komputerze). Alternatywnie, możesz użyć OpenSSL do wygenerowania tego (samopodpisanego) certyfikatu (polecenia i ustawienia mogą być nieco bardziej złożone): możesz zmienić swój klucz PEM/cert wygenerowany przez OpenSSL w plik '.p12' i użyć go bezpośrednio z Java jako magazynu kluczy przy użyciu magazynu kluczy typu "PKCS12". Możesz również użyć nazwy hosta zamiast adresu IP: możesz uciec z CN. – Bruno

+0

Użyłem nazwy hosta zamiast tego, co zasugerowałeś i otrzymałem to: Nie znaleziono nazwy pasującej do myhostname.com. – Sapphire

12

Zarówno IP i DNS może być określona z keytool dodatkowy argument "-ext SAN = dns: abc.com, ip: 1.1.1.1"

Przykład: keytool -genkeypair -keystore magazyn kluczy -nazwa "CN = test, OU = nieznany, O = nieznany, L = nieznany, ST = Nieznane, C = Nieznane "-keypass keypwd -storepass storepass -keyalg RSA -ziele nieznane -ex SAN = dns: test.abc.com, ip: 1.1.1.1

+3

Pamiętaj, że powyższe polecenie nie ** utworzy CSR. Java keytool tworzy parę kluczy w postaci samopodpisanego certyfikatu w magazynie kluczy, a atrybut SAN przechodzi do tego samopodpisanego certyfikatu. Jeśli chcesz wystawić raport CSR z atrybutem SAN, musisz przekazać ten sam argument -ext do "keytool -certreq". Zabawne jest to, że samoprzylepna pomoc keytoola nie ** obejmuje opcji -ext, chociaż keytool nie przetwarza tekstu - wszystko jest w porządku. – avarvit

+0

@avarvit oznacza to, że mogę dodać altNames do CSR, nawet jeśli nie są one używane podczas wywoływania '-genkeypair'. Co by się stało po otrzymaniu certyfikatu od CA z tym CSR? Woule keytool zaimportuje go i poda poprawny klucz prywatny? Czy jest to możliwe, aby dodać altName do certyfikatów, które go przegapiły? – eppesuig

+0

Dziękujemy za dodanie pełnego przykładu – Tom

3

Podczas generowania CSR można określić -ext atrybut ponownie się ona włożona do CSR

keytool -certreq -file test.csr -keystore test.jks -alias testAlias -ext SAN=dns:test.example.com 

kompletnego przykład tutaj: How to create CSR with SANs using keytool

Powiązane problemy