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