Cómo agregar una cadena de uso de clave extendida al generar un certificado autofirmado con openssl

10

Estoy usando openssl en Mac OS X 10.9 para generar un certificado autofirmado para los Servicios de escritorio remoto de Windows Server.

Usando el siguiente comando puedo generar el certificado,

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

Sin embargo, necesito agregar una cadena de uso de clave extendida Autenticación del servidor (1.3.6.1.5.5.7.3.1) y no puedo encontrar la manera de hacerlo en el comando anterior.

He intentado usar la opción openssl -extfile con un archivo que contiene esto,

[= default ]
extendedKeyUsage = 1.3.6.1.5.5.7.3.1

Sin embargo, aparece un error que dice "no se encuentra la opción -extfile"

joshu
fuente
1
(CLI) los archivos de configuración de openssl me convencieron de que era más fácil escribir código para generar los certificados que quería. Usé golang, pero supongo que podrías usar el cls openssl.
Rhythmic Fistman

Respuestas:

9

Mientras openssl x509usa -extfile, el comando que está usando openssl reqnecesita -configespecificar el archivo de configuración.

Entonces, puede usar un comando como este:

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

Las solicitudes habituales para los bits de nombre distinguido se definen en el archivo de configuración predeterminado (que probablemente esté /System/Library/OpenSSL/openssl.cnfen OS X), pero este archivo no se procesa cuando lo usa -config, por lo que su archivo de configuración también debe incluir algunos bits de DN. Por lo tanto, lo mencionado anteriormente cert_configpodría verse así:

[ 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

Como se indica en el comentario, probablemente pueda omitir la mayoría de los campos de DN. Para el uso de HTTPS, creo que todo lo que necesita es un CN que coincida con su nombre de host.


La sección Formato de sección de nombre distinguido y atributo de req (1) muestra cómo puede modificar la configuración anterior para solicitar valores (y proporcionar valores predeterminados) si desea generar múltiples certificados / solicitudes similares.

Si necesita otras extensiones de certificado, verifique x509v3_config (5) para ver qué otros bits puede especificar en las secciones de extensión.

Chris Johnsen
fuente
1
Si solo está generando una CSR con esta línea de comando, use -reqexts 'my server exts' para solicitar que la CA luego genere un certificado con el uso de clave mejorada de autenticación del servidor.
memetech