Come posso generare un certificato autofirmato con SubjectAltName utilizzando OpenSSL? [chiuso]


115

Sto cercando di generare un certificato autofirmato con OpenSSL con SubjectAltName al suo interno. Mentre sto generando il csr per il certificato, la mia ipotesi è che devo usare le estensioni v3 di OpenSSL x509. Sto usando :

openssl req -new -x509 -v3 -key private.key -out certificate.pem -days 730

Qualcuno può aiutarmi con la sintassi esatta?


2
Vedi anche Come creare un certificato autofirmato con openssl? Fornisce le informazioni per creare un certificato con il nome alternativo del soggetto e indica altre regole che si applicano in modo che il certificato abbia le maggiori possibilità di successo con i browser e altri programmi utente.
jww

risposta in fondo a questo thread ( stackoverflow.com/questions/27294589/… ) utilizzando certificatetools.com ti darà un buon risultato e un file cnf utilizzabile
James Nelson

Risposte:


164

Qualcuno può aiutarmi con la sintassi esatta?

È un processo in tre fasi e implica la modifica del openssl.cnffile. Potresti essere in grado di farlo solo con le opzioni della riga di comando, ma non lo faccio in questo modo.

Trova il tuo openssl.cnffile. Probabilmente si trova in /usr/lib/ssl/openssl.cnf:

$ find /usr/lib -name openssl.cnf
/usr/lib/openssl.cnf
/usr/lib/openssh/openssl.cnf
/usr/lib/ssl/openssl.cnf

Sul mio sistema Debian , /usr/lib/ssl/openssl.cnfviene utilizzato dal programma integrato openssl. Sui sistemi Debian recenti si trova in/etc/ssl/openssl.cnf

È possibile determinare quale openssl.cnfviene utilizzato aggiungendo un falso XXXal file e vedere se si opensslblocca.


Innanzitutto, modifica i reqparametri. Aggiungi una alternate_namessezione a openssl.cnfcon i nomi che desideri utilizzare. Non ci sono alternate_namessezioni esistenti , quindi non importa dove lo aggiungi.

[ alternate_names ]

DNS.1        = example.com
DNS.2        = www.example.com
DNS.3        = mail.example.com
DNS.4        = ftp.example.com

Successivamente, aggiungi quanto segue alla sezione esistente [ v3_ca ] . Cerca la stringa esatta [ v3_ca ]:

subjectAltName      = @alternate_names

È possibile modificare keyUsagequanto segue in [ v3_ca ]:

keyUsage = digitalSignature, keyEncipherment

digitalSignaturee keyEnciphermentsono tariffa standard per un certificato del server. Non preoccuparti nonRepudiation. È una cosa inutile pensata da ragazzi / ragazze di informatica che volevano diventare avvocati. Non significa niente nel mondo legale.

Alla fine, IETF ( RFC 5280 ), i browser e le CA funzionano velocemente e liberamente, quindi probabilmente non importa quale sia l'utilizzo della chiave fornito.


In secondo luogo, modificare i parametri di firma. Trova questa riga nella CA_defaultsezione:

# Extension copying option: use with caution.
# copy_extensions = copy

E modificalo in:

# Extension copying option: use with caution.
copy_extensions = copy

Ciò garantisce che le SAN vengano copiate nel certificato. Gli altri modi per copiare i nomi DNS sono interrotti.


Terzo, genera il tuo certificato autofirmato:

$ openssl genrsa -out private.key 3072
$ openssl req -new -x509 -key private.key -sha256 -out certificate.pem -days 730
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.
...

Infine, esamina il certificato:

$ openssl x509 -in certificate.pem -text -noout
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 9647297427330319047 (0x85e215e5869042c7)
    Signature Algorithm: sha256WithRSAEncryption
        Issuer: C=US, ST=MD, L=Baltimore, O=Test CA, Limited, CN=Test CA/emailAddress=test@example.com
        Validity
            Not Before: Feb  1 05:23:05 2014 GMT
            Not After : Feb  1 05:23:05 2016 GMT
        Subject: C=US, ST=MD, L=Baltimore, O=Test CA, Limited, CN=Test CA/emailAddress=test@example.com
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (3072 bit)
                Modulus:
                    00:e2:e9:0e:9a:b8:52:d4:91:cf:ed:33:53:8e:35:
                    ...
                    d6:7d:ed:67:44:c3:65:38:5d:6c:94:e5:98:ab:8c:
                    72:1c:45:92:2c:88:a9:be:0b:f9
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Subject Key Identifier:
                34:66:39:7C:EC:8B:70:80:9E:6F:95:89:DB:B5:B9:B8:D8:F8:AF:A4
            X509v3 Authority Key Identifier:
                keyid:34:66:39:7C:EC:8B:70:80:9E:6F:95:89:DB:B5:B9:B8:D8:F8:AF:A4

            X509v3 Basic Constraints: critical
                CA:FALSE
            X509v3 Key Usage:
                Digital Signature, Non Repudiation, Key Encipherment, Certificate Sign
            X509v3 Subject Alternative Name:
                DNS:example.com, DNS:www.example.com, DNS:mail.example.com, DNS:ftp.example.com
    Signature Algorithm: sha256WithRSAEncryption
         3b:28:fc:e3:b5:43:5a:d2:a0:b8:01:9b:fa:26:47:8e:5c:b7:
         ...
         71:21:b9:1f:fa:30:19:8b:be:d2:19:5a:84:6c:81:82:95:ef:
         8b:0a:bd:65:03:d1

7
Ho appena copiato il file openssl e l'ho modificato localmente. Quindi ha generato tutto con: openssl genrsa -out cert.key 3072 -nodes openssl req -new -x509 -key cert.key -sha256 -config openssl.cnf -out cert.crt -days 730 -subj "/C=US/ST=private/L=province/O=city/CN=hostname.example.com"
stwienert

7
C'è anche un bel trucco per renderlo più flessibile usando le variabili d'ambiente descritte qui : subjectAltName=$ENV::ALTNAME(e impostare env. Var ALTNAME=DNS:example.com,DNS:other.example.net).
Bruno

6
Nota che usi IPinvece di DNSper alternate_namesse lavori con un indirizzo IP. Puoi anche copiare il file di configurazione localmente e quindi specificarlo sulla riga di comando di openssl con -config my_config.cnf. E potresti dover rimuovere il commento req_extensions = v3_req.
Avversus

5
Non l'ho mai fatto funzionare su OSX, ma l'utilizzo del modello req.conf a questo link ha funzionato a meraviglia: support.citrix.com/article/CTX135602 (estrarrei i dettagli in una risposta ma questa domanda è stata chiusa inutilmente )
rymo

3
per qualche ragione non gli piace il subjectAltName = @alternate_names nella sezione v3_ca. Potrebbe essere un errore di battitura? Ecco l'errore che ottengo: errore: 22097069: routine X509 V3: DO_EXT_NCONF: stringa di estensione non valida: v3_conf.c: 139: name = subjectAltName, sezione = @ alternate_names 140487468840608: errore: 22098080: routine X509 V3: X509V3_EXT_nconf: errore nell'estensione: v3_conf.c: 93: name = subjectAltName, value = @ alternate_names
James Nelson
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.