Bu çalışmanın nasıl sağlanacağına dair örnekler veren birkaç büyük cevap var, ancak denemenizde işlerin nerelerde yanlış gittiğini açıklayan hiçbiri yok. OpenSSL bazı zamanlar sezgisel olmayabilir, bu yüzden yürümeye değer.
İlk olarak, bir kenara, OpenSSL varsayılan olarak config içinde sağladığınız herhangi bir ayırt edici ad değerini dikkate almaz. Onları kullanmak istiyorsanız prompt = no
, config ekleyin . Ek olarak, yazıldığı gibi bir komut yalnızca bir sertifikanın kendisini değil bir sertifika isteğini oluşturur
, bu nedenle -days
komut hiçbir şey yapmaz.
Sertifika isteğinizi, verdiğiniz bu komutu kullanarak oluşturup sonucu denetlerseniz, Konu Alt Adı bulunur:
$ openssl req -new -key server.key -out server.csr -config config.cnf -sha256
$ openssl req -text -noout -in server.csr
Certificate Request:
Data:
Version: 1 (0x0)
Subject: C = US, ST = Massachusetts, L = Boston, O = MyCompany
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (2048 bit)
Modulus:
...
Exponent: 65537 (0x10001)
Attributes:
Requested Extensions:
X509v3 Subject Alternative Name:
DNS:dev.mycompany.com
Signature Algorithm: sha256WithRSAEncryption
...
Ancak, heroku linkindeki komutu kullanarak sertifikayı oluşturup sonucu incelerseniz, Konu Alt Adı eksik:
$ openssl x509 -req -sha256 -days 365 -in server.csr -signkey server.key -out server.crt
$ openssl x509 -text -noout -in server.crt
Certificate:
Data:
Version: 1 (0x0)
Serial Number:
89:fd:75:26:43:08:04:61
Signature Algorithm: sha256WithRSAEncryption
Issuer: C = US, ST = Massachusetts, L = Boston, O = MyCompany
Validity
Not Before: Jan 21 04:27:21 2018 GMT
Not After : Jan 21 04:27:21 2019 GMT
Subject: C = US, ST = Massachusetts, L = Boston, O = MyCompany
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (2048 bit)
Modulus:
...
Exponent: 65537 (0x10001)
Signature Algorithm: sha256WithRSAEncryption
...
Bunun nedeni, varsayılan olarak OpenSSL'in uzantıları istekten sertifikaya kopyalamamasıdır. Normalde, sertifika bir müşteriden gelen bir talebe bağlı olarak bir CA tarafından oluşturulur / imzalanır ve bazı uzantılar, talepte tanımlanan uzantılara açıkça güvenmeleri gerekiyorsa, sertifikaya CA'nın hedeflediğinden daha fazla güç verebilir.
OpenSSL'e uzantıları kopyalamasını söylemenin yolları vardır, ancak IMHO, sertifikayı oluştururken uzantıları bir yapılandırma dosyasında sağlamaktan daha işe yarar.
Mevcut yapılandırma dosyanızı kullanmaya çalıştıysanız, çalışmaz, üst düzey bölüm işaretlendiğinden çalışmaz, [req]
bu ayarlar yalnızca x509 komutuna değil yalnızca req komutuna uygulanır. Üst düzey bir bölüm işaretçisine sahip olmak gerekmez, bu nedenle ilk satırı kaldırabilirsiniz ve ardından hem istek hem de sertifika oluşturmak için iyi çalışır.
$ openssl x509 -req -sha256 -days 365 -in server.csr -signkey server.key -out server.crt -extfile config.cnf
Alternatif olarak, önce bir istek ve ardından bir sertifika oluşturmak yerine, tek bir komutta kendinden imzalı bir sertifika oluşturmak -x509
için req
komutun argümanını kullanabilirsiniz . Bu durumda [req]
, bu bölüm req komutu tarafından okunup kullanıldığından bölüm çizgisini kaldırmak gerekli değildir
.
$ openssl req -x509 -sha256 -days 365 -key server.key -out server.crt -config config.cnf
Özetlemek için, yukarıdaki komutlarda kullanılan değiştirilmiş yapılandırma dosyası:
default_bits = 2048
distinguished_name = dn
x509_extensions = san
req_extensions = san
extensions = san
prompt = no
[ dn ]
countryName = US
stateOrProvinceName = Massachusetts
localityName = Boston
organizationName = MyCompany
[ san ]
subjectAltName = DNS:dev.mycompany.com
-config <(cat /System/Library/OpenSSL/openssl.cnf ; printf '[SAN]\nsubjectAltName=DNS:dev.mycompany.com')