GNU/Linux >> LINUX-Kenntnisse >  >> Linux

6 OpenSSL-Befehlsoptionen, die jeder Systemadministrator kennen sollte

Transport Layer Security (TLS) ist ein wichtiger Bestandteil jeder Sicherheitsstrategie, und Anwendungen jenseits von Webservern nutzen zunehmend den Schutz, den die Public-Key-Kryptographie bietet. Das OpenSSL-Toolkit ist das grundlegende Dienstprogramm, das jeder Systemadministrator kennen muss, wenn er für die Wartung von TLS-geschützten Anwendungen verantwortlich ist. In diesem Artikel zeige ich einige der häufigsten Befehle, die ich täglich verwende. Während sich viele Artikel auf die Generierung von Certificate Signing Requests (CSRs) oder selbstsignierten Zertifikaten konzentrieren, wird dieser Artikel einige Zeit damit verbringen, OpenSSL-Befehle und Einzeiler über den Zertifikatgenerierungsprozess hinaus zu überprüfen.

[Vielleicht gefällt Ihnen auch:CA-Zertifikate für Linux-Befehlszeilentools verfügbar machen ]

Gültigkeit des Zertifikats prüfen

Einer der häufigsten Schritte zur Fehlerbehebung besteht darin, die grundlegende Gültigkeit einer von einem Server gesendeten Zertifikatskette zu überprüfen, was mit dem openssl s_client durchgeführt werden kann Befehl. Das folgende Beispiel zeigt eine erfolgreich verifizierte Zertifikatskette, die von einem Server (redhat.com) nach einer Verbindung auf Port 443 gesendet wurde. Der -brief -Flag schließt einige der ausführlicheren Ausgaben aus, die OpenSSL normalerweise anzeigen würde. Beachten Sie, dass die "Bestätigung" als "OK" ausgegeben wird.

Standardmäßig openssl s_client liest von der Standardeingabe nach Daten, die an den Remote-Server gesendet werden sollen. Anhängen eines echo an den Einzeiler sendet einen Zeilenumbruch und beendet sofort die Verbindung. Andernfalls müssten Sie Strg+C drücken um die Verbindung zu beenden.

$ 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

Vergleichen Sie die obige Ausgabe mit dem Beispiel unten. In dieser Ausgabe können Sie deutlich sehen, dass die Überprüfung mit einem Fehler fehlgeschlagen ist:„self-signed certificate.“

$ 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

Bestimmen, wann ein Zertifikat abläuft

Jeder Systemadministrator hat die Peinlichkeit erlebt, die sich daraus ergibt, dass ein Zertifikat für eine öffentlich zugängliche Website abläuft. Es gibt viele Überwachungstools, um dies im Auge zu behalten und sicherzustellen, dass Ihnen das nicht passiert, aber was, wenn Sie nur schnell das Ablaufdatum eines Zertifikats von der Befehlszeile aus überprüfen möchten? OpenSSL deckt Sie ab.

Das Überprüfen des Ablaufdatums eines Zertifikats umfasst einen Einzeiler, der aus zwei OpenSSL-Befehlen besteht:s_client und x509 . Sie haben bereits gesehen, wie s_client stellt im vorherigen Beispiel eine Verbindung zu einem Server her. Durch Weiterleiten der Ausgabe an x509 können Sie die Gültigkeitsdauer des Zertifikats über die -dates ermitteln Flagge. Nachfolgend finden Sie Beispiele für ein gültiges und ein abgelaufenes Zertifikat.

# 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

Hinweis :Wenn Sie anstelle des Serverzertifikats ein Standard-SSL-Zertifikat erhalten, sehen Sie sich diese Erklärung von SNI (Server Name Indication) an.

Zertifikatserweiterungen prüfen

X509-Erweiterungen ermöglichen das Hinzufügen zusätzlicher Felder zu einem Zertifikat. Einer der gebräuchlichsten ist der subject alternative name (SAN). Der SAN eines Zertifikats ermöglicht die Zuordnung mehrerer Werte (z. B. mehrerer FQDNs) zu einem einzelnen Zertifikat. Das SAN wird sogar verwendet, wenn es nicht mehrere Werte gibt, da die Verwendung des allgemeinen Namens eines Zertifikats zur Überprüfung veraltet ist.

Ähnlich wie im vorangegangenen Einzeiler erleichtert das Weiterleiten der Ausgabe zwischen mehreren OpenSSL-Befehlen die Überprüfung bestimmter Zertifikatserweiterungen und ermöglicht Ihnen, die mit einem Zertifikat verknüpften SANs anzuzeigen:

$  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

Ein weiterer gängiger Satz von Erweiterungen umfasst die grundlegenden Einschränkungen und die Schlüsselverwendung eines Zertifikats. Insbesondere möchten Sie möglicherweise prüfen, ob ein Zertifikat als Zertifizierungsstelle verwendet werden darf. Auch dies kann auf die gleiche Weise erfolgen, wie Sie nach einem SAN suchen können:

$  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

Veraltete TLS-Chiffren oder -Versionen prüfen

Es gibt hervorragende webbasierte Tools wie Qualys SSL Lab, die Ihnen einen vollständigen Bericht über die Sicherheit Ihrer TLS-Konfiguration liefern. Dazu gehört, dass Sie vor der Verwendung unsicherer Verschlüsselungssammlungen und anderer Konfigurationsparameter gewarnt werden, die die Sicherheitslage einer TLS-geschützten Ressource schwächen können. Möglicherweise möchten Sie jedoch nur einen schnellen Test über die Befehlszeile ausführen, und OpenSSL macht dies einfach.

Zunächst können Sie die unterstützten Chiffren für eine bestimmte SSL/TLS-Version mit openssl ciphers auflisten Befehl. Unten sehen Sie, dass ich die unterstützten Chiffren für TLS 1.3 aufgelistet habe. Das -s Flag weist den Ciphers-Befehl an, nur die von der angegebenen TLS-Version (-tls1_3 ):

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

Der s_client Der Befehl kann dann verwendet werden, um verschiedene TLS-Versionen und Verschlüsselungssammlungen zu testen. Die Website Ciphersuites.info ist eine nützliche Sammlung von Informationen über die Stärke verschiedener Cipher Suites. Wenn Sie beispielsweise versuchen, die schwache TLS_PSK_WITH_AES_128_CBC_SHA-Suite gegen einen Server zu verwenden, der sie nicht unterstützt, führt dies zu einem Fehler:

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

Ebenso können Sie die Version des in der Verbindung verwendeten TLS-Protokolls angeben. Das folgende Beispiel zeigt, dass TLS 1.1 vom Server nicht unterstützt wird. Sehen Sie sich unbedingt die Manpage an, um eine vollständige Liste der Optionen anzuzeigen.

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

Inspizieren eines Zertifikats

Ich habe die Betrachtung bestimmter Teile eines Zertifikats behandelt, z. B. Gültigkeitsdaten oder X509-Erweiterungen. Manchmal möchten Sie einfach alles über ein bestimmtes Zertifikat sehen. Das Dienstprogramm X509 kann mit -noout verwendet werden (um das Drucken des verschlüsselten Zertifikats zu unterdrücken), -text (um Textinformationen über das Zertifikat auszudrucken) und das -in (um die Eingabedatei anzugeben) Flags, um alles auszudrucken, was Sie über ein bestimmtes Zertifikat wissen möchten. Das folgende Beispiel verwendet eine Zertifikatsdatei auf meinem lokalen System, aber Sie könnten die Ausgabe von openssl s_client genauso einfach weiterleiten , wie in den vorherigen Beispielen zu sehen.

$ 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

Einige zufällige Daten generieren

An diesem Punkt haben Sie sich mit dem Herstellen einer Verbindung zu Servern und dem Überprüfen von Zertifikaten vertraut gemacht. Ich schließe mit einem letzten Trick, der mir häufig nützlich ist. Der openssl rand Der Befehl kann verwendet werden, um pseudozufällige Bytes zu generieren. Die -base64 flag wird die Ausgabe mit base64 codieren und Ihnen eine zufällige Zeichenfolge zur Verfügung stellen, die als Passwort oder für andere Anwendungen verwendet werden kann, die eine zufällige Zeichenfolge erfordern. Stellen Sie nur sicher, dass die Anzahl der Bytes durch drei teilbar ist, um Auffüllen zu vermeiden.

$  openssl rand -base64 9
Emo+xQINmYoU

[ Holen Sie sich dieses kostenlose Buch von Red Hat und O'Reilly – Kubernetes Operators:Automating the Container Orchestration Platform. ] 

Abschluss

In diesem Artikel haben Sie einige grundlegende OpenSSL-Befehle gelernt, die Ihren Alltag als Systemadministrator erleichtern können. OpenSSL ist eine sehr leistungsstarke Suite von Tools (und Softwarebibliotheken), und dieser Artikel berührte nur die Oberfläche seiner Funktionalität. Diese Befehle sind jedoch sowohl ein guter Ausgangspunkt, um weitere Kenntnisse über OpenSSL zu entwickeln, als auch ein nützlicher Satz von Tools, die in der Toolbox jedes Systemadministrators vorhanden sein sollten, der regelmäßig mit TLS-geschützten Servern arbeitet.


Linux
  1. 3 nützliche Hacks, die jeder Linux-Benutzer kennen muss

  2. Analyse des freien Befehls:Was der Linux-Systemadministrator wissen muss

  3. Liste der Linux-Befehle, die jeder Entwickler kennen sollte

  4. dpkg-reconfigure-Befehlsoptionen

  5. Nützliche Linux-Terminal-Shortcuts, die jeder Power Linux-Benutzer kennen muss

34 grundlegende Linux-Befehle, die jeder Benutzer kennen sollte

Ubuntu-Tastaturkürzel, die jeder Benutzer kennen sollte

Lernen Sie die Netzwerkgrundlagen kennen, die jeder Systemadministrator kennen muss

5 Linux-Befehle, die jeder Linux-Benutzer kennen sollte

5 einfache Bash-Verlaufstricks, die jeder Linux-Benutzer kennen sollte

15 Beispiele für Linux Bash History-Erweiterungen, die Sie kennen sollten