OpenSSL parancs cheatsheet

A leggyakoribb OpenSSL parancsok és használati esetek

Amikor a biztonsággal kapcsolatos feladatokról van szó, például kulcsok, CSR-ek, tanúsítványok előállításáról, az összefoglalók kiszámításáról, a TLS-kapcsolatok hibakereséséről, valamint a PKI-hez és a HTTPS-hez kapcsolódó egyéb feladatokról, akkor valószínűleg az OpenSSL eszközt használja.

Az OpenSSL rengeteg olyan funkciót tartalmaz, amelyek felhasználási esetek széles skáláját fedik le, és nehéz mindegyikükre emlékezni a szintaxisára, és nagyon könnyű eltévedni. manAz oldalak itt nem annyira hasznosak, ezért gyakran csak a Google „openssl hogyan kell használni [itt használhatjuk az esetet]”, vagy valamilyen „openssl csalólapot” keresünk, hogy felidézzük a parancs használatát és példákat láthassunk.

Ez a bejegyzés az én személyes gyűjteményem a opensslparancsrészletekből és példákból, felhasználási esetek szerint csoportosítva.

Felhasználási esetek

Itt van egy lista azokról a felhasználási esetekről, amelyekre kitérek:

  1. Az RSA és az ECDSA kulcsokkal való munka
  2. Tanúsítvány-aláírási kérelmek (CSR) létrehozása
  3. Hozzon létre X.509 tanúsítványokat
  4. Ellenőrizze a CSR-eket vagy tanúsítványokat
  5. Számítsa ki az üzenet emésztését és az base64 kódolást
  6. TLS kliens távoli kiszolgálóhoz való csatlakozáshoz
  7. Mérje meg a TLS kapcsolatot és a kézfogás idejét
  8. Konvertálás kódolás (PEM, DER) és tároló formátumok (PKCS12, PKCS7) között
  9. Sorolja fel a titkosító programcsomagokat
  10. Kézzel ellenőrizze a tanúsítvány visszavonásának állapotát az OCSP válaszadójától

Bizonyára ez nem teljes lista, de felöleli a leggyakoribb használati eseteket, és azokat is, amelyekkel dolgoztam. Például kihagyom a titkosítást és a visszafejtést, vagy az openssl-t használom a CA kezeléséhez. opensslolyan, mint egy univerzum. Soha nem lehet tudni, hol ér véget. ?

Az RSA és az ECDSA kulcsokkal való munka

Az alábbi parancsokban cserélje [bits]ki a kulcs méretét (például 2048, 4096, 8192).

Generáljon RSA kulcsot:

openssl genrsa -out example.key [bits]

Csak nyilvános kulcs vagy modul nyomtatása:

openssl rsa -in example.key -pubout

openssl rsa -in example.key -noout -modulus

Az RSA kulcs szöveges ábrázolása:

openssl rsa -in example.key -text -noout

Készítsen új RSA kulcsot, és titkosítson jelszóval az AES CBC 256 titkosítás alapján:

openssl genrsa -aes256 -out example.key [bits]

Ellenőrizze a magánkulcsát. Ha a kulcs rendelkezik átengedő kifejezéssel, a rendszer kéri:

openssl rsa -check -in example.key

Jelszó törlése a kulcsból:

openssl rsa -in example.key -out example.key

Titkosítsa a meglévő magánkulcsot jelszóval:

openssl rsa -des3 -in example.key -out example_with_pass.key

Generálja az ECDSA kulcsot. curveúgy kell kicserélni: prime256v1, secp384r1, secp521r1, vagy bármilyen más támogatott elliptikus görbe:

openssl ecparam -genkey -name [curve] | openssl ec -out example.ec.key

Az ECDSA kulcsának szöveges ábrázolása:

openssl ec -in example.ec.key -text -noout

Sorolja fel azokat az EC görbéket, amelyeket az OpenSSL könyvtár támogat:

openssl ecparam -list_curves

Adott hosszúságú DH-paraméterek létrehozása:

openssl dhparam -out dhparams.pem [bits]

Tanúsítvány-aláírási kérelmek (CSR) létrehozása

Az alábbi parancsokat, cserélje ki [digest]a nevét a támogatott hash függvény: md5, sha1, sha224, sha256, sha384vagy sha512, stb Ez jobb elkerülni a gyenge funkciók, mint a md5és sha1, és bottal sha256felett.

Hozzon létre egy CSR-t a meglévő magánkulcsból.

openssl req -new -key example.key -out example.csr -[digest]

Hozzon létre egy CSR-t és egy magánkulcsot átengedő kifejezés nélkül egyetlen parancsban:

openssl req -nodes -newkey rsa:[bits] -keyout example.key -out example.csr

Adja meg a CSR-tantárgy adatait a parancssorban, nem pedig interaktív parancssoron keresztül.

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"

Hozzon létre CSR-t a meglévő tanúsítványból és magánkulcsból:

openssl x509 -x509toreq -in cert.pem -out example.csr -signkey example.key

Hozzon létre CSR-t a több tartományú SAN-tanúsítványhoz egy openssl konfigurációs fájl megadásával:

openssl req -new -key example.key -out example.csr -config req.conf

ahol req.conf:

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

Hozzon létre X.509 tanúsítványokat

Saját aláírású tanúsítvány és új magánkulcs létrehozása a semmiből:

openssl req -nodes -newkey rsa:2048 -keyout example.key -out example.crt -x509 -days 365

Hozzon létre saját aláírással ellátott tanúsítványt a meglévő CSR és a magánkulcs használatával:

openssl x509 -req -in example.csr -signkey example.key -out example.crt -days 365

Aláírja a gyermekbizonyítványt saját „CA” tanúsítványával és annak magánkulcsával. Ha Ön CA-társaság volt, ez nagyon naiv példát mutat arra, hogyan adhat ki új tanúsítványokat.

openssl x509 -req -in child.csr -days 365 -CA ca.crt -CAkey ca.key -set_serial 01 -out child.crt

Nyomtassa ki a tanúsítvány szöveges ábrázolását

openssl x509 -in example.crt -text -noout

A tanúsítvány ujjlenyomatának kinyomtatása md5, sha1, sha256 kivonatként:

openssl x509 -in cert.pem -fingerprint -sha256 -noout

Ellenőrizze a CSR-eket vagy tanúsítványokat

CSR-aláírás ellenőrzése:

openssl req -in example.csr -verify

Ellenőrizze, hogy a magánkulcs egyezik-e egy tanúsítvánnyal és CSR-rel:

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

Ellenőrizze a tanúsítványt, feltéve, hogy rendelkezik gyökér- és minden közbenső tanúsítvánnyal, amelyek megbízhatóan vannak konfigurálva a számítógépen:

openssl verify example.crt

Ellenőrizze a tanúsítványt, ha van köztes tanúsítványlánc. A gyökértanúsítvány nem része a csomagnak, és megbízhatóként kell konfigurálni a számítógépen.

openssl verify -untrusted intermediate-ca-chain.pem example.crt

Ellenőrizze a tanúsítványt, ha van köztes tanúsítványlánc és gyökértanúsítvány, amely nincs konfigurálva megbízhatóként.

openssl verify -CAFile root.crt -untrusted intermediate-ca-chain.pem child.crt

Ellenőrizze, hogy a távoli szerver által szolgáltatott tanúsítvány fedi-e a megadott gazdagép nevét. Hasznos annak ellenőrzéséhez, hogy a mutlidomain tanúsítvány megfelelően lefedi-e az összes hosztnevet.

openssl s_client -verify_hostname www.example.com -connect example.com:443

Számítsa ki az üzenet emésztését és az base64 kódolást

Számolja md5, sha1, sha256, sha384, sha512emésztett:

openssl dgst -[hash_function] ile

cat input.file | openssl [hash_function]

Base64 encoding and decoding:

cat /dev/urandom | head -c 50 | openssl base64 | openssl base64 -d

TLS client to connect to a remote server

Connect to a server supporting TLS:

openssl s_client -connect example.com:443

openssl s_client -host example.com -port 443

Connect to a server and show full certificate chain:

openssl s_client -showcerts -host example.com -port 443 ull

Extract the certificate:

openssl s_client -connect example.com:443 2>&1 certificate.pem

Override SNI (Server Name Indication) extension with another server name. Useful for testing when multiple secure sites are hosted on same IP address:

openssl s_client -servername www.example.com -host example.com -port 443

Test TLS connection by forcibly using specific cipher suite, e.g. ECDHE-RSA-AES128-GCM-SHA256. Useful to check if a server can properly talk via different configured cipher suites, not one it prefers.

openssl s_client -host example.com -port 443 -cipher ECDHE-RSA-AES128-GCM-SHA256 2>&1 v/null

Measure TLS connection and handshake time

Measure SSL connection time without/with session reuse:

openssl s_time -connect example.com:443 -new

openssl s_time -connect example.com:443 -reuse

Roughly examine TCP and SSL handshake times using curl:

curl -kso /dev/null -w "tcp:%{time_connect}, ssldone:%{time_appconnect}\n" //example.com

Measure speed of various security algorithms:

openssl speed rsa2048

openssl speed ecdsap256

Convert between encoding and container formats

Convert certificate between DER and PEM formats:

openssl x509 -in example.pem -outform der -out example.der

openssl x509 -in example.der -inform der -out example.pem

Combine several certificates in PKCS7 (P7B) file:

openssl crl2pkcs7 -nocrl -certfile child.crt -certfile ca.crt -out example.p7b

Convert from PKCS7 back to PEM. If PKCS7 file has multiple certificates, the PEM file will contain all of the items in it.

openssl pkcs7 -in example.p7b -print_certs -out example.crt

Combine a PEM certificate file and a private key to PKCS#12 (.pfx .p12). Also, you can add a chain of certificates to PKCS12 file.

openssl pkcs12 -export -out certificate.pfx -inkey privkey.pem -in certificate.pem -certfile ca-chain.pem

Convert a PKCS#12 file (.pfx .p12) containing a private key and certificates back to PEM:

openssl pkcs12 -in keystore.pfx -out keystore.pem -nodes

List cipher suites

List available TLS cipher suites, openssl client is capable of:

openssl ciphers -v

Enumerate all individual cipher suites, which are described by a short-hand OpenSSL cipher list string. This is useful when you’re configuring server (like Nginx), and you need to test your ssl_ciphers string.

openssl ciphers -v 'EECDH+ECDSA+AESGCM:EECDH+aRSA+SHA256:EECDH:DHE+AESGCM:DHE:!RSA!aNULL:!eNULL:!LOW:!RC4'

Manually check certificate revocation status from OCSP responder

This is a multi-step process:

  1. Retrieve the certificate from a remote server
  2. Obtain the intermediate CA certificate chain
  3. Read OCSP endpoint URI from the certificate
  4. Request a remote OCSP responder for certificate revocation status

First, retrieve the certificate from a remote server:

openssl s_client -connect example.com:443 2>&1 cert.pem

You’d also need to obtain intermediate CA certificate chain. Use -showcerts flag to show full certificate chain, and manually save all intermediate certificates to chain.pem file:

openssl s_client -showcerts -host example.com -port 443 ull

Read OCSP endpoint URI from the certificate:

openssl x509 -in cert.pem -noout -ocsp_uri

Request a remote OCSP responder for certificate revocation status using the URI from the above step (e.g. //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 //ocsp.stg-int-x1.letsencrypt.org

Resources

I’ve put together a few resources about OpenSSL that you may find useful.

OpenSSL Essentials: Working with SSL Certificates, Private Keys and CSRs | DigitalOcean — //www.digitalocean.com/community/tutorials/openssl-essentials-working-with-ssl-certificates-private-keys-and-csrs

The Most Common OpenSSL Commands — //www.sslshopper.com/article-most-common-openssl-commands.html

OpenSSL: Working with SSL Certificates, Private Keys and CSRs — //www.dynacont.net/documentation/linux/openssl/

Original text