Schlagwort-Archive: OpenSSL Verschlüsselung

OpenSSL umfasst Implementierungen der Netzwerkprotokolle und verschiedener Verschlüsselungen sowie das Programm openssl für die Kommandozeile zum Beantragen,

SSL/TLS Verbindung Testen mit OpenSSL

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.

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

$ 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—–

-----BEGIN CERTIFICATE-----
MIIFajCCBFKgAwIBAgISAwYFPWKaEox8MgKHV5yqROeWMA0GCSqGSIb3DQEBCwUA
MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQD
ExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMzAeFw0yMDA3MTcwMzAyMTZaFw0y
...
-----END CERTIFICATE-----

Mit Copy Paste in Notepad im PEM/CER Format (.cer) speichern.

Mit doppelklick auf das so gespeicherte öffentliche Zertifikat, öffnet sich dieses und zeigt sich unter Windows wie folgt.

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.

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

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.

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

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.

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.

* 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.

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.

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).

A select INBOX

Der Output von select INBOX in etwa wie folgt.

* 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).

. fetch 1 rfc822.header

Der Output von . fetch 1 rfc822.header (die ersten 6 Zeilen).

* 1 FETCH (RFC822.HEADER {3338}
Return-Path: 
Delivered-To: maxmuster@server.com
Received: from mail.server.com
        by mail.server.com with LMTP
        id sbn9BAzYQF9sJBACykIyCA
        (envelope-from )
..
. OK Fetch completed (0.001 + 0.000 secs).

Die erste ungelesene Mail öffnet sich mit . fetch 1 rfc822.text

. fetch 1 rfc822.text

Output von . fetch 1 dann in etwa wie hier bei meiner Mail.

* 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.

Postfix mit SASL-Authentifizierung verwenden

SMTP-Server müssen entscheiden, ob ein SMTP-Client autorisiert ist E-Mails zu versenden, für die der Server selbst zuständig ist.

Simple Authentication and Security Layer (SASL) Integration Postfix


Diese Anleitung beschreibt, wie man ein MTA (Mail Transport Agent) Postfix unter CentOS 7 mit CyrusSASL zur SMTP-Authentifizierung (SMTP-Auth) erweitert. Danach können Clients E-Mails mittels SMTP-Auth versenden. Diese Anleitung ist geprüft unter CentOS Linux release 7.7.1908 (Core), mit Postfix v2.10.1 und Cyrus-SASL 2.1.26. Es wird davon ausgegangen das Postfix bereits konfiguriert ist und TLS (Transport Layer Security) implementiert ist.

Postfix implementiert die SASL Library nicht selbst, sondern verwendet vorhandene Implementierungen als Bausteine. Dies bedeutet, dass einige SASL-bezogene Konfigurationsdateien zu Postfix gehören, während andere Konfigurationsdateien zu der spezifischen SASL-Implementierung gehören, die Postfix verwenden wird.

Cyrus-SASL Installation

Als root die Pakete mit folgendem Command installieren:

yum install cyrus-sasl cyrus-sasl-plain -y

Die einzelnen SASL-Mechanismen werden als RPMs installiert.

Es folgt die Einbindung für Postfix, hierzu die modifikation in der Datei /etc/postfix/master.cf vornehmen:

==========================================================================
 service type  private unpriv  chroot  wakeup  maxproc command + args
 (yes)   (yes)   (yes)   (never) (100)
 ==========================================================================
 smtps     inet  n       -       n       -       -       smtpd
   -o syslog_name=postfix/smtps
   -o smtpd_tls_wrappermode=yes
   -o smtpd_sasl_auth_enable=yes
   -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject

Damit Postfix mit SASL funktioniert, darf Postfix nicht im chroot-Verzeichnis laufen, Zeile smtps bei Position 5 (n).

SMTP-Auth für lokale Benutzer konfigurieren, wir editieren die Postfix Datei /etc/postfix/main.cf:

smtpd_tls_auth_only = no
smtp_use_tls = yes
smtpd_use_tls = yes
smtpd_sasl_auth_enable = yes
smtp_sasl_mechanism_filter = !gssapi, !login, static:all
smtpd_sasl_security_options = noanonymous
smtpd_sasl_tls_security_options = noanonymous
smtpd_sasl_type = cyrus
smtpd_sasl_path = smtpd 

Die Konfiguration von Cyrus-SASL erfolgt durch zwei Dateien. Die erste Datei /etc/sysconfig/saslauthd kann übernommen werden:

# Directory in which to place saslauthd's listening socket, pid file, and so
# on.  This directory must already exist.
SOCKETDIR=/run/saslauthd

# Mechanism to use when checking passwords.  Run "saslauthd -v" to get a list
# of which mechanism your installation was compiled with the ablity to use.
MECH=pam

# Additional flags to pass to saslauthd on the command line.  See saslauthd(8)
# for the list of accepted flags.
FLAGS=

Die SASL-Mechanismen PLAIN und LOGIN, CRAM-MD5 und DIGEST-MD5 kommen oft zum Einsatz, hierfür ist die Konfigurationsdatei /etc/sasl2/smtpd.conf zuständig, die bereitstellung wurde ebenfalls bei der Installation durchgeführt:

pwcheck_method: saslauthd
mech_list: plain login CRAM-MD5 DIGEST-MD5

Nun Cyrus-SASL Library Daemon starten und den systemd autostart aktivieren, anschliessend Postfix re-starten:

systemctl start saslauthd
systemctl enable saslauthd
systemctl restart postfix 

Der SMTP-Submission Support auf Port 587 ist nun aktiviert, überprüfen lässt sich dies mit folgendem Kommando:

ss -tuln4 | grep 587
tcp    LISTEN     0      100       *:587                  *:*

Zur Authentifizierung am SMTP-Gateway wird nun ein Benutzer erstellt, dieser E-Mails über den MTA versenden soll:

adduser -M -s /sbin/nologin User24
passwd User24

Eine lokale UserID ist für unsere Anforderung hier ausreichend, Cyrus-SASL unterstützt weiter LDAP und SQL, um mit beispielweise Kopano oder einem AD Verzeichnisdienst zu interagieren.

Cyrus-SASL SMTP-Auth Testen

Welche Mechanismen zur Authentifizierung innerhalb von STARTTLS unterstützt werden, kann mit OpenSSL überprüft werden:

openssl s_client -connect mail.relayhost.net:587 -starttls smtp

In der Ausgabe von openssl ein EHLO übergeben:

EHLO Hans
 250-mail.relayhost.net
 250-PIPELINING
 250-SIZE 27262976
 250-ETRN
 250-AUTH PLAIN LOGIN CRAM-MD5 DIGEST-MD5
 250-ENHANCEDSTATUSCODES
 250-8BITMIME
 250 DSN

Ist OpenSSL nicht vorliegend, kann dazu auch Telnet genutzt werden, es wird zum Gateway mail.relayhost.net über Port 587 eine Verbindnung hergestellt, dazu kann auch PuTTY oder KiTTY verwendet werden.

KiTTY Configuration

Nun möchten wir uns beim Gateway (MTA) Authentifizieren. Der Benutzername und das Passwort muss im base64-codierten Format an das SMTP-Gateway übertragen werden, Hierzu gibt man die folgenden Befehlszeilen ein, um die base64-Codierung für den Benutzername und das Passwort zu erhalten.

echo -en "userxy" | base64
dXNlcnh5
echo -en "password" | base64
cGFzc3dvcmQ=

Die SASL SMTP-Auth Konfiguration und Authentifizierung überprüft man wie folgt mit ausführen der folgenden Zeilen im Terminal, nach Eingabe von AUTH LOGIN der mit Base64 codierte Benutzername und das Passwort einfügen.

AUTH LOGIN
dXNlcnh5
cGFzc3dvcmQ=
$ telnet mail.relayhost.net 25
Trying mail.relayhost.net...
Connected to mail.relayhost.net
Escape character is '^]'.
220 mail.relayhost.net ESMTP MAIL Service ready at  Sat, 12 Mar 2019 09:26:12
EHLO smtp.example.com
250-smtp.example.com Hello
250-AUTH=LOGIN
250-AUTH LOGIN
250-TURN
250-SIZE 2097152
250-ETRN
250-PIPELINING
250-DSN
250-ENHANCEDSTATUSCODES
250-8bitmime
250-BINARYMIME
250-CHUNKING
250-VRFY
250 OK
AUTH LOGIN
334 VXClcm5hbWU6
dXNlcnh5
334 UGFzc4dvcmQ8
cGFzc3dvcmQ=
235 2.7.0 Authentication successful

Die Ausgabe SMTP-Auth von Postfix mit Cyrus-SASL.

Die oben kodierten Credentials bei den 334 Prompts einfügen, hier bei Zeile 24 als userxy und bei Zeile 26 unser password.

  Ein 250 STARTTLS in der Ausgabe zeigt die Voraussetzungen, das Klartext-Benutzernamen mit Passwort durch STARTTLS geschützt an das SMTP-Gateway übermittelt werden.

Eine weitere einfache Möglichkeit gibt es mit SMTPConsole ein SMTP-Gateway zu testen.

Mit SMTP Console testen
SMTPConsole