OpenSSL es un conjunto de herramientas de código abierto que se utiliza para implementar los protocolos Secure Socket Layer (SSL) y Transport Layer Security (TLS). El kit de herramientas está cargado con toneladas de funcionalidades que se pueden realizar usando varias opciones. Como administrador de Linux, debe conocer los comandos de openssl para proteger su red, lo que incluye probar servidores POP, IMAP, certificados https, generar claves autofirmadas, velocidades de evaluación comparativa, etc.
Bueno, el usuario final también puede hacer uso de los comandos de openssl para generar CSR (Solicitudes de firma de certificado), convertir PEM a PKCS12, PKC12 a PEM, verificar certificados, extraer nombres distinguidos, etc...
¡De acuerdo! Aquí vamos,
1. ¿Cómo instalar el kit de herramientas de OpenSSL?
Nada difícil hacer esto. Si ha configurado YUM en su máquina, ejecute el siguiente comando.
$yum install openssl
$yum install openssl-devel
Si está ejecutando Ubuntu, el comando será así.
$apt-get install openssl
$apt-get install openssl-devel
Instalar OpenSSL desde la fuente
También puede descargar fuente OpenSSL y compilar como se explica aquí .
2. ¿Cómo comprobar la versión de OpenSSL?
$openssl version OpenSSL 1.0.0-fips 29 Mar 2010
También puede recuperar información detallada usando la opción '-a',
$openssl version -a
OpenSSL 1.0.0-fips 29 de marzo de 2010
construido en:lunes 4 de marzo 22:19:53 UTC de 2013
plataforma:linux-x86_64
opciones:bn(64,64) md2(int ) rc4(8x,int) des(idx,cisc,16,int) blowfish(idx)
compilador:gcc -fPIC -DOPENSSL_PIC -DZLIB -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -DKRB5_MIT -m64 -DL_ENDIAN -DTERMIO -Pared -O2 -g -tubería -Pared -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector –param=ssp-buffer-size=4 -m64 -mtune=generic -Wa,–noexecstack -DMD32_REG_T=int -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DAES_ASM -DWHIRLPOOL_ASM
OPENSSLDIR:“/etc/pki/tls”
motores:aesni dinámico
¿Su servidor de producción ejecuta la versión OpenSSL 1.0.1e-fips? ? entonces aquí hay una vulnerabilidad grave de OpenSSL reportada en marzo de 2015 y nuestro equipo de expertos en seguridad también sugirió una solución rápida.
3. ¿Cómo listar las opciones de ayuda de openssl?
Identificar la lista de opciones disponibles en openssl no es tan fácil de usar. Por ejemplo, usar las opciones '-h' o '-help' o 'help' dirá "Opción no válida", pero así es como puede obtener la lista de opciones admitidas por openssl. Proporcione una opción no válida para openssl y enumerará cuáles son las opciones válidas.
openssl -h openssl:Error: '-h' is an invalid command.
Comandos estándar
asn1parse ca ciphers cms
crl crl2pkcs7 dgst dh
dhparam dsa dsaparam enc
engine errstr gendh gendsa
genpkey genrsa nseq ocsp
passwd pkcs12 pkcs7 pkcs8
pkey pkeyparam pkeyutl prime
rand req rsa rsautl
s_client s_server s_time sess_id
smime speed spkac ts
verificar versión x509
Comandos Message Digest (consulte el comando `dgst’ para obtener más detalles)
md2 md4 md5 rmd160
sha sha1
Comandos de cifrado (consulte el comando `enc' para obtener más detalles)
aes-128-cbc aes-128-ecb aes-192-cbc aes-192-ecb
aes-256-cbc aes-256- ecb base64 bf
bf-cbc bf-cfb bf-ecb bf-ofb
camelia-128-cbc camelia-128-ecb camelia-192-cbc camelia-192-ecb
camelia-256 -cbc camelia-256-ecb cast cast-cbc
cast5-cbc cast5-cfb cast5-ecb cast5-ofb
des des-cbc des-cfb des-ecb
des-ede des- ede-cbc des-ede-cfb des-ede-ofb
des-ede3 des-ede3-cbc des-ede3-cfb des-ede3-ofb
des-ofb des3 desx rc2
rc2 -40-cbc rc2-64-cbc rc2-cbc rc2-cfb
rc2-ecb rc2-ofb rc4 rc4-40
semilla semilla-cbc semilla-cfb semilla-ecb
Ahora, el mismo consejo también se puede usar para obtener ayuda para los subcomandos.
$openssl crl -h unknown option -h usage: crl args
-inform arg:formato de entrada:PEM predeterminado (DER o PEM)
-outform arg:formato de salida:PEM predeterminado
-text:imprime una versión en formato de texto
-in arg:archivo de entrada – por defecto stdin
-out arg – archivo de salida – por defecto stdout
-hash – imprimir valor hash
-fingerprint – imprimir la huella dactilar crl
-emisor – imprimir emisor DN
-lastupdate:campo lastUpdate
-nextupdate:campo nextUpdate
-crlnumber:imprime el número de CRL
-noout:no hay salida de CRL
-CAfile name:verifica CRL usando certificados en el archivo " nombre”
-CApath dir:verificar CRL usando certificados en “dir”
-nameopt arg:varias opciones de nombre de certificado
4. ¿Cómo enumerar los cifrados admitidos en openssl?
$openssl ciphers -v DHE-RSA-AES256-SHA SSLv3 Kx=DH Au=RSA Enc=AES(256) Mac=SHA1 DHE-DSS-AES256-SHA SSLv3 Kx=DH Au=DSS Enc=AES(256) Mac=SHA1 DHE-RSA-CAMELLIA256-SHA SSLv3 Kx=DH Au=RSA Enc=Camellia(256) Mac=SHA1 DHE-DSS-CAMELLIA256-SHA SSLv3 Kx=DH Au=DSS Enc=Camellia(256) Mac=SHA1 AES256-SHA SSLv3 Kx=RSA Au=RSA Enc=AES(256) Mac=SHA1 CAMELLIA256-SHA SSLv3 Kx=RSA Au=RSA Enc=Camellia(256) Mac=SHA1 PSK-AES256-CBC-SHA SSLv3 Kx=PSK Au=PSK Enc=AES(256) Mac=SHA1 EDH-RSA-DES-CBC3-SHA SSLv3 Kx=DH Au=RSA Enc=3DES(168) Mac=SHA1 EDH-DSS-DES-CBC3-SHA SSLv3 Kx=DH Au=DSS Enc=3DES(168) Mac=SHA1 DES-CBC3-SHA SSLv3 Kx=RSA Au=RSA Enc=3DES(168) Mac=SHA1 PSK-3DES-EDE-CBC-SHA SSLv3 Kx=PSK Au=PSK Enc=3DES(168) Mac=SHA1 KRB5-DES-CBC3-SHA SSLv3 Kx=KRB5 Au=KRB5 Enc=3DES(168) Mac=SHA1 KRB5-DES-CBC3-MD5 SSLv3 Kx=KRB5 Au=KRB5 Enc=3DES(168) Mac=MD5 DHE-RSA-AES128-SHA SSLv3 Kx=DH Au=RSA Enc=AES(128) Mac=SHA1 DHE-DSS-AES128-SHA SSLv3 Kx=DH Au=DSS Enc=AES(128) Mac=SHA1 DHE-RSA-SEED-SHA SSLv3 Kx=DH Au=RSA Enc=SEED(128) Mac=SHA1 DHE-DSS-SEED-SHA SSLv3 Kx=DH Au=DSS Enc=SEED(128) Mac=SHA1 DHE-RSA-CAMELLIA128-SHA SSLv3 Kx=DH Au=RSA Enc=Camellia(128) Mac=SHA1 DHE-DSS-CAMELLIA128-SHA SSLv3 Kx=DH Au=DSS Enc=Camellia(128) Mac=SHA1 AES128-SHA SSLv3 Kx=RSA Au=RSA Enc=AES(128) Mac=SHA1 SEED-SHA SSLv3 Kx=RSA Au=RSA Enc=SEED(128) Mac=SHA1 CAMELLIA128-SHA SSLv3 Kx=RSA Au=RSA Enc=Camellia(128) Mac=SHA1 PSK-AES128-CBC-SHA SSLv3 Kx=PSK Au=PSK Enc=AES(128) Mac=SHA1 RC4-SHA SSLv3 Kx=RSA Au=RSA Enc=RC4(128) Mac=SHA1 RC4-MD5 SSLv3 Kx=RSA Au=RSA Enc=RC4(128) Mac=MD5 PSK-RC4-SHA SSLv3 Kx=PSK Au=PSK Enc=RC4(128) Mac=SHA1 KRB5-RC4-SHA SSLv3 Kx=KRB5 Au=KRB5 Enc=RC4(128) Mac=SHA1 KRB5-RC4-MD5 SSLv3 Kx=KRB5 Au=KRB5 Enc=RC4(128) Mac=MD5 EDH-RSA-DES-CBC-SHA SSLv3 Kx=DH Au=RSA Enc=DES(56) Mac=SHA1 EDH-DSS-DES-CBC-SHA SSLv3 Kx=DH Au=DSS Enc=DES(56) Mac=SHA1 DES-CBC-SHA SSLv3 Kx=RSA Au=RSA Enc=DES(56) Mac=SHA1 KRB5-DES-CBC-SHA SSLv3 Kx=KRB5 Au=KRB5 Enc=DES(56) Mac=SHA1 KRB5-DES-CBC-MD5 SSLv3 Kx=KRB5 Au=KRB5 Enc=DES(56) Mac=MD5 EXP-EDH-RSA-DES-CBC-SHA SSLv3 Kx=DH(512) Au=RSA Enc=DES(40) Mac=SHA1 export EXP-EDH-DSS-DES-CBC-SHA SSLv3 Kx=DH(512) Au=DSS Enc=DES(40) Mac=SHA1 export EXP-DES-CBC-SHA SSLv3 Kx=RSA(512) Au=RSA Enc=DES(40) Mac=SHA1 export EXP-RC2-CBC-MD5 SSLv3 Kx=RSA(512) Au=RSA Enc=RC2(40) Mac=MD5 export EXP-KRB5-RC2-CBC-SHA SSLv3 Kx=KRB5 Au=KRB5 Enc=RC2(40) Mac=SHA1 export EXP-KRB5-DES-CBC-SHA SSLv3 Kx=KRB5 Au=KRB5 Enc=DES(40) Mac=SHA1 export EXP-KRB5-RC2-CBC-MD5 SSLv3 Kx=KRB5 Au=KRB5 Enc=RC2(40) Mac=MD5 export EXP-KRB5-DES-CBC-MD5 SSLv3 Kx=KRB5 Au=KRB5 Enc=DES(40) Mac=MD5 export EXP-RC4-MD5 SSLv3 Kx=RSA(512) Au=RSA Enc=RC4(40) Mac=MD5 export EXP-KRB5-RC4-SHA SSLv3 Kx=KRB5 Au=KRB5 Enc=RC4(40) Mac=SHA1 export EXP-KRB5-RC4-MD5 SSLv3 Kx=KRB5 Au=KRB5 Enc=RC4(40) Mac=MD5 export
5. ¿Cómo generar una solicitud de firma de certificado (CSR)?
El envío de una solicitud de firma de certificado implica ciertos trámites y todo el proceso varía de una autoridad de certificación (CA) a otra CA. Pero la solicitud se puede generar desde el lado del cliente, si las autoridades de certificación no proporcionan ninguna interfaz de generación de certificados.
Cuando tienes openssl, ¿qué más necesitas?
$openssl req -new -newkey rsa:1024 -nodes -keyout key.pem -out req.pem
Aquí,
req:opción utilizada para generar una solicitud.
-nuevo:genera una nueva solicitud
-newkey:genera una nueva clave
rsa:1024:Algoritmo utilizado, y longitud de clave 1024 bit. Se puede reemplazar con rsa:2048, rsa:4096, etc.
-keyout:genera la nueva clave en el archivo key.pem.
-out:genera la solicitud en el archivo 'req.pem'.
Salida de muestra,
$openssl req -new -newkey rsa:1024 -nodes -keyout key.pem -out req.pem Generating a 1024 bit RSA private key .................................................................................................++++++ ....++++++ writing new private key to 'key.pem' ----- 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) [XX]:IN State or Province Name (full name) []:CHE Locality Name (eg, city) [Default City]:CH Organization Name (eg, company) [Default Company Ltd]:F4 Organizational Unit Name (eg, section) []:IT Common Name (eg, your name or your server's hostname) []:myserver Email Address []:[email protected]
Ingrese los siguientes atributos 'adicionales'
que se enviarán con su solicitud de certificado
Una contraseña de desafío []:
Un nombre de empresa opcional []:
Archivos de salida,
$ls -rw-r--r--. 1 root root 916 Oct 28 13:06 key.pem -rw-r--r--. 1 root root 676 Oct 28 13:06 req.pem
6. ¿Cómo generar claves autofirmadas usando Openssl?
Puede generar certificados autofirmados para implementarlos en servidores. Para hacer eso, ejecute el siguiente comando. De forma predeterminada, OpenSSL utiliza el algoritmo sha1 para firmar su solicitud de certificado. También puede generar explícitamente un certificado autofirmado hash SHA256 x509 como una mejor medida de seguridad [Por cierto, sha1 ya está roto !].
$openssl req -x509 -days 365 -nodes -newkey rsa:2048 -keyout key.pem -out cert.pem
Aquí,
x509:es el estándar de certificado digital
-días:validez de su certificado, en su mayoría un año.
7. ¿Cómo probar el certificado del servidor web remoto?
Puede usar la opción de cliente de openssl para mostrar la información del certificado de un servidor remoto,
$openssl s_client -connect google.com:443 -showcerts
Salida de muestra cuando se consulta google.com,
$openssl s_client -connect google.com:443 -showcerts CONNECTED(00000003) depth=3 C = US, O = Equifax, OU = Equifax Secure Certificate Authority verify return:1 depth=2 C = US, O = GeoTrust Inc., CN = GeoTrust Global CA verify return:1 depth=1 C = US, O = Google Inc, CN = Google Internet Authority G2 verify return:1 depth=0 C = US, ST = California, L = Mountain View, O = Google Inc, CN = *.googl e.com verify return:1 --- Certificate chain 0 s:/C=US/ST=California/L=Mountain View/O=Google Inc/CN=*.google.com i:/C=US/O=Google Inc/CN=Google Internet Authority G2 -----BEGIN CERTIFICATE----- MIIHIDCCBgigAwIBAgIIPRfoBTWJubswDQYJKoZIhvcNAQEFBQAwSTELMAkGA1UE BhMCVVMxEzARBgNVBAoTCkdvb2dsZSBJbmMxJTAjBgNVBAMTHEdvb2dsZSBJbnRl
—–FINALIZAR CERTIFICADO—–
—
Certificado de servidor
subject=/C=US/ST=California/L=Mountain View/O=Google Inc/CN=*.google.com
emisor=/C=US/O=Google Inc/CN=Google Internet Authority G2
—
No se enviaron nombres de CA de certificado de cliente
—
El protocolo de enlace SSL ha leído 4055 bytes y 426 bytes escritos
—
Nuevo, TLSv1/SSLv3, el cifrado es RC4-SHA
La clave pública del servidor es de 2048 bits
Se admite la renegociación segura
Compresión:NINGUNA
Expansión:NINGUNA
Sesión SSL:
Protocolo:TLSv1
Cifrado:RC4-SHA
ID de sesión:7036D2353DD2A38D13A24F2791A65FAD5B332628C8FDD37EBF633D9575178BB4
ID de sesión:Clave maestra:113AAED5B1E5A23CA33B07AF37DD464BA671922EF5274F116FB7C7835A0749B9 48B6445AC6F10CEB78C0713727713D81 sugerencia de duración del ticket:100800 (segundos)
Ticket de sesión TLS:
0000 – d2 e0 d9 0a 1c 92 16 a7-9f a6 62 4e 06 94 24 9b ……….bN..$.
0010 – a2 da 35 9f 1b 57 1f f7-ae c2 c8 c1 28 84 48 c0 ..5..W……(.H.
0020 – ca 97 87 79 7e c3 49 13-78 ed 6b cc 6d 28 90 7a …y ~.I.x.k.m(.z
0030 – 6d 1d 11 af ac be 74 d9-2c b4 c6 2d 2e fc 7d b1 m…..t.,..-..}.
0040 – ec 23 9d c3 ec 49 80 77-bf 49 41 57 bf a3 3a 1a .#…I.w.IAW..:.
0050 – d6 3d c1 61 60 d6 e3 bf-90 6e 2f 4d 96 36 78 7d .=.a`….n/M.6x}
0060 – 7d b0 bd e0 df 22 09 01-e3 11 09 67 f1 5b 1e 49 }….”…..g.[.I
0070 – 42 02 eb 6c 6d a4 d6 5b-e8 ce ef 05 d5 f7 19 a9 B..lm..[……..
0080 – 36 77 66 8b 74 38 09 bf-6c fd 28 37 fb 3a 14 fc 6wf.t8..l.(7.:..
0090 – b2 e6 dd 2b …+
Hora de inicio:1382946144
Tiempo de espera:300 (seg)
Verificar código de retorno:0 (ok)
8. ¿Cómo verificar el certificado SSL?
$openssl verify pem-file $openssl verify mycert.pem
Salida de muestra,
mycert.pem: OK
Debería ver OK como salida. Por ejemplo, si el certificado caducó, verá una queja al respecto. OpenSSL no puede verificar todos los certificados. Por ejemplo, OpenSSL no confía en los certificados autofirmados. OpenSSL confía en el certificado al verificar el certificado del emisor que reside en '/usr/lib/ssl' (sin embargo, esta ubicación puede variar de un sistema operativo a otro). Puede seguir comandos simples de OpenSSL para averiguar qué algoritmo de firma se utiliza en los certificados SSL de sitios web seguros.
Para averiguar qué autoridades de certificación reconoce OpenSSL o en qué confía, el siguiente comando revelará el directorio que almacena los certificados de CA de confianza.
$openssl version -d
Salida de muestra,
OPENSSLDIR: "/etc/pki/tls"
9. ¿Cómo verificar o mostrar la información del certificado del servidor POP?
$openssl s_client -connect mailserver:995
10. ¿Cómo probar o verificar los servidores IMAP?
$openssl s_client -connect mailserver:993
11. ¿Cómo mostrar o probar el certificado .PEM?
$ openssl x509 -text -in usercert.pem
Salida de muestra,
Certificate: Data: Version: 3 (0x2) Serial Number: 1504 (0x5e0) Signature Algorithm: sha1WithRSAEncryption ::::::::::::::::::::::::::::::::::::::::
12. ¿Cómo ver su Certificado DN, validez, hash?
$openssl x509 -subject -in usercert.pem
Obtenga la información del emisor
openssl x509 -noout -in usercert.pem -issuer
Obtener la información de validez
openssl x509 -noout -in usercert.pem -dates
Obtener el valor hash del certificado
openssl x509 -noout -in usercert.pem -hash
Obtener la huella digital MD5
openssl x509 -noout -in usercert.pem -fingerprint
13. ¿Cómo convertir el certificado .PEM al formato .P12 o PKCS#12?
$ openssl pkcs12 -export -inkey userkey.pem -in usercert.pem -out mypcks.p12
o
$ openssl pkcs12 -export -inkey userkey.pem -in usercert.pem -out mypcks.pfx
Al convertir sus archivos .PEM a PFX o P12, se le pedirá que ingrese la contraseña que protegió su clave privada. Finalmente, el formato de salida también estará protegido con una contraseña.
14. ¿Cómo convertir el certificado .P12 al formato .PEM?
Los formatos .P12 o PFX o PCKS#12 contendrán tanto las claves públicas como las privadas. Exportar el archivo .p12 a .PEM generará dos archivos.
Para extraer la clave pública sin contraseña, ejecute el siguiente comando.
openssl pkcs12 -in mycert.p12 -out mycert.pem -nodes
Para extraer datos privados protegidos con contraseña, ejecute el siguiente comando.
openssl pkcs12 -in mycert.p12 -out mycert.pem
Deberías tener estos archivos ahora,
usercert.pem userkey.pem
15. ¿Cómo generar hash MD5 o SHA1 para un archivo?
$openssl dgst -md5 foo.gif MD5(foo.gif)= a303ed7ce439738c2ce9f0791d9799c1 openssl dgst -sha1 foo.gif SHA1(foo.gif)= e5cba219bad315b7d0d6e0912a2d423ee9801611
16. ¿Cómo codificar en base64 un archivo usando openssl?
Déjame crear un archivo de muestra,
$more tg.txt I am goin to be encoded
Para codificar en base64, ejecute el siguiente comando,
$openssl enc -base64 -in tg.txt -out tg-en.txt
Los datos codificados se almacenan en 'tg-en.txt'
$more tg-en.txt SSBhbSBnb2luIHRvIGJlIGVuY29kZWQK
17. ¿Cómo decodificar un archivo codificado en base64 usando openssl?
$openssl enc -base64 -d -in tg-en.txt I am goin to be encoded
o
$echo "SSBhbSBnb2luIHRvIGJlIGVuY29kZWQK" | openssl enc -base64 -d
18. ¿Cómo encriptar un archivo usando openssl?
Como se dijo anteriormente, verifique los cifrados disponibles usando,
$openssl ciphers -v
Para encriptar tg.txt a tg.enc usando uno de los cifrados admitidos
openssl enc -aes-256-cbc -salt -in tg.txt -out tg.enc
Obtendrá un archivo binario tg.enc, que es un archivo encriptado.
19. ¿Cómo descifrar un archivo usando Openssl?
Para descifrar el archivo binario cifrado, debe recordar el cifrado y la frase de contraseña utilizados durante el cifrado.
openssl enc -d -aes-256-cbc -in tg.enc
20. ¿Cómo verifico la velocidad de mi sistema usando la opción de evaluación comparativa de Openssl?
$openssl speed Doing md2 for 3s on 16 size blocks: 373915 md2's in 3.00s Doing md2 for 3s on 64 size blocks: 209326 md2's in 3.00s Doing md2 for 3s on 256 size blocks: 71001 md2's in 3.00s Doing md2 for 3s on 1024 size blocks: 19460 md2's in 3.00s Doing md2 for 3s on 8192 size blocks: 2506 md2's in 3.00s Doing md4 for 3s on 16 size blocks: 8402125 md4's in 3.00s Doing md4 for 3s on 64 size blocks: 6484713 md4's in 3.00s Doing md4 for 3s on 256 size blocks: 3877820 md4's in 3.00s Doing md4 for 3s on 1024 size blocks: 1473222 md4's in 3.00s Doing md4 for 3s on 8192 size blocks: 218591 md4's in 3.00s Doing md5 for 3s on 16 size blocks: 5838256 md5's in 2.99s ::::::::::::::::::::::::::::::::::::::::::::::::::::::::
OpenSSL viene con una opción de evaluación comparativa incorporada llamada "velocidad". Te dice cuántas operaciones puede realizar en un tiempo determinado.
¿Ten mas? Cuéntanos en los comentarios.