OpenSSL: come generare un CSR con soggetti a richieste alternative interattive (SAN)?


11

Desidero configurare OpenSSL in modo tale che durante l'esecuzione openssl req -newper generare una nuova richiesta di firma del certificato, mi venga richiesto di includere eventuali nomi di soggetti alternativi nel CSR.

Ho aggiunto questa riga alla [req_attributes]sezione del mio openssl.cnf:

subjectAltName                  = Alternative subject names

Questo ha l'effetto desiderato che ora mi viene richiesto per SAN quando si genera un 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

Nell'esempio sopra, ho inserito DNS:alt1.example.comquando richiesto per le SAN.

Il problema è che il CSR risultante non sembra essere ben formattato:

$ 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 si lamenta che non è in grado di stampare il valore dell'attributo Nome alternativo soggetto. Dagli esempi online (in cui le persone codificano le SAN nel loro openssl.cnf, piuttosto che richiederle interattivamente come voglio), mi aspetto invece di vedere questo:

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

Quindi, come posso generare un CSR ben formato con SAN richieste interattivamente?


Sfortunatamente penso che non ci sia soluzione per farlo con "pure" openssl- avresti bisogno di uno script che rovinerebbe il suo file di configurazione per quello. :( PS Una soluzione per farlo in modo non interattivo provata è qui: stackoverflow.com/a/9158662/2693875
Greg Dubicki

Risposte:


4

Ho combattuto con questa piccola pepita io stesso ... che PITA!

La mia soluzione: ho spostato tutto il file openssl.cnf in un file Template Toolkit lasciando solo il pezzo sans come pezzo sostitutivo, quindi ho avvolto uno script perl attorno ad esso.

Lo script perl richiede le voci SAN, quindi le inserisce nel modello, salva il modello in un file temporaneo e quindi chiamo openssl req con l'opzione -config puntata sul file temporaneo. scartare il file temporaneo dopo la generazione del CSR.

Potresti anche voler consultare: http://www.openssl.org/docs/apps/config.html

Ci sono altri che sovrascrivono $ ENV appena prima dell'esecuzione e concludono la chiamata a openssl req in perl o shell e realizzano la stessa cosa in modo leggermente più efficiente: http://blog.loftninjas.org/2008/11/11/ configurando-SSL-richieste-con-SubjectAltName-con-openssl /


La soluzione $ ENV non ha funzionato per me. :(
Greg Dubicki,

2

Sto anche cercando una soluzione. E questo è quello che vuoi:

[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

E puoi ottenerlo richiedendo nomi di soggetti alternativi :)

#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

Funziona guardando il CSR, ma quando creo un certificato, non mantiene la SAN.
Jess,

Se il formato è corretto per SAN? Elenco separato da virgole. Verificare solo con DNS prefisso SAN, se non supportato IP, EMAIL. Esempio: INPUT >>DNS:my.dns.com, DNS:my.otherdns.org
raiserle

Ok. Questa è la normale funzione di openssl wtf ! È inoltre necessario fornire la SAN al CAcomando come -extensions <string>, o -extfile <file>. mta.openssl.org/pipermail/openssl-users/2016-January/…
raiserle

1

Questo "subjectAltName" non dovrebbe essere in questa sezione: attributi = req_attributes. Ma in una sezione per req_extensions = (chiamalo come vuoi).

E non c'è bisogno di tutti i BS come

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

Digita quello che vuoi, quanti ne vuoi:

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

(L'ultimo rende l'accesso interno come " https://192.168.1.2 " senza preavviso)

Quindi qualcosa del tipo:

[ req ]
req_extensions     = my_extensions

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

Saluti!


1
Questo NON è ciò che OP ha richiesto: voleva una soluzione interattiva .
Greg Dubicki,

1
Gli IP non dovrebbero essere registrati usando "IP: 192.168.1.2", non un record in formato DNS? Ho preso atto di questa discussione del 2013 sui bug tra i browser quando si utilizza DNS o IP per archiviare gli indirizzi IP come SAN - michaelm.info/blog/?p=1281 - ma questo bug dovrebbe ora essere eliminato.
Chris Woods l'
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.