Appliquer une version minimale de TLS - AWS Command Line Interface

Cette documentation concerne AWS CLI uniquement la version 1. Pour la documentation relative à la version 2 du AWS CLI, consultez le guide de l'utilisateur de la version 2.

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Appliquer une version minimale de TLS

Lors de l'utilisation du AWS Command Line Interface (AWS CLI), le protocole Transport Layer Security (TLS) joue un rôle crucial dans la sécurisation des communications entre AWS CLI et Services AWS. Pour renforcer la sécurité lors de la communication avec les AWS services, vous devez utiliser la version TLS 1.2 ou une version ultérieure.

Le AWS CLI and Service AWS peut échanger des données en toute sécurité, le TLS protocole assurant le cryptage, l'authentification et l'intégrité des données. En tirant parti du TLS protocole, vous AWS CLI garantissez que vos interactions Services AWS sont protégées contre les accès non autorisés et les violations de données, améliorant ainsi la sécurité globale de votre AWS écosystème.

Le modèle de responsabilité AWS partagée de s'applique à la protection des données dans AWS Command Line Interface. Comme décrit dans ce modèle, AWS est chargé de protéger l'infrastructure mondiale qui gère tous les Services AWS. La gestion du contrôle de votre contenu hébergé sur cette infrastructure relève de votre responsabilité. Vous êtes également responsable de la configuration de la sécurité et des tâches de gestion de Services AWS ce que vous utilisez. Pour plus d'informations sur la protection des données, consultezProtection des données dans le AWS CLI.

Pour vous assurer que la AWS CLI version 1 n'utilise aucune TLS version antérieure à TLS 1.2, vous devrez peut-être recompiler Open SSL pour appliquer ce minimum, puis recompiler Python pour utiliser le nouvel Open. SSL

Déterminer vos protocoles actuellement pris en charge

Créez d'abord un certificat auto-signé à utiliser pour le serveur de test et Python à l'SDKaide d'OpenSSL.

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

Démarrez ensuite un serveur de test à l'aide d'OpenSSL.

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

Dans une nouvelle fenêtre de terminal, créez un environnement virtuel et installez le SDK pour Python.

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

Créez un nouveau script Python nommé check.py qui utilise SDK la HTTP bibliothèque sous-jacente.

$ 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'))

Exécutez votre nouveau script.

$ python check.py

Des détails sur la connexion effectuée s’affichent. Recherchez « Protocole :  » dans le résultat. Si la sortie est « TLSv1 .2" ou ultérieure, la SDK valeur par défaut est TLS v1.2 ou ultérieure. S'il s'agit d'une version antérieure, vous devez recompiler Open SSL et recompiler Python.

Cependant, même si votre installation de Python utilise par défaut la version TLS 1.2 ou une version ultérieure, il est toujours possible pour Python de renégocier vers une version antérieure à la TLS v1.2 si le serveur ne prend pas en charge la version 1.2 ou ultérieure. TLS Pour vérifier que Python ne renégocie pas automatiquement des versions antérieures, redémarrez le serveur de test avec ce qui suit.

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

Si vous utilisez une version antérieure d'OpenSSL, le -no_tls_3 drapeau n'est peut-être pas disponible. Si tel est le cas, supprimez le drapeau car la version d'Open que SSL vous utilisez ne prend pas en charge la TLS version 1.3. Exécutez à nouveau le script Python.

$ python check.py

Si votre installation de Python ne renégocie pas correctement pour les versions antérieures à TLS 1.2, vous devriez recevoir un SSL message d'erreur.

$ 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)')))

Si vous parvenez à établir une connexion, vous devez recompiler Open SSL et Python pour désactiver la négociation des protocoles antérieurs à la TLS version 1.2.

Compile Open SSL et Python

Pour vous assurer que le SDK or AWS CLI ne négocie rien de antérieur à la version TLS 1.2, vous devez recompiler Open SSL et Python. Pour ce faire, copiez le contenu suivant pour créer un script et exécutez-le.

#!/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

Cela compile une version de Python qui possède un Open lié statiquement SSL qui ne négocie pas automatiquement les éléments antérieurs TLS à la version 1.2. Cela installe également Open SSL dans le /opt/openssl-with-min-tls1_2 répertoire et Python dans le /opt/python-with-min-tls1_2 répertoire. Après avoir exécuté ce script, confirmez l'installation de la nouvelle version de Python.

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

Ce qui suit devrait s’imprimer.

$ Python 3.8.1

Pour vérifier que cette nouvelle version de Python ne négocie pas une version antérieure à TLS 1.2, réexécutez les étapes d'Déterminer vos protocoles actuellement pris en chargeutilisation de la version de Python récemment installée (c'est-à-dire,/opt/python-with-min-tls1_2/bin/python3).