Comment puis-je générer un certificat auto-signé avec SubjectAltName à l'aide d'OpenSSL? [fermé]

115

J'essaie de générer un certificat auto-signé avec OpenSSL avec SubjectAltName.Tandis 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?

mohanjot
la source
2
Voir également Comment créer un certificat auto-signé avec openssl? Il fournit les informations pour créer un certificat avec le nom alternatif du sujet et vous indique les autres règles qui s'appliquent afin que le certificat ait les meilleures chances de succès avec les navigateurs et les autres agents utilisateurs.
jww
réponse au bas de ce fil ( stackoverflow.com/questions/27294589/… ) en utilisant certificatetools.com vous donnera un bon résultat et un fichier cnf utilisable
James Nelson

Réponses:

164

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

C'est un processus en trois étapes, et cela implique la modification du openssl.cnffichier. 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 openssl.cnfdossier. 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.cnfest utilisé par le programme intégré openssl. Sur les systèmes Debian récents, il se trouve à/etc/ssl/openssl.cnf

Vous pouvez déterminer ce qui openssl.cnfest utilisé en ajoutant un faux XXXau fichier et voir si les opensslchokes.


Commencez par modifier les reqparamètres. Ajoutez une alternate_namessection à openssl.cnfavec les noms que vous souhaitez utiliser. Il n'y a aucune alternate_namessection existante , donc peu importe où vous l'ajoutez.

[ 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 keyUsagecomme suit sous [ v3_ca ]:

keyUsage = digitalSignature, keyEncipherment

digitalSignatureet keyEnciphermentsont le tarif standard pour un certificat de serveur. Ne t'inquiète pas nonRepudiation. C'est un peu inutile pensé par des hommes / filles en informatique qui voulaient être avocats. Cela ne veut rien dire 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 des clés que vous fournissez n'a probablement pas d'importance.


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

# 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 moyens de copier les noms DNS sont interrompus.


Troisièmement, générez votre certificat 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
jww
la source
7
Je viens de copier ce fichier openssl et de l'ajuster localement. Puis tout généré avec: 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
Il y a aussi une belle astuce pour rendre cela plus flexible en utilisant les variables d'environnement décrites ici : subjectAltName=$ENV::ALTNAME(et définir le env. Var ALTNAME=DNS:example.com,DNS:other.example.net).
Bruno
6
Notez que vous utilisez IPau lieu de DNSfor alternate_namessi vous travaillez avec une adresse IP. Vous pouvez également copier le fichier de configuration localement, puis le spécifier sur la ligne de commande openssl avec -config my_config.cnf. Et vous devrez peut-être décommenter req_extensions = v3_req.
Adversus du
5
Je n'ai jamais réussi à faire fonctionner cela sur OSX, mais l'utilisation du modèle req.conf sur ce lien a fonctionné comme un charme: support.citrix.com/article/CTX135602 ( j'expliquerais les détails dans une réponse mais cette question a été fermée inutilement )
rymo
3
pour une raison quelconque, il n'aime pas le subjectAltName = @alternate_names sous la section v3_ca. Serait-ce une faute de frappe? Voici l'erreur que j'obtiens: erreur: 22097069: routines X509 V3: DO_EXT_NCONF: chaîne d'extension non valide: v3_conf.c: 139: name = subjectAltName, section = @ alternatives_names 140487468840608: erreur: 22098080: routines X509 V3: X509V3_EXT_nconf: erreur dans l'extension X509V3_EXT: v3_conf.c: 93: name = subjectAltName, value = @ another_names
James Nelson