HTTPS und IMAPS-Verbindungen Testen und Analysieren
OpenSSL kann vielseitig eingesetzt werden, so können nicht nur Schlüssel und Zertifikate für SSL/TLS Verschlüsselte Verbindungen generiert werden, auch sind deren Analysen und Tests möglich. Dieser Beitrag zeigt die Anwendung von OpenSSL zur überprüfung und Analyse, beim Zugriff mit HTTPS auf Webserver über TCP Port 443, und STARTTLS über TCP 587, oder IMAPS TCP 993 zu Mailserver, dazu OpenSSL auf dem Computer benötigt wird.
Bei SSLLabs können SSL/TLS Server Tests durchgeführt werden, es wird der Verbindungsaufbau mit vielen verschiedenen Browsern durchgeführt und angezeigt, und welche Verschlüsselung erreicht wurde. So wird in der Auswertung ersichtlich, welche Verschlüsselungsverfahren und Schlüsselaustauschverfahren eingesetzt wurden.
HTTPS-Verbindung Testen mit OpenSSL
Sollen nur einzelne und individuelle Tests durchgeführt werden, zeigen dies die folgenden Beispiele. Es wird eine verschlüsselte Verbindung zu unblog.ch aufgebaut und anschließend die Webseite abgerufen.
1 2 |
openssl s_client -connect unblog.ch:443 -showcerts |
In einer Situation bei dieser anstelle des Standard Port 443 für HTTPS ein alternativer Port genutzt wird, beispielsweise 4443, ist die Anwendung dieselbe, mit :4443 wird die Portnummer angegeben.
Möchte man das Public Zertifikat einer Webseite im RAW Text abrufen, kann durch folgende Kommandozeile das Zertifikat ausgegeben werden.
1 2 |
openssl s_client -connect think.unblog.ch:443 -showcerts | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' |
Dieser Befehl wird in einem Linux Terminal, in macOS Terminal, in Git Bash, oder in einer WSL Session ausgeführt, die Ausgabe zwischen:
von —–BEGIN CERTIFICATE—–
bis —–END CERTIFICATE—–
1 2 3 4 5 6 7 |
-----BEGIN CERTIFICATE----- MIIFajCCBFKgAwIBAgISAwYFPWKaEox8MgKHV5yqROeWMA0GCSqGSIb3DQEBCwUA MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQD ExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMzAeFw0yMDA3MTcwMzAyMTZaFw0y ... -----END CERTIFICATE----- |
Mit Copy Paste in Notepad, und im PEM / CER Format (mit Endung .cer) als Datei speichern.
Mit doppelklick auf das so gespeicherte öffentliche Zertifikat, öffnet sich dieses und zeigt sich unter Windows wie folgt.
SMTPS Verbindung Testen mit OpenSSL
Mit OpenSSL kann ermittelt werden, ob ein Mailserver (MTA) Verschlüsselte STARTTLS Verbindungen anbietet, mit folgender Kommandozeile.
1 2 |
openssl s_client -connect smtp-gw-246.server.com:587 -starttls smtp |
Die Abfrage zeigt uns das öffentliche Zertifikat an, danach die Verschlüsselungsstärke, den Algorithmus (SHA256), die TLS Version (TLSv1.2), und Cipher (ECDHE-RSA-AES256-GCM-SHA384) und weitere Status Informationen.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
subject=CN = smtp-gw-246.server.com issuer=C = US, O = Let's Encrypt, CN = Let's Encrypt Authority X3 --- No client certificate CA names sent Peer signing digest: SHA256 Peer signature type: RSA Server Temp Key: ECDH, P-256, 256 bits --- SSL handshake has read 3441 bytes and written 480 bytes Verification: OK --- New, TLSv1.2, Cipher is ECDHE-RSA-AES256-GCM-SHA384 Server public key is 2048 bit Secure Renegotiation IS supported Compression: NONE Expansion: NONE No ALPN negotiated SSL-Session: Protocol : TLSv1.2 Cipher : ECDHE-RSA-AES256-GCM-SHA384 Session-ID: E1528C64C3CC7A9B28C4E1C2EA33EA0BEF1BACB6602B066351A49C705E192EB5 Session-ID-ctx: Master-Key: 573AB776B9954B51B7FE4908171752874EFCC3DE5F35ECC42AA5F04E48B736290DECC948DE252AD61188B5A94A8BAE9A PSK identity: None PSK identity hint: None SRP username: None TLS session ticket lifetime hint: 7200 (seconds) TLS session ticket: 0000 - 0b 99 b3 3a 91 90 66 a8-86 8d 0e 41 8a 90 61 9e ...:..f....A..a. |
IMAPS Verbindung mit OpenSSL Testen
IMAPs mit OpenSSL in der Kommandozeile Analysieren, mit dieser Kommandozeile lässt sich eine IMAPS (SSL/TLS) Verbindung über TCP Port 993 überprüfen.
1 2 |
openssl s_client -crlf -connect imap.gmail.com:993 |
Der Output dann wie hier mit CONNECT zu imap.gmail.com über den SSL Port 993 in etwa wie folgt in verkürzter Form.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
CONNECTED(00000174) depth=1 C = US, O = Google Trust Services, CN = GTS CA 1O1 verify error:num=20:unable to get local issuer certificate verify return:1 depth=0 C = US, ST = California, L = Mountain View, O = Google LLC, CN = imap.gmail.com verify return:1 --- Certificate chain 0 s:C = US, ST = California, L = Mountain View, O = Google LLC, CN = imap.gmail.com i:C = US, O = Google Trust Services, CN = GTS CA 1O1 1 s:C = US, O = Google Trust Services, CN = GTS CA 1O1 i:OU = GlobalSign Root CA - R2, O = GlobalSign, CN = GlobalSign --- Server certificate -----BEGIN CERTIFICATE----- MIIExjCCA66gAwIBAgIQN1SnMAZHJA0IAAAAAFMdITANBgkqhkiG9w0BAQsFADBC MQswCQYDVQQGEwJVUzEeMBwGA1UEChMVR29vZ2xlIFRydXN0IFNlcnZpY2VzMRMw ... Post-Handshake New Session Ticket arrived: SSL-Session: Protocol : TLSv1.3 Cipher : TLS_AES_256_GCM_SHA384 Session-ID: 6074E0D401DD1E1DD5608CBC6F7CA4A2779A9AB4A9313732996D6C4DBD84BC68 Session-ID-ctx: Resumption PSK: ... read R BLOCK * OK Gimap ready for requests from 12.34.56.78 t22mb67814ed Q DONE |
Möchte man hier weitergehen, kann man versuchen sich am IMAP Server zu authentifizieren und nach neuen Mails abfragen.
1 2 |
A NO [ALERT] Application-specific password required: https://support.google.com/accounts/answer/185833 (Failure) |
Gmail Antwortet nun mit A NO [ALERT], die Sicherheitseinstellungen zur Authentifizierung erfordert ein Application Passwort, da die Multi-Faktor-Authentifizierung (MFA) aktiviert ist.
1 2 |
* OK [CAPABILITY IMAP4rev1 SASL-IR LOGIN-REFERRALS ID ENABLE IDLE LITERAL+ AUTH=PLAIN AUTH=LOGIN] Dovecot (Debian) ready. |
Es folgt ein * OK mit der Ausgabe der verfügbaren Funktionalitäten (CAPABILITY), der IMAP Prompt wartet nun auf Eingaben.
Bei unserem Dovecot IMAP Server können wir uns anmelden.
1 2 |
A login imap-user passwort |
Der Login besteht normalerweise aus der Email Adresse (imap-user) und einem Passwort.
Nach erfolgreichem Login erscheint die Ausgabe ähnlich wie diese.
1 2 |
A OK [CAPABILITY IMAP4rev1 SASL-IR LOGIN-REFERRALS ID ENABLE IDLE SORT SORT=DISPLAY THREAD=REFERENCES THREAD=REFS THREAD=ORDEREDSUBJECT MULTIAPPEND URL-PARTIAL CATENATE UNSELECT CHILDREN NAMESPACE UIDPLUS LIST-EXTENDED I18NLEVEL=1 CONDSTORE QRESYNC ESEARCH ESORT SEARCHRES WITHIN CONTEXT=SEARCH LIST-STATUS BINARY MOVE SNIPPET=FUZZY LITERAL+ NOTIFY SPECIAL-USE QUOTA] Logged in |
Jetzt welchseln zum IMAP Posteingang (INBOX).
1 2 |
A select INBOX |
Der Output von select INBOX in etwa wie folgt.
1 2 3 4 5 6 7 8 9 10 |
* FLAGS (\Answered \Flagged \Deleted \Seen \Draft $Forwarded) * OK [PERMANENTFLAGS (\Answered \Flagged \Deleted \Seen \Draft $Forwarded \*)] Flags permitted. * 3 EXISTS * 0 RECENT * OK [UNSEEN 3] First unseen. * OK [UIDVALIDITY 1590737718] UIDs valid * OK [UIDNEXT 12197] Predicted next UID * OK [HIGHESTMODSEQ 39953] Highest A OK [READ-WRITE] Select completed (0.001 + 0.000 secs). |
Es sind wie zu sehen 3 ungelesene Mails in der INBOX, von der ersten Mail öffnen wir den Header (beginnt mit . Punkt).
1 2 |
. fetch 1 rfc822.header |
Der Output von . fetch 1 rfc822.header (die ersten 6 Zeilen).
1 2 3 4 5 6 7 8 9 10 |
* 1 FETCH (RFC822.HEADER {3338} Return-Path: <maxmuster@server.com> Delivered-To: maxmuster@server.com Received: from mail.server.com by mail.server.com with LMTP id sbn9BAzYQF9sJBACykIyCA (envelope-from <maxmuster@server.com>) .. . OK Fetch completed (0.001 + 0.000 secs). |
Die erste ungelesene Mail öffnet sich mit . fetch 1 rfc822.text
1 2 |
. fetch 1 rfc822.text |
Output von . fetch 1 dann in etwa wie hier bei meiner Mail.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
* 1 FETCH (RFC822.TEXT {596297} --Apple-Mail-3B8B8770-2CCE-4083-B331-2E1EDAF97C84 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Guten Tag. Anbei das PDF in der Anlage. Freundliche Grüsse --Apple-Mail-3B8C8770-2CCE-4083-B331-2E2EDBF97C94 Content-Type: application/pdf; name="Doc-21.08.2020-10-36.pdf"; x-apple-part-url=CCDB9E0F-432F-2719-AE44-000259172822 Content-Disposition: inline; filename="Doc-21.08.2020-10-36.pdf" Content-Transfer-Encoding: base64 JVBERi0jLjMKJbe+7aoKMSAwIG9iago8PA0vVHlwZSAvQ2F0YWxvZwozUGFnZXMgMiAwIFIKPj4K ZW5kc2JqCjIgMCBvYmoKPDwKL1R5cGUgL1BhZ2VzCi9LaWRzIFsgNCFxIFIgXQovQ291bnQgMQo+ ... . OK Fetch completed (0.003 + 0.034 secs). |
Es handelt sich hier also um eine Mail mit PDF Anlage, diese base64 kodiert ist.
Mit Eingabe Q wird die Verschlüsselte IMAP Session beendet.