de Alexey Samoshkin

Foaie de cheats pentru comandă OpenSSL

Cele mai frecvente comenzi și cazuri de utilizare OpenSSL

Foaie de cheats a comenzii OpenSSL

Când vine vorba de sarcini legate de securitate, cum ar fi generarea de chei, CSR-uri, certificate, calculul rezolvărilor, depanarea conexiunilor TLS și a altor sarcini legate de PKI și HTTPS, cel mai probabil ați ajunge să utilizați instrumentul OpenSSL.

OpenSSL include tone de caracteristici care acoperă o gamă largă de cazuri de utilizare și este dificil de reținut sintaxa sa pentru toate și destul de ușor de pierdut. man paginile nu sunt atât de utile aici, așa că de multe ori doar Google „openssl how to [use case here]”Sau căutați un fel de„ foaie de cheats openssl ”pentru a aminti utilizarea unei comenzi și a vedea exemple.

Această postare este colecția mea personală de openssl fragmente de comandă și exemple, grupate după caz ​​de utilizare.

Utilizați cazuri

Iată o listă de cazuri de utilizare pe care le voi acoperi:

ad-banner
  1. Lucrul cu cheile RSA și ECDSA
  2. Creați cereri de semnare a certificatului (CSR)
  3. Creați certificate X.509
  4. Verificați CSR-urile sau certificatele
  5. Calculați rezumatele mesajelor și codificarea bazei 64
  6. Client TLS pentru a vă conecta la un server la distanță
  7. Măsurați conexiunea TLS și timpul de strângere a mâinii
  8. Convertiți între formate de codificare (PEM, DER) și formate de containere (PKCS12, PKCS7)
  9. Enumerați suitele de cifrare
  10. Verificați manual starea de revocare a certificatului de la răspunsul OCSP

Cu siguranță, aceasta nu este o listă completă, dar acoperă cele mai frecvente cazuri de utilizare și le include pe cele cu care am lucrat. De exemplu, omit criptarea și decriptarea sau folosind openssl pentru gestionarea CA. openssl este ca un univers. Nu știi niciodată unde se termină. ?

Lucrul cu cheile RSA și ECDSA

În comenzile de mai jos, înlocuiți [bits] cu dimensiunea cheii (De exemplu, 2048, 4096, 8192).

Generați o cheie RSA:
openssl genrsa -out example.key [bits]

Imprimați numai cheia publică sau modulul:
openssl rsa -in example.key -pubout
openssl rsa -in example.key -noout -modulus

Tipăriți reprezentarea textuală a cheii RSA:
openssl rsa -in example.key -text -noout

Generați o nouă cheie RSA și criptați cu o frază de acces bazată pe criptare AES CBC 256:
openssl genrsa -aes256 -out example.key [bits]

Verifică cheia privată. Dacă cheia are o frază de acces, vi se va solicita:
openssl rsa -check -in example.key

Eliminați expresia de acces din cheie:
openssl rsa -in example.key -out example.key

Criptați cheia privată existentă cu o frază de acces:
openssl rsa -des3 -in example.key -out example_with_pass.key

Generați cheia ECDSA. curve se înlocuiește cu: prime256v1, secp384r1, secp521r1, sau orice altă curbă eliptică suportată:
openssl ecparam -genkey -name [curve] | openssl ec -out example.ec.key

Tipăriți reprezentarea textuală a cheii ECDSA:
openssl ec -in example.ec.key -text -noout

Enumerați curbele EC disponibile, acceptate de biblioteca OpenSSL:
openssl ecparam -list_curves

Generați parametri DH cu o lungime dată:
openssl dhparam -out dhparams.pem [bits]

Creați cereri de semnare a certificatului (CSR)

În comenzile de mai jos, înlocuiți [digest] cu numele funcției hash acceptate: md5, sha1, sha224, sha256, sha384 sau sha512, etc. Este mai bine să evitați funcțiile slabe precum md5 și sha1, și rămâneți la sha256 Si mai sus.

Creați un CSR din cheia privată existentă.
openssl req -new -key example.key -out example.csr -[digest]

Creați un CSR și o cheie privată fără o frază de trecere într-o singură comandă:
openssl req -nodes -newkey rsa:[bits] -keyout example.key -out example.csr

Furnizați informații despre subiectul CSR pe o linie de comandă, mai degrabă decât printr-un mesaj interactiv.
openssl req -nodes -newkey rsa:[bits] -keyout example.key -out example.csr -subj "/C=UA/ST=Kharkov/L=Kharkov/O=Super Secure Company/OU=IT Department/CN=example.com"

Creați un CSR din certificatul existent și din cheia privată:
openssl x509 -x509toreq -in cert.pem -out example.csr -signkey example.key

Generați un CSR pentru certificatul SAN multi-domeniu furnizând un fișier de configurare openssl:
openssl req -new -key example.key -out example.csr -config req.conf

Unde req.conf:

[req]prompt=nodefault_md = sha256distinguished_name = dnreq_extensions = req_ext
[dn]CN=example.com
[req_ext]subjectAltName=@alt_names
[alt_names]DNS.1=example.comDNS.2=www.example.comDNS.3=ftp.example.com

Creați certificate X.509

Creați un certificat autosemnat și o nouă cheie privată de la zero:
openssl req -nodes -newkey rsa:2048 -keyout example.key -out example.crt -x509 -days 365

Creați un certificat autosemnat utilizând CSR-ul existent și cheia privată:
openssl x509 -req -in example.csr -signkey example.key -out example.crt -days 365

Semnați certificatul copil folosind propriul certificat „CA” și cheia privată. Dacă ați fi o companie CA, acest lucru arată un exemplu foarte naiv al modului în care ați putea elibera noi certificate.
openssl x509 -req -in child.csr -days 365 -CA ca.crt -CAkey ca.key -set_serial 01 -out child.crt

Tipăriți reprezentarea textuală a certificatului
openssl x509 -in example.crt -text -noout

Imprimați amprenta certificatului ca md5, sha1, sha256 rezumat:
openssl x509 -in cert.pem -fingerprint -sha256 -noout

Verificați CSR-urile sau certificatele

Verificați o semnătură CSR:
openssl req -in example.csr -verify

Verificați dacă cheia privată se potrivește cu un certificat și CSR:
openssl rsa -noout -modulus -in example.key | openssl sha256
openssl x509 -noout -modulus -in example.crt | openssl sha256
openssl req -noout -modulus -in example.csr | openssl sha256

Verificați certificatul, cu condiția să aveți certificate root și orice certificate intermediare configurate ca fiind de încredere pe mașina dvs.:
openssl verify example.crt

Verificați certificatul atunci când aveți un lanț intermediar de certificate. Certificatul rădăcină nu face parte din pachet și ar trebui să fie configurat ca fiind de încredere pe mașina dvs.
openssl verify -untrusted intermediate-ca-chain.pem example.crt

Verificați certificatul, atunci când aveți un lanț de certificate intermediar și un certificat rădăcină, care nu este configurat ca unul de încredere.
openssl verify -CAFile root.crt -untrusted intermediate-ca-chain.pem child.crt

Verificați dacă certificatul transmis de un server la distanță acoperă numele de gazdă dat. Util pentru a vă verifica certificatul de domeniu mutlid acoperă corect toate numele gazdei.
openssl s_client -verify_hostname www.example.com -connect example.com:443

Calculați rezumatele mesajelor și codificarea bazei 64

calculati md5, sha1, sha256, sha384, sha512rezolvă:
openssl dgst -[hash_function] <input.feule
cat input.file | openssl [hash_functipe]

Codificare și decodare Base64:
cat /dev/urandom | head -c 50 | openssl base64 | openssl base64 -d

Client TLS pentru a vă conecta la un server la distanță

Conectați-vă la un server care acceptă TLS:
openssl s_client -connect example.com:443
openssl s_client -host example.com -port 443

Conectați-vă la un server și afișați lanțul complet de certificate:
openssl s_client -showcerts -host example.com -port 443 </dev/null

Extrageți certificatul:
openssl s_client -connect example.com:443 2>&1 < /dev/null | sed -n '/-----BEGIN/,/-----END/p' > certificate.pem

Înlocuiți extensia SNI (Server Name Indication) cu un alt nume de server. Util pentru testare atunci când mai multe site-uri securizate sunt găzduite pe aceeași adresă IP:
openssl s_client -servername www.example.com -host example.com -port 443

Testați conexiunea TLS utilizând forțat suita de cifrare specifică, de ex ECDHE-RSA-AES128-GCM-SHA256. Util pentru a verifica dacă un server poate vorbi corect prin diferite suite de cifrare configurate, nu unul pe care îl preferă.
openssl s_client -host example.com -port 443 -cipher ECDHE-RSA-AES128-GCM-SHA256 2>&1 </dev / nul

Măsurați conexiunea TLS și timpul de strângere a mâinii

Măsurați timpul de conectare SSL fără / cu reutilizarea sesiunii:
openssl s_time -connect example.com:443 -new
openssl s_time -connect example.com:443 -reuse

Examinați aproximativ timpii de strângere de mână TCP și SSL folosind curl:
curl -kso /dev/null -w "tcp:%{time_connect}, ssldone:%{time_appconnect}n" https://example.com

Măsurați viteza diferiților algoritmi de securitate:
openssl speed rsa2048
openssl speed ecdsap256

Faceți conversie între formate de codare și de container

Convertiți certificatul între formatele DER și PEM:
openssl x509 -in example.pem -outform der -out example.der
openssl x509 -in example.der -inform der -out example.pem

Combinați mai multe certificate în fișierul PKCS7 (P7B):
openssl crl2pkcs7 -nocrl -certfile child.crt -certfile ca.crt -out example.p7b

Convertiți din PKCS7 înapoi în PEM. Dacă fișierul PKCS7 are mai multe certificate, fișierul PEM va conține toate elementele din acesta.
openssl pkcs7 -in example.p7b -print_certs -out example.crt

Combinați un fișier de certificat PEM și o cheie privată la PKCS # 12 (.pfx .p12). De asemenea, puteți adăuga un lanț de certificate în fișierul PKCS12.
openssl pkcs12 -export -out certificate.pfx -inkey privkey.pem -in certificate.pem -certfile ca-chain.pem

Convertiți un fișier PKCS # 12 (.pfx .p12) care conține o cheie privată și certificate înapoi în PEM:
openssl pkcs12 -in keystore.pfx -out keystore.pem -nodes

Enumerați suitele cifrate

Listează suitele de cifrare TLS disponibile, clientul openssl este capabil să:
openssl ciphers -v

Enumerați toate suitele individuale de cifrare, care sunt descrise de un șir de listă de cifrare OpenSSL scurt. Acest lucru este util atunci când configurați serverul (cum ar fi Nginx) și trebuie să testați ssl_ciphers şir.
openssl ciphers -v 'EECDH+ECDSA+AESGCM:EECDH+aRSA+SHA256:EECDH:DHE+AESGCM:DHE:!RSA!aNULL:!eNULL:!LOW:!RC4'

Verificați manual starea de revocare a certificatului de la răspunsul OCSP

Acesta este un proces în mai mulți pași:

  1. Preluarea certificatului de pe un server la distanță
  2. Obțineți lanțul de certificate CA intermediar
  3. Citiți OCSP endpoint URI din certificat
  4. Solicitați un răspuns OCSP la distanță pentru starea de revocare a certificatului

Mai întâi, preluați certificatul de pe un server la distanță:
openssl s_client -connect example.com:443 2>&1 < /dev/null | sed -n '/-----BEGIN/,/-----END/p' > cert.pem

De asemenea, ar trebui să obțineți un lanț intermediar de certificate CA. Utilizare -showcerts pentru a afișa lanțul complet de certificate și salvați manual toate certificatele intermediare în chain.pem fişier:
openssl s_client -showcerts -host example.com -port 443 </dev/null

Citiți OCSP endpoint URI din certificat:
openssl x509 -in cert.pem -noout -ocsp_uri

Solicitați un răspuns OCSP la distanță pentru starea de revocare a certificatului utilizând URI din pasul de mai sus (de exemplu, http://ocsp.stg-int-x1.letsencrypt.org).
openssl ocsp -header "Host" "ocsp.stg-int-x1.letsencrypt.org" -issuer chain.pem -VAfile chain.pem -cert cert.pem -text -url http://ocsp.stg-int-x1.letsencrypt.org

Resurse

Am pus la punct câteva resurse despre OpenSSL pe care le-ați putea găsi utile.

Esențiale OpenSSL: Lucrul cu certificate SSL, chei private și CSR-uri | DigitalOcean – https://www.digitalocean.com/community/tutorials/openssl-essentials-working-with-ssl-certificates-private-keys-and-csrs

Cele mai frecvente comenzi OpenSSL – https://www.sslshopper.com/article-most-common-openssl-commands.html

OpenSSL: Lucrul cu certificate SSL, chei private și CSR – https://www.dynacont.net/documentation/linux/openssl/