Crear, gestionar y convertir certificados SSL con OpenSSL

Uno de los comandos más populares en SSL para crear, convertir, gestionar los Certificados SSL es OpenSSL.

Habrá muchas situaciones en las que tendrá que tratar con OpenSSL de varias maneras, y aquí las he enumerado para usted como una práctica hoja de trucos.

En este artículo, hablaré de los comandos OpenSSL de uso frecuente para ayudarle en el mundo real.

Algunas de las abreviaturas relacionadas con los certificados.

  • SSL – Capa de sockets seguros
  • CSR – Solicitud de firma de certificado
  • TLS – Seguridad de la capa de transporte
  • PEM – Correo de privacidad mejorada
  • DER – Reglas de codificación distinguidas
  • SHA – Algoritmo hash seguro
  • PKCS – Normas de criptografía de clave pública

Nota: Un curso sobre el funcionamiento de SSL/TLS le resultará útil si no está familiarizado con los términos.

Crear una nueva clave privada y una solicitud de firma de certificado

openssl req -out geekflare.csr -newkey rsa:2048 -nodes -keyout geekflare.key

El comando anterior generará una CSR y un archivo de clave RSA de 2048 bits. Si tiene intención de utilizar este certificado en Apache o Nginx, deberá enviar este archivo CSR a la autoridad emisora de certificados, y ellos le proporcionarán un certificado firmado principalmente en formato der o pem que deberá configurar en el servidor web Apache o Nginx.

Crear un certificado autofirmado

openssl req -x509 -sha256 -nodes -newkey rsa:2048 -keyout gfselfsigned.key -out gfcert.pem

El comando anterior generará un certificado autofirmado y un archivo de claves con RSA de 2048 bits. También he incluido sha256 ya que se considera más seguro en este momento.

Consejo: por defecto, generará un certificado autofirmado válido sólo durante un mes, por lo que puede considerar definir el parámetro -days para ampliar la validez.

Ej: para tener un autofirmado válido durante dos años.

openssl req -x509 -sha256 -nodes -days 730 -newkey rsa:2048 -keyout gfselfsigned.key -out gfcert.pem

Verifique el archivo CSR

openssl req -noout -text -in geekflare.csr

La verificación es esencial para asegurarse de que está enviando la CSR a la autoridad emisora con los detalles requeridos.

Crear clave privada RSA

openssl genrsa -out clave.privada 2048

Si sólo necesita generar una clave privada RSA, puede utilizar el comando anterior. He incluido 2048 para una encriptación más fuerte.

Eliminar la frase de contraseña de la clave

openssl rsa -in certkey.key -out nopassphrase.key

Si está utilizando la frase de contraseña en el archivo de clave y utiliza Apache, entonces cada vez que inicie, tendrá que introducir la contraseña. Si usted está molesto con la introducción de una contraseña, entonces usted puede utilizar el anterior openssl rsa -in geekflare.key -check para eliminar la clave passphrase de una clave existente.

Verificar la clave privada

openssl rsa -in certkey.key -check

Si duda de su archivo de claves, puede utilizar el comando anterior para comprobarlo.

Verificar archivo de certificado

openssl x509 -in certfile.pem -text -noout

Si desea validar los datos del certificado como CN, OU, etc., puede utilizar el comando anterior que le proporcionará los detalles del certificado.

Verificar la Autoridad Firmante del Certificado

openssl x509 -in certfile.pem -noout -issuer -issuer_hash

La autoridad emisora de certificados firma todos los certificados y en caso de que necesite comprobarlos.

Comprobar el valor hash de un certificado

openssl x509 -noout -hash -in bestflare.pem

Convertir DER a formato PEM

openssl x509 -inform der -in sslcert.der -out sslcert.pem

Normalmente, la autoridad de certificación le dará los certificados SSL en formato .der, y si necesita utilizarlos en formato apache o .pem, entonces el comando anterior le ayudará.

Convertir formato PEM a DER

openssl x509 -formato der -in sslcert.pem -out sslcert.der

En caso de que necesite cambiar el formato .pem a .der

Convierta el certificado y la clave privada al formato PKCS#12

openssl pkcs12 -export -out sslcert.pfx -inkey key.pem -in sslcert.pem

Si necesita utilizar un cert con la aplicación java o con cualquier otra que sólo acepte el formato PKCS#12, puede utilizar el comando anterior, que generará un único archivo pfx que contendrá el certificado y la clave.

Consejo: también puede incluir el certificado en cadena pasando -chain como se indica a continuación.

openssl pkcs12 -export -out sslcert.pfx -inkey key.pem -in sslcert.pem -chain cacert.pem

Crear CSR utilizando una clave privada existente

openssl req -out certificado.csr -key existente.key -nuevo

Si no desea crear una nueva clave privada en lugar de utilizar una existente, puede seguir con el comando anterior.

Comprobar el contenido del cert en formato PKCS12

openssl pkcs12 -info -nodos -in cert.p12

PKCS12 es un formato binario, por lo que no podrá ver el contenido en el bloc de notas u otro editor. El comando anterior le ayudará a ver el contenido del archivo PKCS12.

Convertir el formato PKCS12 en un certificado PEM

openssl pkcs12 -in cert.p12 -out cert.pem

Si desea utilizar el formato pkcs12 existente con Apache o sólo en formato pem, esto le será útil.

Probar el certificado SSL de una URL concreta

openssl s_client -connect tuurl.com:443 -showcerts

Utilizo esto bastante a menudo para validar el certificado SSL de una URL particular desde el servidor. Es muy útil para validar el protocolo, el cifrado y los detalles del cert.

Averiguar la versión de OpenSSL

versión openssl

Si es responsable de garantizar la seguridad de OpenSSL, probablemente una de las primeras cosas que debe hacer es verificar la versión.

Comprobar la fecha de caducidad del certificado del archivo PEM

openssl x509 -noout -in certificado.pem -fechas

Útil si está planeando poner algún control para comprobar la validez. Le mostrará una fecha en sintaxis notBefore y notAfter. notAfter es la que tendrá que verificar para confirmar si un certificado ha caducado o sigue siendo válido.

Ej:

[root@Chandan opt]# openssl x509 -noout -in bestflare.pem -dates
notBefore=4 jul 14:02:45 2015 GMT
notAfter=4 de agosto 09:46:42 2015 GMT
[root@Chandan opt]#

Comprobar la fecha de caducidad del certificado de la URL SSL

openssl s_client -connect secureurl.com:443 2>/dev/null | openssl x509 -noout -enddate

También es útil si desea controlar la fecha de caducidad del certificado SSL de forma remota o de una URL en particular.

Ej:

[root@Chandan opt]# openssl s_client -connect google.com:443 2>/dev/null | openssl x509 -noout -enddate

notAfter=8 dic 00:00:00 2015 GMT

Compruebe si se acepta SSL V2 o V3 en la URL

Para comprobar SSL V2

openssl s_client -connect secureurl.com:443 -ssl2

Para comprobar SSL V3

openssl s_client -connect secureurl.com:443 -ssl3

Para comprobar TLS 1.0

openssl s_client -connectar secureurl.com:443 -tls1

Para comprobar TLS 1.1

openssl s_client -connectar secureurl.com:443 -tls1_1

Para comprobar TLS 1.2

openssl s_client -connectar secureurl.com:443 -tls1_2

Si está asegurando un servidor web y necesita validar si SSL V2/V3 está activado o no, puede utilizar el comando anterior. Si está activado, obtendrá «CONECTADO«, si no, «fallo de handshake»

Verificar si el cifrado particular es aceptado en la URL

openssl s_client -cipher 'ECDHE-ECDSA-AES256-SHA' -connect secureurl:443

Si está trabajando en hallazgos de seguridad y los resultados del pen test muestran que alguno de los cifrados débiles es aceptado, entonces para validarlo, puede utilizar el comando anterior.

Por supuesto, tendrá que cambiar el cifrado y la URL contra la que desea realizar la prueba. Si el cifrado mencionado es aceptado, entonces obtendrá «CONECTADO» de lo contrario «fallo de handshake»

Espero que los comandos anteriores le ayuden a saber más sobre OpenSSL para gestionar certificados SSL para su sitio web.