OpenSSL: Etkileşimli olarak istenen Konu Alternatif Adları (SAN) içeren bir CSR nasıl oluşturulur?


11

OpenSSL'yi openssl req -new, yeni bir sertifika imzalama isteği oluşturmaya çalışırken , CSR'ye alternatif konu adları girmem istenecek şekilde yapılandırmak istiyorum .

Ben bu hat ekledik [req_attributes]Sesimin bölümünde openssl.cnf:

subjectAltName                  = Alternative subject names

Bu şimdi bir CSR oluştururken SAN'lar için istendi istenen etkiye sahiptir:

$ openssl req -new -out test.csr -key ./test.key                            <<<
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [US]:
State or Province Name (full name) [New York]:
Locality Name (eg, city) []:
Organization Name (eg, company) [Example Co]:
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:test.example.com
Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Alternative subject names []:DNS:alt1.example.com

Yukarıdaki örnekte DNS:alt1.example.comSAN'lar istendiğinde girdim .

Sorun, ortaya çıkan CSR'nin iyi biçimlendirilmiş görünmemesi:

$ openssl req -text -in ./test.csr
Certificate Request:
    Data:
        Version: 0 (0x0)
        Subject: C=US, ST=New York, O=The Banes, CN=test.thebanes.org
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
                Modulus:
                    [...]
                Exponent: 65537 (0x10001)
        Attributes:
            X509v3 Subject Alternative Name:unable to print attribute

OpenSSL, Konu Alternatif Adı özniteliğinin değerini yazdıramadığından şikayet ediyor. Çevrimiçi örneklerden (insanların SAN'ları istediğim gibi etkileşimli olarak sormak yerine kendi openssl.cnf kodları sabit kodlama), bunun yerine görmeyi bekliyorum:

        Attributes:
            X509v3 Subject Alternative Name:
                DNS:alt1.example.com

Peki, etkileşimli olarak yönlendirilen SAN'larla iyi biçimlendirilmiş bir CSR'yi nasıl oluşturabilirim?


Ne yazık ki "saf" ile bunu yapmak için bir çözüm olmadığını düşünüyorum openssl- bunun için onun yapılandırma dosyasını mangle olacak bir komut dosyası gerekir. :( PS Bunu etkileşimli olmayan bir şekilde yapmak için kanıtlanmış bir çözüm burada: stackoverflow.com/a/9158662/2693875
Greg Dubicki

Yanıtlar:


4

Bu küçük külçeyle kendimle savaştım ... ne bir PITA!

Benim çözümüm: Tüm openssl.cnf dosyasını bir Şablon Araç Seti dosyasına taşıdım, sadece sans parçasını yedek parça olarak bırakarak etrafına bir perl betiği sardım.

Perl betiği SANs girişlerini ister, sonra bunları şablona ekler, şablonu bir geçici dosyaya kaydeder ve sonra geçici dosyayı işaret eden -config seçeneği ile openssl req diyorum. CSR oluşturulduktan sonra geçici dosyayı atın.

Ayrıca şunlara da bakmak isteyebilirsiniz: http://www.openssl.org/docs/apps/config.html

Yürütmeden hemen önce $ ENV'yi geçersiz kılan ve perl veya shell'de openssl req çağrısını saran ve aynı şeyi biraz daha verimli bir şekilde gerçekleştiren başkaları da var: http://blog.loftninjas.org/2008/11/11/ yapılandırarak-ssl-istekler-ile-SubjectAltName-ile-Openssl /


$ ENV çözümü benim için işe yaramadı. :(
Greg Dubicki

2

Ayrıca bir çözüm arıyorum. Ve bu, ne istiyorsun:

[req]
default_bits      = 2048
default_key_file  = private.key.pem
...
...
attributes        = req_attributes

[req_attributes]
subjectAltName = Alternative DNS names, Email adresses or IPs (comma seperated list)
#optional default value
subjectAltName_default = DNS:myhost.com.au,IP:127.0.0.1,EMAIL:my@here.org

Ve bunu alternatif konu adları için isteyerek alabilirsiniz :)

#openssl req -in mytest1/temp.csr.pem -noout -text
    Certificate Request:
    Data:
        Version: 0 (0x0)
        Subject: C=DE, ST=Sachsen, L=Heidenau, O=IT Rab\xC3\xB6se, OU=ssl
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
            RSA Public Key: (1024 bit)
                Modulus (1024 bit):
                    00:d8:cd:14:ca:d0:06:6c:8c:11:e9:52:bc:46:39:
                    c1:cf:5a:6e:dd:3b:a8:85:15:6b:13:82:82:4a:48:
                    cb:53:ea:70:ea:f4:02:b2:ef:b1:41:b2:d7:11:c7:
                    11:ba:07:1b:be:8c:30:bc:60:d2:82:83:a1:e1:19:
                    75:3b:69:03:01:3c:2b:7b:85:f4:2e:a9:58:68:8f:
                    0e:f4:5e:50:e1:3f:9e:cf:46:a0:eb:69:aa:1e:cb:
                    3a:99:cb:1d:93:60:d0:3b:38:96:87:45:19:51:f4:
                    40:72:e5:a7:5e:62:37:41:44:48:64:47:95:14:97:
                    4f:27:d0:0c:e7:6f:c1:e1:37
                Exponent: 65537 (0x10001)
        Attributes:
            X509v3 Subject Alternative Name:DNS:www.google.de,EMAIL:im@you.org
    Signature Algorithm: sha1WithRSAEncryption
        9d:2b:e4:eb:1b:c0:b6:0b:b4:62:a7:4d:01:68:98:68:36:98:
        1e:e9:bc:59:24:0f:1b:32:7b:da:9d:39:a4:0f:2c:70:3e:aa:
        f7:07:e7:6b:9b:3b:00:b3:71:e0:54:07:78:c7:6e:57:e3:89:
        07:e1:93:f1:77:e7:cc:0e:d0:ed:c5:d0:a3:5d:1a:cd:bb:d8:
        5f:64:25:81:1b:a8:2f:ef:c7:84:7a:f6:b8:52:4e:4c:1c:8d:
        83:b7:9b:02:8e:b2:39:68:a1:fe:f1:59:8b:e0:c4:91:f1:a9:
        c7:b3:82:a3:d2:92:2b:e5:79:9f:29:b6:63:e7:cf:9d:17:98:
        fe:70

Bu, CSR'ye bakarken çalışır, ancak bir sertifika oluşturduğumda SAN'ı tutmaz.
Jess

Biçim SAN için doğru ise? Virgülle ayrılmış liste. IP, EMAIL desteklenmiyorsa yalnızca SAN öneki DNS ile kontrol edin. Örnek: INPUT >>DNS:my.dns.com, DNS:my.otherdns.org
17'de raiserle

Tamam. Bu openssl wtf'nin normal işlevidir ! Ayrıca SAN CAkomutunu -ommand'a -extensions <string>veya olarak sağlamalısınız -extfile <file>. mta.openssl.org/pipermail/openssl-users/2016-Ocak /…
raiserle

1

Bu "SubjectAltName" bu bölümde olmamalıdır: attributes = req_attributes. Ama req_extensions = için bir bölümde (ne istersen onu ara).

Ve tüm BS gibi

subjectAltName           = Alternative subject names
subjectAltName_default   = DNS:www.g00gle.com

Ne istediğinizi, kaç tane istediğinizi yazın:

subjectAltName = DNS:*.g00gle.com, DNS:g00gle.com, DNS:192.168.1.2

(Sonuncusu , uyarı olmadan " https://192.168.1.2 " gibi dahili erişim sağlar )

Yani şöyle bir şey:

[ req ]
req_extensions     = my_extensions

[my_extensions]
subjectAltName     = DNS:*.g00gle.com, DNS:g00gle.com, DNS:192.168.1.2

Şerefe!


1
OP'nin istediği bu değil - etkileşimli bir çözüm istiyordu .
Greg Dubicki

1
IP'ler DNS biçiminde bir kayıt değil, "IP: 192.168.1.2" kullanılarak kaydedilmemeli mi? IP adreslerini SAN olarak depolamak için DNS veya IP kullanırken tarayıcılar arasındaki hatalar hakkında bu tartışmayı 2013'ten bahsettim - michaelm.info/blog/?p=1281 - ancak bu hatanın şimdiye kadar karıştırılması gerekiyor.
Chris Woods
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.