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.