Erzwingen einer Mindestversion von TLS - AWS Command Line Interface

Diese Dokumentation bezieht sich AWS CLI nur auf Version 1 von. Dokumentation zu Version 2 von finden Sie im Benutzerhandbuch für Version 2. AWS CLI

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Erzwingen einer Mindestversion von TLS

Um die Sicherheit bei der Kommunikation mit AWS-Services zusätzlich zu erhöhen, sollten Sie TLS 1.2 oder höher verwenden. Wenn Sie die AWS CLI verwenden, wird Python zum Festlegen der TLS-Version verwendet.

Um sicherzustellen, dass die AWS CLI Version 1 keine TLS-Version vor Version TLS 1.2 verwendet, müssen Sie möglicherweise OpenSSL neu kompilieren, um das Verwenden dieser Mindestversion zu erzwingen, und dann Python neu kompilieren, um das neu erstellte OpenSSL zu verwenden.

Ermitteln Ihrer derzeit unterstützten Protokolle

Erstellen Sie zunächst mit OpenSSL ein selbstsigniertes Zertifikat, das für den Testserver und das Python-SDK verwendet werden soll.

$ openssl req -subj '/CN=localhost' -x509 -newkey rsa:4096 -nodes -keyout key.pem -out cert.pem -days 365

Starten Sie dann einen Testserver mit OpenSSL.

$ openssl s_server -key key.pem -cert cert.pem -www

Erstellen Sie in einem neuen Terminalfenster eine virtuelle Umgebung und installieren Sie das SDK für Python.

$ python3 -m venv test-env source test-env/bin/activate pip install botocore

Erstellen Sie ein neues Python-Skript namens check.py, das die dem SDK zugrunde liegende HTTP-Bibliothek verwendet.

$ import urllib3 URL = 'https://localhost:4433/' http = urllib3.PoolManager( ca_certs='cert.pem', cert_reqs='CERT_REQUIRED', ) r = http.request('GET', URL) print(r.data.decode('utf-8'))

Führen Sie Ihr neues Skript aus.

$ python check.py

Damit werden Details über die hergestellte Verbindung angezeigt. Suchen Sie in der Ausgabe nach „Protokoll:". Wenn die Ausgabe „TLSv1.2“ oder höher lautet, ist das SDK auf TLS v1.2 oder höher voreingestellt. Wenn es sich um eine frühere Version handelt, müssen Sie OpenSSL und Python neu kompilieren.

Auch wenn die Installation von Python auf TLS v1.2 oder höher voreingestellt ist, ist es jedoch weiterhin möglich, dass Python neu auf eine frühere Version als TLS v1.2 verhandelt, wenn der Server TLS v1.2 oder höher nicht unterstützt. Um zu überprüfen, ob Python nicht automatisch auf frühere Versionen neu verhandelt, starten Sie den Testserver erneut mit Folgendem.

$ openssl s_server -key key.pem -cert cert.pem -no_tls1_3 -no_tls1_2 -www

Wenn Sie eine frühere Version von OpenSSL verwenden, steht Ihnen die -no_tls_3-Flag möglicherweise nicht zur Verfügung. Wenn dies der Fall ist, entfernen Sie das Flag, da die von Ihnen verwendete Version von OpenSSL TLS v1.3 nicht unterstützt. Führen Sie dann das Python-Skript aus.

$ python check.py

Wenn die Installation von Python korrekterweise für Versionen vor TLS 1.2 nicht neu verhandelt, sollten Sie einen SSL-Fehler erhalten.

$ urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='localhost', port=4433): Max retries exceeded with url: / (Caused by SSLError(SSLError(1, '[SSL: UNSUPPORTED_PROTOCOL] unsupported protocol (_ssl.c:1108)')))

Wenn Sie eine Verbindung herstellen können, müssen Sie OpenSSL und Python neu kompilieren, um das Aushandeln von Protokollen vor TLS v1.2 zu deaktivieren.

Kompilieren von OpenSSL und Python

Um sicherzustellen, dass das SDK oder die AWS CLI keine Verhandlung für eine Version vor TLS 1.2 vornimmt, müssen Sie OpenSSL und Python neu kompilieren. Kopieren Sie dazu den folgenden Inhalt, um ein Skript zu erstellen und auszuführen.

#!/usr/bin/env bash set -e OPENSSL_VERSION="1.1.1d" OPENSSL_PREFIX="/opt/openssl-with-min-tls1_2" PYTHON_VERSION="3.8.1" PYTHON_PREFIX="/opt/python-with-min-tls1_2" curl -O "https://www.openssl.org/source/openssl-$OPENSSL_VERSION.tar.gz" tar -xzf "openssl-$OPENSSL_VERSION.tar.gz" cd openssl-$OPENSSL_VERSION ./config --prefix=$OPENSSL_PREFIX no-ssl3 no-tls1 no-tls1_1 no-shared make > /dev/null sudo make install_sw > /dev/null cd /tmp curl -O "https://www.python.org/ftp/python/$PYTHON_VERSION/Python-$PYTHON_VERSION.tgz" tar -xzf "Python-$PYTHON_VERSION.tgz" cd Python-$PYTHON_VERSION ./configure --prefix=$PYTHON_PREFIX --with-openssl=$OPENSSL_PREFIX --disable-shared > /dev/null make > /dev/null sudo make install > /dev/null

Dadurch wird eine Version von Python kompiliert, die über ein statisch verknüpftes OpenSSL verfügt, das nicht automatisch eine frühere Version als TLS 1.2 aushandelt. Dadurch werden auch OpenSSL im /opt/openssl-with-min-tls1_2-Verzeichnis und Python im /opt/python-with-min-tls1_2-Verzeichnis installiert. Nachdem Sie dieses Skript ausgeführt haben, bestätigen Sie die Installation der neuen Version von Python.

$ /opt/python-with-min-tls1_2/bin/python3 --version

Dadurch sollte Folgendes ausgedruckt werden.

$ Python 3.8.1

Um zu bestätigen, dass diese neue Version von Python keine frühere Version als TLS 1.2 aushandelt, führen Sie die Schritte unter Ermitteln Ihrer derzeit unterstützten Protokolle mit der neu installierten Python-Version (also /opt/python-with-min-tls1_2/bin/python3) erneut aus.