Crear certificado SSL de forma no interactiva [cerrado]

28

Quiero silenciosamente, no interactivamente, crear un certificado SSL. Es decir, sin que se le solicite ningún dato.

La forma normal en que creo el certificado sería:

openssl req -x509 -nodes -days 7300 -newkey rsa:2048 \
    -keyout /etc/ssl/private/pure-ftpd.pem -out /etc/ssl/private/pure-ftpd.pem 

Intenté lo siguiente:

openssl genrsa -out server.key 2048
touch openssl.cnf

cat >> openssl.cnf <<EOF
[ req ]
prompt = no
distinguished_name = req_distinguished_name

[ req_distinguished_name ]
C = GB
ST = Test State
L = Test Locality
O = Org Name
OU = Org Unit Name
CN = Common Name
emailAddress = test@email.com
EOF

openssl req -x509 -config openssl.cnf -nodes -days 7300 \
    -signkey server.key -out /etc/ssl/private/pure-ftpd.pem 

Pero todavía recibo una solicitud de datos.

TheNiceGuy
fuente
1
¿Puede proporcionar una explicación o salida de lo que está sucediendo en lugar del resultado deseado?
Patrick
Obtengo la ayuda como resultado. Algo está mal con los parámetros aquí:openssl req -x509 -config openssl.cnf -nodes -days 7300 -signkey server.key -out /etc/ssl/private/pure-ftpd.pem
TheNiceGuy
Es mejor proporcionar la salida de errores cuando tiene problemas. Supongo que su problema se debe a -signkey. Esta no es una openssl reqopción válida en mi sistema. El mensaje de error tendrá esto como la primera línea:unknown option -signkey
Patrick
Bueno, ¿esa clave de signo debería decirle a SSL que use la clave proporcionada como lo sé?
TheNiceGuy
Su "forma normal de crear el certificado" no solicita ningún dato. ¿No quieres que produzca algo? Entonces úsalo 2> /dev/null.
wingedsubmariner

Respuestas:

51

Lo que falta es incluir el asunto del certificado en la -subjbandera. Prefiero esto a crear un archivo de configuración porque es más fácil de integrar en un flujo de trabajo y no requiere limpieza después.

Clave de un paso y generación de RSE:

openssl req -new -newkey rsa:4096 -nodes \
    -keyout www.example.com.key -out www.example.com.csr \
    -subj "/C=US/ST=Denial/L=Springfield/O=Dis/CN=www.example.com"

Generación de certificado sin contraseña autofirmado en un paso:

openssl req -new -newkey rsa:4096 -days 365 -nodes -x509 \
    -subj "/C=US/ST=Denial/L=Springfield/O=Dis/CN=www.example.com" \
    -keyout www.example.com.key  -out www.example.com.cert

Ninguno de estos comandos solicitará ningún dato.

Vea mi respuesta a esta pregunta casi idéntica en Super User.

bahamat
fuente
O bueno, esa es una buena solución. Hace los códigos mucho más pequeños. Gracias: D
TheNiceGuy
1
No modifiqué su archivo de configuración original, ya que pensé que podría ser un sustituto de un certificado más complicado. Algunas configuraciones que no se pueden representar con un -subjparámetro, particularmente cuando ingresa a extensiones v3 y parámetros subjectAltName.
robbat2
1
También puede usar -batch(modo no interactivo)
Eran H.
Tenga en cuenta que el primer comando parece requerir que la clave exista antes de que pueda ejecutarse donde el segundo comando crea su clave y certificado automáticamente porque -subjes una CSR en línea válida básica.
dragon788
@ dragon788 Gracias por señalarlo. Lo arreglé.
bahamat
1

El comando que estás buscando es:

openssl req -new -x509 -config openssl.cnf -nodes -days 7300 -key server.key -out /etc/ssl/private/pure-ftpd.pem

Cambios desde su versión:

  • -new se requiere para generar cualquier cosa
  • -key utilizado en lugar de -signkey
robbat2
fuente