Creación no interactiva de solicitudes de certificados SSL

15

¿Hay alguna manera de crear solicitudes de certificados SSL especificando todos los parámetros requeridos en el comando inicial? Estoy escribiendo un panel de control de servidor web basado en CLI y me gustaría evitar el uso de esperar cuando se ejecute, opensslsi es posible.

Esta es una forma típica de crear una solicitud de certificado:

$ openssl req -new -newkey rsa:2048 -nodes -sha256 -keyout foobar.com.key -out foobar.com.csr
Generating a 2048 bit RSA private key
.................................................+++
........................................+++
writing new private key to 'foobar.com.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) [AU]:US
State or Province Name (full name) [Some-State]:New Sweden
Locality Name (eg, city) []:Stockholm
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Scandanavian Ventures, Inc.
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:foobar.com
Email Address []:[email protected]

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:FooBar

Espero ver algo como esto: (ejemplo que no funciona)

$ openssl req -new -newkey rsa:2048 -nodes -sha256 -keyout foobar.com.key -out foobar.com.csr \
-Country US \
-State "New Sweden" \
-Locality Stockholm \
-Organization "Scandanavian Ventures, Inc." \
-CommonName  foobar.com \
-EmailAddress [email protected] \
-Company FooBar

La excelente página de manual no tenía nada que decir al respecto, ni pude encontrar nada a través de Google. ¿La generación de solicitud de certificado SSL debe ser un proceso interactivo, o hay alguna forma de especificar todos los parámetros en un solo comando?

Esto está en una distribución de Linux derivada de Debian en ejecución openssl 1.0.1.

dotancohen
fuente
@ceejayoz: Muy bien, gracias. א) ¿Dónde están openssldocumentadas esas banderas? ב) ¿Qué buscaste en Google para encontrar eso? ¡Gracias!
dotancohen
1
Busqué en Google "CSR generate script". El -subjparámetro está documentado (no con mucho detalle) en openssl.org/docs/apps/req.html .
ceejayoz
También es posible crear un archivo de configuración, normalmente llamado openssl.cnf.
sebix

Respuestas:

16

te faltan dos partes:

la línea de asunto, que se puede llamar como

-subj "/C=US/ST=New Sweden/L=Stockholm /O=.../OU=.../CN=.../emailAddress=..."
  • reemplazando ... con valor, X=siendo código X509 ( O RGANIZACIÓN / O RGANIZACIÓN U nit / etc ...)

el valor de la contraseña, que se puede llamar como

-passout pass:client11
-passin  pass:client11
  • que dan una contraseña de salida / entrada

mi llamado para una nueva clave parece

openssl genrsa -aes256 -out lib/client1.key -passout pass:client11 1024
openssl rsa -in lib/client1.key -passin pass:client11 -out lib/client1-nokey.key

openssl req -new -key lib/client1.key -subj req -new \
    -passin pass:client11 -out lib/client1.csr \
    -subj "/C=US/ST=New Sweden/L=Stockholm/O=.../OU=.../CN=.../emailAddress=..."

(ahora que lo veo, hay dos -new...)

Archemar
fuente
2

Verifique la -batchopción como se describe en los documentos oficiales .

expulsar
fuente
2
Gracias. Veo que existe la opción de lote, pero parece que no hay explicación de cómo usarla.
dotancohen
¿Por qué se rechazó esta respuesta? ¿El lote no es una posible solución al problema? Por el nombre, parece que podría ser.
dotancohen
Definitivamente, es la única forma de hacer esto con la opción -batch, por qué me votaron negativamente, no tengo idea. La declaración "La página de manual no tenía nada que decir al respecto" es falsa, debido a la opción "lote".
expulsar el
Votado por mencionar el lote, ya que aunque no lo use en la solución, puede ser útil en el futuro.
dotancohen
-1

Adjunto a mi comando openssl regular:

openssl req -x509 -nodes -days 7300 -newkey rsa: 2048 -keyout /etc/ssl/private/key.pem -out /etc/ssl/private/cert.pem

Esta línea:

-subj "/C=PE/ST=Lima/L=Lima/O=Acme Inc. /OU=IT Department/CN=acme.com"

Descripción:

  • Nombre del país (código de 2 letras) [AU]: PE
  • Nombre del estado o provincia (nombre completo) [Algún estado]: Lima
  • Nombre de la localidad (por ejemplo, ciudad) []: Lima
  • Nombre de la organización (por ejemplo, empresa) [Internet Widgits Pty Ltd]: Acme Inc.
  • Nombre de la unidad organizativa (por ejemplo, sección) []: Departamento de TI
  • Nombre común (por ejemplo, FQDN del servidor o SU nombre) []: acme.com

Use "/" como separador.

JorgeM
fuente
1
Parece que la respuesta aceptada ya incluye esta información. De lo contrario, gracias.
dotancohen