OpenSSL: bagaimana menghasilkan CSR dengan Nama Alternatif Subjek (SAN) yang diminta secara interaktif?

11

Saya ingin mengonfigurasi OpenSSL sehingga ketika menjalankan openssl req -newuntuk menghasilkan permintaan penandatanganan sertifikat baru, saya diminta untuk memasukkan nama subjek alternatif pada CSR.

Saya telah menambahkan baris ini ke [req_attributes]bagian saya openssl.cnf:

subjectAltName                  = Alternative subject names

Ini memiliki efek yang diinginkan sehingga saya sekarang diminta untuk SAN ketika menghasilkan CSR:

$ 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

Dalam contoh di atas, saya telah memasukkan DNS:alt1.example.comketika diminta untuk SAN.

Masalahnya adalah bahwa CSR yang dihasilkan tampaknya tidak diformat dengan baik:

$ 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 mengeluh bahwa ia tidak dapat mencetak nilai dari atribut Nama Alternatif Subjek. Dari contoh online (di mana orang-orang membuat kode SAN ke openssl.cnf mereka, daripada meminta mereka secara interaktif seperti yang saya inginkan), saya berharap melihat ini sebagai gantinya:

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

Jadi, bagaimana saya bisa menghasilkan CSR yang terbentuk dengan baik dengan SAN yang diminta secara interaktif?

Maxy-B
sumber
Sayangnya saya pikir tidak ada solusi untuk melakukan itu dengan "murni" openssl- Anda akan memerlukan skrip yang akan memotong-motong file konfigurasi untuk itu. :( PS Solusi terbukti untuk melakukan itu secara non-interaktif ada di sini: stackoverflow.com/a/9158662/2693875
Greg Dubicki

Jawaban:

4

Saya sendiri telah berjuang dengan nugget kecil ini ... sungguh PITA!

Solusi saya: Saya memindahkan semua file openssl.cnf ke dalam file Toolkit Templat yang hanya menyisakan potongan sans sebagai bagian pengganti, kemudian membungkus skrip perl di sekitarnya.

Script perl meminta entri SAN, kemudian memasukkannya ke dalam templat, menyimpan templat ke file temp dan kemudian saya panggil openssl req dengan opsi -config menunjuk ke file temp. buang file temp setelah CSR dibuat.

Anda juga mungkin ingin melihat: http://www.openssl.org/docs/apps/config.html

Ada orang lain yang mengganti $ ENV sesaat sebelum eksekusi dan membungkus panggilan ke openssl req dalam perl atau shell dan mencapai hal yang sama dengan cara yang sedikit lebih efisien: http://blog.loftninjas.org/2008/11/11/ mengkonfigurasi-ssl-request-dengan-subjectaltname-with-openssl /

Paul Allen
sumber
Solusi $ ENV tidak berhasil untuk saya. :(
Greg Dubicki
2

Saya juga mencari solusi. Dan inilah yang Anda inginkan:

[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:[email protected]

Dan Anda bisa mendapatkan ini dengan cepat untuk nama subjek alternatif :)

#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:[email protected]
    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
raiserle
sumber
Ini berfungsi ketika melihat CSR, tetapi ketika saya membuat sertifikat, itu tidak menyimpan SAN.
Jess
Jika formatnya benar untuk SAN? Daftar yang dipisahkan koma. Periksa dengan SAN-prefix DNS saja, jika tidak didukung IP, EMAIL. Contoh: INPUT >>DNS:my.dns.com, DNS:my.otherdns.org
raiserle
Baik. Ini adalah fungsi normal openssl wtf ! Anda juga harus memberikan SAN ke CAperintah-sebagai -extensions <string>, atau -extfile <file>. mta.openssl.org/pipermail/openssl-users/2016-January/…
raiserle
1

"SubjectAltName" ini seharusnya tidak ada di bagian ini: atribut = req_attributes. Tetapi di bagian untuk req_extensions = (sebut saja apa pun yang Anda inginkan).

Dan tidak perlu untuk semua BS suka

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

Cukup ketik apa yang Anda inginkan, berapa banyak yang Anda inginkan:

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

(Yang terakhir membuat akses internal seperti " https://192.168.1.2 " tanpa peringatan)

Jadi sesuatu seperti:

[ req ]
req_extensions     = my_extensions

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

Bersulang!

MXW
sumber
1
Ini BUKAN apa yang diminta OP - dia menginginkan solusi interaktif .
Greg Dubicki
1
Bukankah seharusnya IP direkam menggunakan "IP: 192.168.1.2", bukan rekam format DNS? Saya mencatat diskusi ini dari tahun 2013 tentang bug antara browser saat menggunakan DNS atau IP untuk menyimpan alamat IP sebagai SAN - michaelm.info/blog/?p=1281 - tetapi bug ini harus di-nixed sekarang.
Chris Woods