GNU/Linux >> Znalost Linux >  >> Linux

6 Možnosti příkazu OpenSSL, které by měl znát každý správce systému

Zabezpečení transportní vrstvy (TLS) je důležitou součástí jakékoli bezpečnostní strategie a aplikace mimo webové servery stále více využívají ochrany, kterou nabízí kryptografie s veřejným klíčem. Sada nástrojů OpenSSL je základní nástroj, který musí znát každý správce systému, pokud je odpovědný za údržbu aplikací chráněných TLS. V tomto článku předvádím některé z nejběžnějších příkazů, které denně používám. Zatímco mnoho článků se zaměřuje na generování žádostí o podpis certifikátu (CSR) nebo certifikátů s vlastním podpisem, tento článek stráví nějaký čas přezkoumáním příkazů OpenSSL a jednoduchých řádků nad rámec procesu generování certifikátu.

[ Také by vás mohlo těšit: Zpřístupnění certifikátů CA nástrojům příkazového řádku Linuxu ]

Kontrola platnosti certifikátu

Jedním z nejběžnějších kroků pro odstraňování problémů, které podniknete, je kontrola základní platnosti řetězce certifikátů zaslaného serverem, což lze provést pomocí openssl s_client příkaz. Níže uvedený příklad ukazuje úspěšně ověřený řetězec certifikátů odeslaný serverem (redhat.com) po připojení na portu 443. -brief příznak vylučuje některé podrobnější výstupy, které by OpenSSL normálně zobrazilo. Všimněte si, že „Ověření“ se zobrazí jako „OK.“

Ve výchozím nastavení openssl s_client bude číst ze standardního vstupu pro data k odeslání na vzdálený server. Přidání echo na jednořádkový odešle nový řádek a okamžitě ukončí spojení. Bez toho byste museli stisknout Ctrl+C pro ukončení připojení.

$ echo | openssl s_client -connect redhat.com:443 -brief
CONNECTION ESTABLISHED
Protocol version: TLSv1.2
Ciphersuite: ECDHE-RSA-AES128-GCM-SHA256
Peer certificate: C = US, ST = North Carolina, L = Raleigh, O = "Red Hat, Inc.", OU = Information Technology, CN = *.redhat.com
Hash used: SHA256
Signature type: RSA
Verification: OK
Supported Elliptic Curve Point Formats: uncompressed
Server Temp Key: ECDH, P-256, 256 bits
DONE

Porovnejte výše uvedený výstup s příkladem níže. V tomto výstupu můžete jasně vidět, že ověření selhalo s chybou:„certifikát s vlastním podpisem.“

$ echo | openssl s_client -connect self-signed.badssl.com:443 -brief
depth=0 C = US, ST = California, L = San Francisco, O = BadSSL, CN = *.badssl.com
verify error:num=18:self signed certificate
CONNECTION ESTABLISHED
Protocol version: TLSv1.2
Ciphersuite: ECDHE-RSA-AES128-GCM-SHA256
Peer certificate: C = US, ST = California, L = San Francisco, O = BadSSL, CN = *.badssl.com
Hash used: SHA512
Signature type: RSA
Verification error: self signed certificate
Supported Elliptic Curve Point Formats: uncompressed:ansiX962_compressed_prime:ansiX962_compressed_char2
Server Temp Key: ECDH, P-256, 256 bits
DONE

Určení, kdy vyprší platnost certifikátu

Každý sysadmin zažil ostudu, která plyne z povolení vypršení platnosti certifikátu pro veřejně přístupný web. Existuje spousta monitorovacích nástrojů, jak to sledovat a zajistit, aby se vám to nestalo, ale co když chcete jen rychle zkontrolovat datum vypršení platnosti certifikátu z příkazového řádku? OpenSSL vás pokryje.

Kontrola data vypršení platnosti certifikátu zahrnuje jeden řádek složený ze dvou příkazů OpenSSL:s_client a x509 . Už jste viděli, jak s_client naváže připojení k serveru v předchozím příkladu. Propojením výstupu do x509 , dobu platnosti certifikátu můžete získat pomocí -dates vlajka. Níže jsou uvedeny příklady platného i prošlého certifikátu.

# A valid certificate that hasn’t expired yet
$ echo | openssl s_client -connect redhat.com:443 2>/dev/null | openssl x509 -noout -dates
notBefore=Jul  9 00:00:00 2019 GMT
notAfter=Aug  2 12:00:00 2021 GMT

# A certificate that expired in 2015
$ echo | openssl s_client -connect expired.badssl.com:443 2>/dev/null | openssl x509 -noout -dates
notBefore=Apr  9 00:00:00 2015 GMT
notAfter=Apr 12 23:59:59 2015 GMT

Poznámka :Pokud místo certifikátu serveru obdržíte výchozí certifikát SSL, podívejte se na toto vysvětlení SNI (Server Name Indication).

Kontrola rozšíření certifikátu

Rozšíření X509 umožňují přidat do certifikátu další pole. Jedním z nejběžnějších je alternativní název předmětu (SAN). SAN certifikátu umožňuje přidružit více hodnot (např. více FQDN) k jednomu certifikátu. SAN se používá i v případě, že neexistuje více hodnot, protože použití běžného názvu certifikátu pro ověření je zastaralé.

Podobně jako u předchozího jednořádkového výstupu, propojení výstupu mezi více příkazy OpenSSL usnadňuje kontrolu konkrétních rozšíření certifikátu a umožňuje zobrazit sítě SAN přidružené k certifikátu:

$  echo | openssl s_client -connect redhat.com:443 2>/dev/null | openssl x509 -noout -ext subjectAltName
X509v3 Subject Alternative Name:
    DNS:*.redhat.com, DNS:redhat.com

Další běžná sada rozšíření zahrnuje základní omezení a použití klíče certifikátu. Konkrétně můžete chtít zkontrolovat, zda je povoleno používat certifikát jako certifikační autoritu. Opět to lze provést stejným způsobem, jako můžete zkontrolovat SAN:

$  openssl x509 -ext basicConstraints,keyUsage -noout -in /usr/share/ca-certificates/mozilla/VeriSign_Universal_Root_Certification_Authority.crt
X509v3 Basic Constraints: critical
    CA:TRUE
X509v3 Key Usage: critical
    Certificate Sign, CRL Sign

Kontrola zastaralých šifer nebo verzí TLS

Existují vynikající webové nástroje, jako je Qualys SSL Lab, které vám poskytují úplnou zprávu o zabezpečení vaší konfigurace TLS. To zahrnuje upozornění na použití nezabezpečených šifrovacích sad a dalších konfiguračních parametrů, které mohou oslabit bezpečnostní pozici zdroje chráněného TLS. Možná však budete chtít spustit rychlý test z příkazového řádku a OpenSSL to usnadní.

Nejprve můžete uvést podporované šifry pro konkrétní verzi SSL/TLS pomocí openssl ciphers příkaz. Níže můžete vidět, že jsem uvedl seznam podporovaných šifer pro TLS 1.3. -s příznak říká příkazu ciphers, aby tiskl pouze ty šifry, které podporuje zadaná verze TLS (-tls1_3 ):

$ openssl ciphers -s -tls1_3
TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256

s_client příkaz pak lze použít k testování různých verzí TLS a šifrovacích sad. Web Ciphersuites.info je užitečným úložištěm informací o síle různých šifrovacích sad. Například pokus o použití slabé sady TLS_PSK_WITH_AES_128_CBC_SHA proti serveru, který ji nepodporuje, povede k chybě:

openssl s_client -connect redhat.com:443 -cipher PSK-AES128-CBC-SHA -quiet -no_tls1_3
139963477378368:error:141A90B5:SSL routines:ssl_cipher_list_to_bytes:no ciphers available:../ssl/statem/statem_clnt.c:3794:No ciphers enabled for max supported SSL/TLS version

Podobně můžete určit verzi protokolu TLS použitého v připojení. Níže uvedený příklad ukazuje, že server TLS 1.1 nepodporuje. Úplný seznam možností naleznete v manuálové stránce.

$ openssl s_client -connect redhat.com:443 -tls1_1 -quiet
139890998576448:error:141E70BF:SSL routines:tls_construct_client_hello:no protocols available:../ssl/statem/statem_clnt.c:1112:

Kontrola certifikátu

Zabýval jsem se pohledem na konkrétní části certifikátu, jako jsou data platnosti nebo rozšíření X509. Někdy prostě chcete vidět vše o konkrétním certifikátu. Nástroj X509 lze použít s -noout (pro potlačení tisku zakódovaného certifikátu), -text (pro tisk textových informací o certifikátu) a -in (pro určení vstupního souboru) vytisknete vše, co byste chtěli vědět o konkrétním certifikátu. Níže uvedený příklad používá soubor certifikátu v mém místním systému, ale stejně snadno můžete výstup z openssl s_client , jak je vidět v předchozích příkladech.

$ openssl x509 -text -noout -in /usr/share/ca-certificates/mozilla/VeriSign_Universal_Root_Certification_Authority.crt
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            40:1a:c4:64:21:b3:13:21:03:0e:bb:e4:12:1a:c5:1d
        Signature Algorithm: sha256WithRSAEncryption
        Issuer: C = US, O = "VeriSign, Inc.", OU = VeriSign Trust Network, OU = "(c) 2008 VeriSign, Inc. - For authorized use only", CN = VeriSign Universal Root Certification Authority
        Validity
            Not Before: Apr  2 00:00:00 2008 GMT
            Not After : Dec  1 23:59:59 2037 GMT
        Subject: C = US, O = "VeriSign, Inc.", OU = VeriSign Trust Network, OU = "(c) 2008 VeriSign, Inc. - For authorized use only", CN = VeriSign Universal Root Certification Authority
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                RSA Public-Key: (2048 bit)
                Modulus:
                    00:c7:61:37:5e:b1:01:34:db:62:d7:15:9b:ff:58:
                    5a:8c:23:23:d6:60:8e:91:d7:90:98:83:7a:e6:58:
                    19:38:8c:c5:f6:e5:64:85:b4:a2:71:fb:ed:bd:b9:
                    da:cd:4d:00:b4:c8:2d:73:a5:c7:69:71:95:1f:39:
                    3c:b2:44:07:9c:e8:0e:fa:4d:4a:c4:21:df:29:61:
                    8f:32:22:61:82:c5:87:1f:6e:8c:7c:5f:16:20:51:
                    44:d1:70:4f:57:ea:e3:1c:e3:cc:79:ee:58:d8:0e:
                    c2:b3:45:93:c0:2c:e7:9a:17:2b:7b:00:37:7a:41:
                    33:78:e1:33:e2:f3:10:1a:7f:87:2c:be:f6:f5:f7:
                    42:e2:e5:bf:87:62:89:5f:00:4b:df:c5:dd:e4:75:
                    44:32:41:3a:1e:71:6e:69:cb:0b:75:46:08:d1:ca:
                    d2:2b:95:d0:cf:fb:b9:40:6b:64:8c:57:4d:fc:13:
                    11:79:84:ed:5e:54:f6:34:9f:08:01:f3:10:25:06:
                    17:4a:da:f1:1d:7a:66:6b:98:60:66:a4:d9:ef:d2:
                    2e:82:f1:f0:ef:09:ea:44:c9:15:6a:e2:03:6e:33:
                    d3:ac:9f:55:00:c7:f6:08:6a:94:b9:5f:dc:e0:33:
                    f1:84:60:f9:5b:27:11:b4:fc:16:f2:bb:56:6a:80:
                    25:8d
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Basic Constraints: critical
                CA:TRUE
            X509v3 Key Usage: critical
                Certificate Sign, CRL Sign
            1.3.6.1.5.5.7.1.12: 
                0_.].[0Y0W0U..image/gif0!0.0...+..............k...j.H.,{..0%.#http://logo.verisign.com/vslogo.gif
            X509v3 Subject Key Identifier: 
                B6:77:FA:69:48:47:9F:53:12:D5:C2:EA:07:32:76:07:D1:97:07:19
    Signature Algorithm: sha256WithRSAEncryption
         4a:f8:f8:b0:03:e6:2c:67:7b:e4:94:77:63:cc:6e:4c:f9:7d:
         0e:0d:dc:c8:b9:35:b9:70:4f:63:fa:24:fa:6c:83:8c:47:9d:
         3b:63:f3:9a:f9:76:32:95:91:b1:77:bc:ac:9a:be:b1:e4:31:
         21:c6:81:95:56:5a:0e:b1:c2:d4:b1:a6:59:ac:f1:63:cb:b8:
         4c:1d:59:90:4a:ef:90:16:28:1f:5a:ae:10:fb:81:50:38:0c:
         6c:cc:f1:3d:c3:f5:63:e3:b3:e3:21:c9:24:39:e9:fd:15:66:
         46:f4:1b:11:d0:4d:73:a3:7d:46:f9:3d:ed:a8:5f:62:d4:f1:
         3f:f8:e0:74:57:2b:18:9d:81:b4:c4:28:da:94:97:a5:70:eb:
         ac:1d:be:07:11:f0:d5:db:dd:e5:8c:f0:d5:32:b0:83:e6:57:
         e2:8f:bf:be:a1:aa:bf:3d:1d:b5:d4:38:ea:d7:b0:5c:3a:4f:
         6a:3f:8f:c0:66:6c:63:aa:e9:d9:a4:16:f4:81:d1:95:14:0e:
         7d:cd:95:34:d9:d2:8f:70:73:81:7b:9c:7e:bd:98:61:d8:45:
         87:98:90:c5:eb:86:30:c6:35:bf:f0:ff:c3:55:88:83:4b:ef:
         05:92:06:71:f2:b8:98:93:b7:ec:cd:82:61:f1:38:e6:4f:97:
         98:2a:5a:8d

Generování některých náhodných dat

V tuto chvíli jste si zvykli na připojení k serverům a kontrolu certifikátů. Skončím jedním posledním trikem, který se mi často hodí. openssl rand příkaz lze použít ke generování pseudonáhodných bajtů. -base64 flag zakóduje výstup base64 a poskytne vám náhodný řetězec, který lze použít jako heslo nebo pro jiné aplikace, které vyžadují náhodný řetězec. Jen se ujistěte, že počet bajtů je dělitelný třemi, abyste se vyhnuli vyplnění.

$  openssl rand -base64 9
Emo+xQINmYoU

[ Získejte tuto bezplatnou knihu od Red Hat a O'Reilly – Kubernetes Operators:Automation the Container Orchestration Platform. ] 

Sbalit

V tomto článku jste se naučili některé základní příkazy OpenSSL, které vám mohou usnadnit každodenní život správce systému. OpenSSL je velmi výkonná sada nástrojů (a softwarová knihovna) a tento článek se dotkl pouze povrchu jeho funkčnosti. Tyto příkazy jsou však dobrým výchozím bodem pro rozvoj dalších znalostí o OpenSSL a zároveň užitečnou sadou nástrojů, které by měl mít v sadě nástrojů každý správce systému, který pravidelně pracuje se servery chráněnými TLS.


Linux
  1. 10 příkazů, které by měl znát každý uživatel Linuxu

  2. Rozebírání příkazu free:Co potřebuje vědět správce systému Linux

  3. 17 Linuxových příkazů by měl znát každý správce systému

  1. Užitečné možnosti ps

  2. Seznam příkazů Linuxu, které by měl znát každý vývojář

  3. 8 úžasných argumentů příkazového řádku v Perlu, které byste měli vědět

  1. Zvuková témata v Linuxu:Co by měl vědět každý uživatel

  2. 3 užitečné hacky, které musí znát každý uživatel Linuxu

  3. 3 dovednosti, které by měl přinést každý správce systému Linux