Cómo heredar el nombre común al nombre alternativo del sujeto

Cómo heredar el nombre común al nombre alternativo del sujeto

En mi pc con Windows 10 instalado, tengo que usar OpenSSL. He descargado la versión 1.0.2ny siguiendo esta guía:Crear un certificado SSL con varios nombres de hostModifiqué el archivo de configuración openssl.cfg (ubicado en C:\OpenSSL-Win64\bin).

Después de algunas pruebas, puedo generar sin problemas tanto claves como certificados.

Mi problema es el siguiente: mis indicaciones para la generación de certificados son tales que elNombre alternativo del sujetodebe tener solo 1 valor y debe coincidir con elNombre comúncampo. Entonces, si (completando el certificado) completo el campo nombre común conejemplo.com, también el nombre alternativo del sujeto debe serejemplo.com. Sé que puedo cambiar cada vez el archivo cfg y configurar manualmente el valor para SAN en la sección v3-req, pero quiero evitar esto; Estoy buscando una manera de copiar el valor que solicito para el nombre común en el campo SAN.

Entonces, probé esto: en el archivo openss.cfg fui a la sección v3 req y la cambié de esta manera:

[ v3_req ]

# Extensions to add to a certificate request

basicConstraints = CA:FALSE 
keyUsage = nonRepudiation, digitalSignature, keyEncipherment 
subjectAltName = @alt_names

[alt_names] 
DNS.1 = commonName:copy

es decir, intenté explotar la función :copy pero, lamentablemente, esta acción no funciona. Si, después de la generación del certificado, lanzo el comando

req -text -noout -in <filename.csr>

para verificar mi certificado, en la sección específica me sale esto:

X509v3 Subject Alternative Name:
    DNS:commonName.copy 

Como puede ver, el resultado está en el lado derecho de mi declaración en la [alt_names]sección.

Entonces, las preguntas son: ¿Existe algún método para heredar el nombre común del nombre alternativo del sujeto? Y si es así, ¿cómo?

Respuesta1

Se utiliza ${section::name}para leer variables previamente definidas.

Aquí hay un ejemplo que funciona:

[ req ]

prompt             = no
string_mask        = default

# The size of the keys in bits:
default_bits       = 2048
distinguished_name = req_dn
req_extensions     = req_ext

[ req_dn ]

# Or traditional org style:
countryName = gb
organizationName = example
commonName = acme.example.test

[ req_ext ]

subjectAltName = @alt_names

[alt_names]
DNS.1 = ${req_dn::commonName}
DNS.2 = alt.example.test

Seguido por:

openssl req -nodes -new -keyout test.key -out test.csr -config ./openssl.cnf

Esto resulta en:

openssl req -noout -text -in test.csr 

donación:

 ...
    Attributes:
    Requested Extensions:
        X509v3 Subject Alternative Name:
            DNS:acme.example.test, DNS:alt.example.test
Signature Algorithm: sha256WithRSAEncryption
     92:1c:e0:0e:6d:7d:2e:b4:64:c5:ab:ff:6a:37:dd:35:98:58:
 ...

información relacionada