GNU/Linux >> Linux Esercitazione >  >> Linux

20 Comandi OpenSSL Esempi che devi conoscere

OpenSSL è un toolkit open source utilizzato per implementare i protocolli Secure Socket Layer (SSL) e Transport Layer Security (TLS). Il toolkit è caricato con tonnellate di funzionalità che possono essere eseguite utilizzando varie opzioni. In qualità di amministratore Linux, devi conoscere i comandi openssl per proteggere la tua rete, che include test di POP, server IMAP, certificati https, generazione di chiavi autofirmate, velocità di benchmarking ecc...

Bene, l'utente finale può anche utilizzare i comandi openssl per generare CSR (Certificate Signing Requests), convertire PEM in PKCS12, PKC12 in PEM, verificare certificati, estrarre il nome distinto ecc...

Ok! Eccoci,

1. Come installare OpenSSL Toolkit?

Niente di difficile farlo. Se hai configurato YUM sulla tua macchina, esegui il comando seguente.

$yum install openssl
$yum install openssl-devel

Se stai utilizzando Ubuntu, il comando sarà così.

$apt-get install openssl
$apt-get install openssl-devel

Installa OpenSSL dal sorgente

Puoi anche scaricare sorgente OpenSSL e compilare come spiegato qui .

2. Come controllare la versione di OpenSSL?

$openssl version
OpenSSL 1.0.0-fips 29 Mar 2010

Puoi anche recuperare informazioni dettagliate utilizzando l'opzione '-a',

$openssl version -a

OpenSSL 1.0.0-fips 29 mar 2010
integrato il:lun mar 4 22:19:53 UTC 2013
piattaforma:linux-x86_64
opzioni:bn(64,64) md2(int ) rc4(8x,int) des(idx,cisc,16,int) blowfish(idx)
compiler:gcc -fPIC -DOPENSSL_PIC -DZLIB -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -DKRB5_MIT -m64 -DL_ENDIAN -DTERMIO -Wall -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fExceptionions -fstack-protector –param=ssp-buffer-size=4 -m64 -mtune=generico -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”
motori:aesni dynamic

Il tuo server di produzione esegue OpenSSL versione 1.0.1e-fips ? quindi ecco una grave vulnerabilità OpenSSL segnalata a marzo 2015 e anche una soluzione rapida è stata suggerita dal nostro team di esperti di sicurezza.

3. Come elencare le opzioni di aiuto di openssl?

Identificare l'elenco delle opzioni disponibili in openssl non è così facile da usare. Ad esempio, l'utilizzo delle opzioni "-h" o "-help" o "help" dirà "Opzione non valida", ma è così che puoi ottenere l'elenco delle opzioni supportate da openssl. Fornisci un'opzione non valida ad openssl ed elencherà quali sono le opzioni valide.

openssl -h
openssl:Error: '-h' is an invalid command.

Comandi standard
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
verify version x509

Comandi di riepilogo dei messaggi (consultare il comando `dgst' per maggiori dettagli)
md2 md4 md5 rmd160
sha sha1

Comandi di cifratura (consultare il comando `enc' per maggiori dettagli)
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
camellia-128-cbc camellia-128-ecb camellia-192-cbc camellia-192-ecb
camellia-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
seed seed-cbc seed-cfb seed-ecb

Ora, lo stesso suggerimento può essere utilizzato anche per ottenere aiuto per i sottocomandi.

$openssl crl -h
unknown option -h
usage: crl args

-inform arg – formato di input – PEM predefinito (DER o PEM)
-outform arg – formato di output – PEM predefinito
-text – stampa una versione in formato testo
-in arg – file di input – stdin predefinito
-out arg – file di output – stdout predefinito
-hash – stampa valore hash
-fingerprint – stampa l'impronta digitale crl
-issuer – stampa DN emittente
-lastupdate – campo lastUpdate
-nextupdate – campo nextUpdate
-crlnumber – stampa numero CRL
-noout – nessun output CRL
-CAnome file – verifica CRL utilizzando i certificati nel file “ name”
-CApath dir – verifica CRL usando i certificati in “dir”
-nameopt arg – varie opzioni per il nome del certificato

4. Come elencare le cifre supportate in 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. Come generare la richiesta di firma del certificato (CSR)?

L'invio di una richiesta di firma del certificato comporta determinate formalità e l'intero processo varia da autorità di certificazione (CA) a CA. Ma la richiesta può essere generata dal lato client, se le autorità di certificazione non forniscono alcuna interfaccia di generazione dei certificati.

Quando hai openssl, cos'altro ti serve?

$openssl req -new -newkey rsa:1024 -nodes -keyout key.pem -out req.pem

Ecco,

req:opzione utilizzata per generare una richiesta.

-new:genera una nuova richiesta

-newkey:genera una nuova chiave

rsa:1024:algoritmo utilizzato e lunghezza della chiave 1024 bit. Può essere sostituito con rsa:2048, rsa:4096 ecc.

-keyout:restituisce la nuova chiave nel file key.pem.

-out:emette la richiesta nel file 'req.pem'.

Esempio di output,

$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]

Inserisci i seguenti attributi "extra"
da inviare con la tua richiesta di certificato
Una password di verifica []:
Un nome di azienda facoltativo []:

File di output,

$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. Come generare chiavi autofirmate utilizzando Openssl?

È possibile generare certificati autofirmati per la distribuzione sui server. Per farlo, esegui il comando seguente. Per impostazione predefinita, OpenSSL utilizza l'algoritmo sha1 per firmare la tua richiesta di certificato. Puoi generare esplicitamente anche il certificato autofirmato hash x509 SHA256 come misura di sicurezza migliore [A proposito, sha1 è già rotto !].

$openssl req -x509 -days 365 -nodes -newkey rsa:2048 -keyout key.pem -out cert.pem

Ecco,

x509:è lo standard dei certificati digitali

-days:validità del tuo certificato, per lo più un anno.

7. Come testare il certificato del server web remoto?

Puoi utilizzare l'opzione client di openssl per visualizzare le informazioni sul certificato di un server remoto,

$openssl s_client -connect google.com:443 -showcerts

Esempio di output quando viene eseguita una query su 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

—–END CERTIFICATE—–

Certificato del server
subject=/C=US/ST=California/L=Mountain View/O=Google Inc/CN=*.google.com
issuer=/C=US/O=Google Inc/CN=Google Internet Authority G2

Nessun nome CA certificato client inviato

L'handshake SSL ha letto 4055 byte e 426 byte scritti

Nuovo, TLSv1/SSLv3, Cipher è RC4-SHA
La chiave pubblica del server è a 2048 bit
È supportata la rinegoziazione sicura
Compressione:NESSUNA
Espansione:NESSUNA
Sessione SSL:
Protocollo :TLSv1
Cifra:RC4-SHA
ID sessione:7036D2353DD2A38D13A24F2791A65FAD5B332628C8FDD37EBF633D9575178BB4
ID sessione-ctx:
Master-Key:113AAED5B1E5A23CA33B07AF37DD464BA671922EF5274F116FB7C7835A0749B9 48B6445AC6F10CEB78C0713727713D81
Key-Arg :None
Krb5 Session:None
PSK identity hintTL:nessuno
suggerimento sulla durata del biglietto:100800 (secondi)
Ticket della sessione 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 …+

Ora inizio:1382946144
Timeout:300 (sec)
Verifica codice di ritorno:0 (ok)

8. Come verificare il certificato SSL?

$openssl verify pem-file
$openssl verify mycert.pem

Esempio di output,

mycert.pem: OK

Dovresti vedere OK come output. Ad esempio, se il certificato è scaduto, vedrai un reclamo a riguardo. OpenSSL non può verificare tutti i certificati. Ad esempio, i certificati autofirmati non sono considerati attendibili da OpenSSL. OpenSSL considera attendibile il certificato verificando il certificato dell'emittente che risiede in "/usr/lib/ssl" (tuttavia questa posizione potrebbe variare da sistema operativo a sistema operativo). Puoi seguire semplici comandi OpenSSL per scoprire quale algoritmo di firma viene utilizzato nei certificati SSL di siti Web sicuri.

Per scoprire quali autorità di certificazione OpenSSL riconosce o considera attendibili, il comando seguente rivelerà la directory in cui sono archiviati i certificati CA attendibili.

$openssl version -d

Esempio di output,

OPENSSLDIR: "/etc/pki/tls"

9. Come verificare o visualizzare le informazioni sul certificato del server POP?

$openssl s_client -connect mailserver:995

10. Come testare o verificare i server IMAP?

$openssl s_client -connect mailserver:993

11. Come visualizzare o testare il certificato .PEM?

$ openssl x509 -text -in usercert.pem

Esempio di output,

Certificate:
Data:
Version: 3 (0x2)
Serial Number: 1504 (0x5e0)
Signature Algorithm: sha1WithRSAEncryption
::::::::::::::::::::::::::::::::::::::::

12. Come visualizzare il tuo certificato DN, validità, hash?

$openssl x509 -subject -in usercert.pem

Ottieni le informazioni sull'Emittente

openssl x509 -noout -in usercert.pem -issuer

Ottieni le informazioni sulla validità

openssl x509 -noout -in usercert.pem -dates

Ottieni il valore hash del certificato

openssl x509 -noout -in usercert.pem -hash

Ottieni l'impronta digitale MD5

openssl x509 -noout -in usercert.pem -fingerprint

13. Come convertire il certificato .PEM in 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

Durante la conversione dei file .PEM in PFX o P12, ti verrà chiesto di inserire la password che ha protetto la tua chiave privata. Infine, anche il formato di output sarà protetto con una password.

14. Come convertire il certificato .P12 in formato .PEM?

I formati .P12 o PFX o PCKS#12 conterranno sia le chiavi pubbliche che private. L'esportazione del file .p12 in .PEM produrrà due file.

Per estrarre la password meno la chiave pubblica, esegui il comando seguente.

openssl pkcs12 -in mycert.p12 -out mycert.pem -nodes

Per estrarre privato protetto da password, esegui il comando seguente.

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

Dovresti avere questi file ora,

usercert.pem
userkey.pem

15. Come generare un hash MD5 o SHA1 per un file?

$openssl dgst -md5 foo.gif
MD5(foo.gif)= a303ed7ce439738c2ce9f0791d9799c1
openssl dgst -sha1 foo.gif
SHA1(foo.gif)= e5cba219bad315b7d0d6e0912a2d423ee9801611

16. Come codificare in base64 un file usando openssl?

Fammi creare un file di esempio,

$more tg.txt
I am goin to be encoded

Per codificare in base64, esegui il comando seguente

$openssl enc -base64 -in tg.txt -out tg-en.txt

I dati codificati sono archiviati in 'tg-en.txt'

$more tg-en.txt
SSBhbSBnb2luIHRvIGJlIGVuY29kZWQK

17. Come decodificare il file codificato in 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. Come crittografare un file usando openssl?

Come detto in precedenza, controlla le crittografie disponibili utilizzando,

$openssl ciphers -v

Per crittografare tg.txt in tg.enc utilizzando uno dei codici supportati

openssl enc -aes-256-cbc -salt -in tg.txt -out tg.enc

Otterrai un file binario tg.enc, che è un file crittografato.

19. Come decifrare un file usando Openssl?

Per decrittografare il file binario crittografato, è necessario ricordare la cifratura e la passphrase utilizzate durante la crittografia.

openssl enc -d -aes-256-cbc -in tg.enc

20. Come posso controllare la velocità del mio sistema utilizzando l'opzione di benchmarking di 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 fornito con un'opzione di benchmarking integrata chiamata "velocità". Ti dice quante operazioni può eseguire in un dato tempo.

Avere di più? Diccelo nei commenti.


Linux
  1. 10 comandi di base di Linux che devi conoscere

  2. 6 Opzioni di comando OpenSSL che ogni amministratore di sistema dovrebbe conoscere

  3. 7 comandi di rete Linux che ogni amministratore di sistema dovrebbe conoscere

  4. Redhat vs Ubuntu:15 fatti fondamentali che devi sapere

  5. 15 Esempi di espansione della cronologia di Linux Bash che dovresti conoscere

CentOS vs Ubuntu:devi conoscere questi 15 fatti fondamentali

Utili comandi Bash di cui potresti non essere a conoscenza

20 comandi Linux principali di cui avrai bisogno ogni giorno

I 50+ migliori comandi Linux che DEVI conoscere

I 10 migliori dock Linux che DEVI provare nel 2020

Fatti interessanti su Linux che dovresti conoscere