web-dev-qa-db-fra.com

Comment générer un certificat auto-signé avec SubjectAltName en utilisant OpenSSL?

J'essaie de générer un certificat auto-signé avec OpenSSL avec SubjectAltName dans celui-ci. Bien que je génère le CSR pour le certificat, je suppose que je dois utiliser les extensions v3 d'OpenSSL x509. J'utilise :

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

Quelqu'un peut-il m'aider avec la syntaxe exacte?

106
mohanjot

Quelqu'un peut-il m'aider avec la syntaxe exacte?

C'est un processus en trois étapes, et il implique la modification du fichier openssl.cnf. Vous pourrez peut-être le faire avec uniquement des options de ligne de commande, mais je ne le fais pas de cette façon.

Trouvez votre fichier openssl.cnf. Il est probablement situé dans /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

Sur mon système Debian, /usr/lib/ssl/openssl.cnf est utilisé par le programme intégré openssl. Sur les systèmes Debian récents, il se trouve à l'adresse /etc/ssl/openssl.cnf

Vous pouvez déterminer quel openssl.cnf est utilisé en ajoutant un XXX non essentiel au fichier et voir si openssl est un étranglement.


Commencez par modifier les paramètres req. Ajoutez une section alternate_names à openssl.cnf avec les noms que vous souhaitez utiliser. Il n'y a pas de sections alternate_names existantes, donc l'endroit où vous l'ajoutez n'a pas d'importance.

[ alternate_names ]

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

Ensuite, ajoutez ce qui suit à la section existante[ v3_ca ]. Recherchez la chaîne exacte [ v3_ca ]:

subjectAltName      = @alternate_names

Vous pouvez changer keyUsage comme suit sous [ v3_ca ]:

keyUsage = digitalSignature, keyEncipherment

digitalSignature et keyEncipherment sont la norme pour un certificat de serveur. Ne vous inquiétez pas pour nonRepudiation. C'est un peu inutile imaginé par les gars de la science-fiction comp qui veulent être des avocats. Cela ne signifie rien dans le monde juridique.

En fin de compte, l'IETF (RFC 5280), les navigateurs et les autorités de certification fonctionnent rapidement et de manière lâche, de sorte que l'utilisation de la clé que vous fournissez n'a probablement aucune importance.


Deuxièmement, modifiez les paramètres de signature. Trouvez cette ligne sous la section CA_default:

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

Et changez le en:

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

Cela garantit que les SAN sont copiés dans le certificat. Les autres façons de copier les noms DNS sont brisées.


Troisièmement, générez votre auto-signé:

$ 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.
...

Enfin, examinez le certificat:

$ 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/[email protected]
        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/[email protected]
        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
149
jww