Cómo administrar la infraestructura de clave pública con OpenSSL
OpenSSL es un conjunto de herramientas criptográficas de código abierto con enfoque en Secure Socket Layer / Transport Layer Security o SSL / TLS, ampliamente implementado en sistemas GNU / Linux, desempeña un papel clave en nuestra experiencia diaria en Internet. Hoy te señalaré algunos comandos que te ayudarán a gestionar Infraestructura de clave pública X.509 (PKI) y también use este kit de herramientas para cifrar / descifrar archivos y otros datos con esta gran herramienta
Este documento se basa principalmente en ejemplos, puede consultar los ejemplos según sea necesario, en algunos casos verá más de una forma de realizar una operación, en otros habrá contraseñas que debe cambiar antes de usar en su entorno.
Gestión de claves OpenSSL
La mayoría de las operaciones se basan en claves y aquí hay algunos comandos para tratar con claves públicas y privadas.
RSA
RSA es uno de los sistemas de algoritmos de criptografía de clave pública más implementados y aquí hay algunas operaciones básicas.
Generación de clave privada RSA protegida Triple DES de 2048 bits de longitud protegida por la frase de contraseña tonterías123
openssl genrsa -passout pass:nonsense123 -des3 -out rsa-2048-priv-key.pem 2048
Puede escribir el correspondiente Llave pública a un archivo como desee.
openssl rsa -in rsa-2048-priv-key.pem -pubout -out rsa-2048-public-key.pem
Puede eliminar la contraseña de una clave protegida y volcar la clave en un archivo nuevo
openssl rsa -in priv-key.pem -out priv-key-no-pass.pem
El siguiente comando permite verificar su clave.
openssl rsa -check -in server-key.pem
DSA
El algoritmo de firma digital es una alternativa a RSA.
Genere parámetros DSA.
openssl dsaparam -out dsa.param 2048
Genere la clave DSA utilizando los parámetros existentes.
openssl gendsa -des3 -out ca.key dsa.param
Certificados X.509
Ahora vamos a mostrar algunos comandos para administrar certificados, solicitudes de firma y listas de revocación.
Generación de solicitud de firma de certificado utilizando una clave privada existente.
openssl req -new -key server-key.pem -out server-csr.csr
Creación de una nueva solicitud de firma de certificado y una nueva clave privada RSA de 2048 bits de longitud.
openssl req -out service-csr.pem -new -newkey rsa:2048 -nodes -keyout service-key.pem
Verifique la solicitud de firma del certificado.
openssl req -in server-csr.pem -noout -verify -key server-key.pem
Firma de una solicitud de certificado.
openssl x509 -req -days 3650 -signkey ca.key -in ca.csr -out ca.crt
Generando un certificado autofirmado con clave en modo batch.
openssl req -subj "/C=BR/L=Rio de Janeiro/O=My Company/CN=www.mycomp.com" -newkey rsa:2048 -nodes -keyout domain.key -x509 -days 365 -out domain.crt
Volcar fechas e información del certificado.
openssl x509 -noout -in apache.crt -text -purpose -dates -hash -ocspid
Revocar un certificado.
openssl ca -revoke mycert.pem
Generando una CRL.
openssl ca -gencrl -config openssl.cnf -crldays 7 -crlexts crl_ext -out $crl_dir/file.crl
Analizar objetos con ASN1 a salida estándar.
openssl asn1parse -in ca.crt
Conversión de formatos de codificación
Habrá ocasiones en las que necesitará convertir una codificación de certificado a otra, puede enfrentar esto, por ejemplo, si trabaja en un entorno mixto con Unices, Windows y Java.
Convierta un certificado codificado PEM a DER.
openssl x509 -inform PEM -outform DER -in ca.crt -out ca.der
Entonces es lo opuesto, convertir un DER en PEM.
openssl x509 -inform DER -outform PEM -in ca.der -out ca.pem
Prueba con los subcomandos s_client y s_server
Puede realizar pruebas en claves / certificados y servicios con s_client y s_server.
Pruebe su certificado y clave iniciando s_server.
openssl s_server -key ca.key -cert ca.crt
Conectando al servidor de prueba usando s_client.
openssl s_client -host localhost -port 4433 -CApath /etc/ssl/certs/
Otra conexión s_client que usa y muestra certificado, clave y en modo de depuración.
openssl s_client -connect localhost:4433 -key ca.k'ey -cert ca.crt -debug -showcerts
Inicie una capa de transporte protegida para conectarse a un servidor de correo.
openssl s_client -connect test.smtp.org:25 -starttls smtp -showcerts
Cifrado de archivos y secuencias con OpenSSL
También puede utilizar OpenSSL para cifrar datos en su computadora directamente.
Cifrar archivos
Cifre archivos usando AES-256-CBC con SHA1 como Message Digest.
openssl enc -aes-256-cbc -md sha1 -e -in arquivo -out arquivo.crypt
El descifrado del archivo AES-256-CBC debe ser el siguiente.
openssl enc -aes-256-cbc -md sha1 -d -in arquivo.crypt -out arquivo
Cifrar archivo con Triple DES.
openssl enc -des3 -e -in arquivo -out arquivo
Descifre el archivo cifrado Triple DES.
openssl enc -des3 -d -in arquivo.crypt -out arquivo.decrypted
Encriptación de transmisiones
Junto con los archivos, también puede cifrar transmisiones como enchufes de red, tuberías y otras E / S * nix. En el siguiente ejemplo usamos OpenSSL para enviar de forma segura el archivo passwd a través de un enlace de red inseguro.
Servidor
Primero configuramos un servidor Netcat con el que estará esperando la conexión. Usted puede descargar Netcat aquí.
nc -l -p 99 8| xz -d | openssl enc -aes-256-cbc -d > /client/bkp/etc/passwd
Cliente
Ahora puede usar netcat como cliente para conectarse y enviar su archivo.
cat /etc/passwd | openssl enc -e -aes-256-cbc | xz -z | nc servidor 99
Conclusión
Estos son algunos de los comandos más utilizados, puede usar estos comandos para administrar sus claves, certificados y datos confidenciales. Para obtener más información, consulte la documentación oficial, allí encontrará detalles de estos y otros comandos y todo lo demás que se ajuste a sus necesidades.
¡Gracias por leer!