GNU/Linux >> Tutoriales Linux >  >> Linux

20 ejemplos de comandos OpenSSL que debes conocer

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.


Linux
  1. 10 comandos básicos de Linux que necesitas saber

  2. 6 opciones de comandos de OpenSSL que todo administrador de sistemas debería conocer

  3. 7 comandos de red de Linux que todo administrador de sistemas debería conocer

  4. Redhat vs Ubuntu:15 hechos fundamentales que debes saber

  5. 15 ejemplos de expansión del historial de Linux Bash que debe conocer

CentOS vs Ubuntu:debe conocer estos 15 hechos fundamentales

Comandos útiles de Bash que quizás no conozcas

20 comandos principales de Linux que necesitarás a diario

Los más de 50 comandos principales de Linux que DEBE conocer

Los 10 mejores muelles de Linux que DEBES probar en 2020

Datos interesantes sobre Linux que debe saber