Deseo configurar OpenSSL de tal manera que cuando se ejecute openssl req -new
para generar una nueva solicitud de firma de certificado, se me solicite que se incluyan nombres de temas alternativos en la CSR.
He agregado esta línea a la [req_attributes]
sección de mi openssl.cnf
:
subjectAltName = Alternative subject names
Esto tiene el efecto deseado que ahora se me solicita para SAN cuando se genera una CSR:
$ openssl req -new -out test.csr -key ./test.key <<<
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.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [US]:
State or Province Name (full name) [New York]:
Locality Name (eg, city) []:
Organization Name (eg, company) [Example Co]:
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:test.example.com
Email Address []:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Alternative subject names []:DNS:alt1.example.com
En el ejemplo anterior, ingresé DNS:alt1.example.com
cuando se me solicitaron las SAN.
El problema es que la CSR resultante no parece estar bien formateada:
$ openssl req -text -in ./test.csr
Certificate Request:
Data:
Version: 0 (0x0)
Subject: C=US, ST=New York, O=The Banes, CN=test.thebanes.org
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (2048 bit)
Modulus:
[...]
Exponent: 65537 (0x10001)
Attributes:
X509v3 Subject Alternative Name:unable to print attribute
OpenSSL se queja de que no puede imprimir el valor del atributo Nombre alternativo del sujeto. A partir de ejemplos en línea (donde las personas codifican las SAN en su openssl.cnf, en lugar de solicitarlas de forma interactiva como quiero), espero ver esto en su lugar:
Attributes:
X509v3 Subject Alternative Name:
DNS:alt1.example.com
Entonces, ¿cómo puedo generar una CSR bien formada con SAN interactivas?
fuente
openssl
: necesitaría un script que altere su archivo de configuración para eso. :( PD: una solución comprobada para hacerlo de manera no interactiva está aquí: stackoverflow.com/a/9158662/2693875Respuestas:
He luchado con esta pequeña pepita ... ¡qué PITA!
Mi solución: moví todo el archivo openssl.cnf a un archivo Template Toolkit dejando solo la pieza sans como pieza de reemplazo, luego envolví un script perl alrededor.
El script perl solicita las entradas de SAN, luego las inserta en la plantilla, guarda la plantilla en un archivo temporal y luego llamo a openssl req con la opción -config apuntando al archivo temporal. descarte el archivo temporal después de que se genere la CSR.
También es posible que desee ver: http://www.openssl.org/docs/apps/config.html
Hay otros que anulan $ ENV justo antes de la ejecución y envuelven la llamada a openssl req en perl o shell y logran lo mismo de una manera un poco más eficiente: http://blog.loftninjas.org/2008/11/11/ configurando-ssl-request-with-subjectaltname-with-openssl /
fuente
También estoy buscando una solución. Y esto es lo que quieres:
Y puede obtener esto solicitando nombres alternativos de sujeto :)
fuente
DNS:my.dns.com, DNS:my.otherdns.org
openssl
wtf ! También debe proporcionar la SAN alCA
comando como-extensions <string>
, o-extfile <file>
. mta.openssl.org/pipermail/openssl-users/2016-January/…Este "subjectAltName" no debe estar en esta sección: atributos = req_attributes. Pero en una sección para req_extensions = (llámalo como quieras).
Y no hay necesidad de todas las BS como
Solo escribe lo que quieres, cuántos quieres:
(El último hace acceso interno como " https://192.168.1.2 " sin previo aviso)
Entonces algo como:
¡Salud!
fuente