Nie można wygenerować certyfikatu z alternatywną nazwą podmiotu za pomocą narzędzia keytool Java 1.7

13

Mam problem z generowaniem pary kluczy o alternatywnej nazwie podmiotu za pomocą keytoolnarzędzia Java z Java 1.7. Staram się postępować zgodnie z instrukcjami tutaj .

Oto przykład polecenia, którego używam (ten przykład został przetestowany):

keytool -keystore c:\temp\keystore.jks -storepass changeme -keypass changeme -alias spam -genkeypair -keysize 2048 -keyalg RSA -dname "CN=spam.example.com, OU=Spam NA, O=Spam Inc, L=Anywhere, S=State, C=US" -ext san=dns:spam,ip:192.168.0.1

Następnie generuję CSR za pomocą następującego polecenia:

keytool -keystore c:\temp\keystore.jks -storepass changeme -alias spam -certreq -file c:\temp\spam.csr

Co generuje następujące żądanie certyfikatu:

-----BEGIN NEW CERTIFICATE REQUEST-----
MIIC5TCCAc0CAQAwcDELMAkGA1UEBhMCVVMxDjAMBgNVBAgTBVN0YXRlMREwDwYDVQQHEwhBbnl3
aGVyZTERMA8GA1UEChMIU3BhbSBJbmMxEDAOBgNVBAsTB1NwYW0gTkExGTAXBgNVBAMTEHNwYW0u
ZXhhbXBsZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCExCFepag4KH+j8xgR
BjI58hOEiFuSrkgbL5/1steru3+FwDb98R8XO90kKreq/Qt7s/oHbTpFOwotdkGVxA2x44/R5OYr
Qdfk3v32ypJTxms/8tu0Zi9wbH2ruA/h5AhtZ9TV/xLPFSe5eFvN0pUl90p+9zfd0ZCmPQ69k3Lb
JWlw7eIs7sD1yRqlYZL+HJWrsdtYTHjpqEURcZ5jN0H2YeM/eBWZr7eMKrT4xGRwotFj9AfHCiUj
HH4XTJgkrbBtw96pkPYMj/C7TfUE/slCxafEBIkVKlkHLBb9ra3PVfW/QoDGsf2FjtNKOKFxyy7p
A3A5ufdvrCVZ5EKWGrbbAgMBAAGgMDAuBgkqhkiG9w0BCQ4xITAfMB0GA1UdDgQWBBS1GytnaPx2
SAZCyto2BKh7Yw7bgTANBgkqhkiG9w0BAQsFAAOCAQEAIiwY6RIIJkgUQsdK2XiLJDhBnoxfsKjQ
zkWdZjETNxdD9LSng4AZroKjl05NRdjVkew5QM/gNt8s4jcI8OE0EOaZz6ZmlHK39bPtifJ9xlhy
0Q2Q5VAZ6mUB3BU4QF17MLmtEuI+FsG+S7ZKTK+j1Mcn8E+XvS5EbA0NJJkiIhfikr7nUEgB+qUU
CW0vM53FhVPO/piphNUuE60lMlomnDnCHW9xevAolb3rVCvqTdZ2q3G6BNFG07YEL/jaKKIctrnN
W6W4aGb6ppdXXExkx6EIj7hleoSxZHDVjxiIb3U16WFObtwCpTe9ygHcZtZswRkTzwJZLHipCkcQ
GY3lwA==
-----END NEW CERTIFICATE REQUEST-----

Kiedy badam CSR za pomocą dekodera CSR w SSL Shopper , nie pokazuje, że zawiera on określoną SAN. Ten certyfikat jest przeznaczony do użytku wewnętrznego w naszym środowisku, a sieć SAN jest wymagana, ponieważ użytkownicy mogą uzyskiwać dostęp do witryny przy użyciu nazwy FQDN, tylko nazwy serwera lub adresu IP.

Ja nadal rozwiązywać, ale nie jestem , że doświadczenie z CERT, więc jestem ze stratą, a większość innych ludzi w naszym otoczeniu nie są używane keytooldo generowania swoich certyfikatów.

Myśli? Alternatywy? Z pewnością jestem gotów użyć innej metody do wygenerowania klucza i CSR, o ile w pewnym momencie mogę go zaimportować do magazynu kluczy Java.

Doug R.
źródło
„CN = spam.example.com” - umieszczenie nazwy DNS w CN jest nieaktualne zarówno przez IETF, jak i fora CA / Browser. Zamiast tego wpisz przyjazną nazwę w CN, np. „Spam Inc”. Umieść wszystkie nazwy DNS w sieci SAN.

Odpowiedzi:

13

Musisz także przekazać -extflagę do drugiego polecenia:

$ keytool -keystore keystore.jks -storepass changeme -alias spam -certreq -ext san=dns:spam,ip:192.168.0.1 -file spam.csr

Następnie certyfikat zawiera nazwę alt:

$ openssl x509 -noout -text -in spam.csr | grep -A2 "Requested Extensions"
        Requested Extensions:
            X509v3 Subject Alternative Name:
                DNS:spam, IP Address:192.168.0.1
dawud
źródło
1
Dziękuję Ci. Właśnie logowałem się, żeby napisać, że zorientowałem się tego z dnia na dzień (z małą pomocą kogoś lokalnego). Chciałbym zrozumieć, dlaczego tak jest, ponieważ keytooldokumenty nie wydają się mówić (przynajmniej mi), że jest to wymagane. Ale przynajmniej jest to odpowiedź, z którą mogę żyć i wiem, że zupełnie nie oszaleję. Dzięki.
Doug R.