Comment ajouter une chaîne d'utilisation de clé étendue lors de la génération d'un certificat auto-signé en utilisant openssl

10

J'utilise openssl sur Mac OS X 10.9 pour générer un certificat auto-signé pour les services Bureau à distance de Windows Server.

En utilisant la commande ci-dessous, je peux générer le certificat,

   openssl req -x509 -nodes -days 365 -newkey rsa:4096 -keyout myserver.key -out myserver.crt

Cependant, je dois ajouter une chaîne d'utilisation de clé étendue Server Authentication (1.3.6.1.5.5.7.3.1) et je ne peux pas comprendre comment le faire dans la commande ci-dessus.

J'ai essayé d'utiliser l'option openssl -extfile avec un fichier contenant cela,

[= default ]
extendedKeyUsage = 1.3.6.1.5.5.7.3.1

Cependant, j'obtiens une erreur indiquant que "l'option -extfile n'est pas trouvée"

joshu
la source
1
(CLI) les fichiers de configuration openssl m'ont convaincu qu'il était plus facile d'écrire du code pour générer les certificats que je voulais. J'ai utilisé golang, mais je suppose que vous pourriez utiliser le clib openssl.
Rhythmic Fistman

Réponses:

9

Lors de l' openssl x509utilisation -extfile, la commande que vous utilisez openssl req, doit -configspécifier le fichier de configuration.

Vous pouvez donc utiliser une commande comme celle-ci:

openssl req -x509 -config cert_config -extensions 'my server exts' -nodes \
            -days 365 -newkey rsa:4096 -keyout myserver.key -out myserver.crt

Les invites habituelles pour les bits de nom distinctif sont définies dans le fichier de configuration par défaut (qui est probablement /System/Library/OpenSSL/openssl.cnfsous OS X), mais ce fichier n'est pas traité lorsque vous utilisez -config, donc votre fichier de configuration doit également inclure des bits DN. Ainsi, le référencé ci-dessus cert_configpourrait ressembler à ceci:

[ req ]
prompt             = no
distinguished_name = my dn

[ my dn ]
# The bare minimum is probably a commonName
            commonName = secure.example.com
           countryName = XX
          localityName = Fun Land
      organizationName = MyCo LLC LTD INC (d.b.a. OurCo)
organizationalUnitName = SSL Dept.
   stateOrProvinceName = YY
          emailAddress = [email protected]
                  name = John Doe
               surname = Doe
             givenName = John
              initials = JXD
           dnQualifier = some

[ my server exts ]
extendedKeyUsage = 1.3.6.1.5.5.7.3.1
# 1.3.6.1.5.5.7.3.1 can also be spelled serverAuth:
# extendedKeyUsage = serverAuth

# see x509v3_config for other extensions

Comme indiqué dans le commentaire, vous pouvez probablement omettre la plupart des champs DN. Pour l'utilisation HTTPS, je pense que tout ce dont vous avez besoin est un CN qui correspond à votre nom d'hôte.


La section Distinguished Name and Attribute Section Format de req (1) montre comment vous pouvez modifier la configuration ci-dessus pour demander des valeurs (et fournir des valeurs par défaut) si vous souhaitez générer plusieurs certificats / demandes similaires.

Si vous avez besoin d'autres extensions de certificat, vérifiez x509v3_config (5) pour quels autres bits vous pouvez spécifier dans les sections d'extension.

Chris Johnsen
la source
1
Si vous générez simplement un CSR avec cette ligne de commande, utilisez -reqexts 'my server exts' pour demander à l'autorité de certification de générer ultérieurement un certificat avec l'utilisation de la clé améliorée de l'authentification du serveur.
memetech