Applicazione di una versione minima di TLS 1.2 per AWS CLI - AWS Command Line Interface

Questa documentazione è valida AWS CLI solo per la versione 1. Per la documentazione relativa alla versione 2 di AWS CLI, consulta la Guida per l'utente della versione 2.

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Applicazione di una versione minima di TLS 1.2 per AWS CLI

Quando si utilizza AWS Command Line Interface (AWS CLI), il protocollo Transport Layer Security (TLS) svolge un ruolo cruciale nel proteggere la comunicazione tra AWS CLI e Servizi AWS. Per aumentare la sicurezza durante la comunicazione con i servizi AWS, è necessario configurare TLS 1.2 o versioni successive.

La AWS CLI e un Servizio AWS possono scambiare dati in modo sicuro, con il protocollo TLS che fornisce crittografia, autenticazione e integrità dei dati. Sfruttando il protocollo TLS, la AWS CLI garantisce che le interazioni con i Servizi AWS siano protette da accessi non autorizzati e violazioni dei dati, migliorando la sicurezza generale del tuo ecosistema AWS.

Il modello di responsabilità condivisa di AWSsi applica alla protezione dei dati in AWS Command Line Interface. Come descritto in questo modello, AWSè responsabile della protezione dell’infrastruttura globale che esegue tutto l’Servizi AWS. L’utente è responsabile del controllo dei contenuti ospitati su questa infrastruttura. L'utente è inoltre responsabile della configurazione della protezione e delle attività di gestione per i Servizi AWS utilizzati. Per ulteriori informazioni sulla protezione dei dati, consulta Protezione dei dati in AWS CLI.

Per garantire che la AWS CLI versione 1 non utilizzi una versione TLS precedente a TLS 1.2, potrebbe essere necessario ricompilare OpenSSL per applicare questa versione minima e quindi ricompilare Python per utilizzare il nuovo OpenSSL creato.

Determinare i protocolli attualmente supportati

Innanzitutto, creare un certificato autofirmato da utilizzare per il server di test e per l'SDK Python che utilizza OpenSSL.

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

Quindi avviare un server di test usando OpenSSL.

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

In una nuova finestra del terminale, creare un ambiente virtuale e installare l’SDK per Python.

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

Creare un nuovo script Python denominato check.py che utilizza la libreria HTTP sottostante dell'SDK.

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

Eseguire il nuovo script.

$ python check.py

In questo modo vengono visualizzati i dettagli sulla connessione effettuata. Ricercare "Protocol : " nell'output. Se l'output è "TLSv1.2" o versione successiva, l'impostazione predefinita dell'SDK è su TLS v1.2 o versione successiva. Se si tratta di una versione precedente, è necessario ricompilare OpenSSL e ricompilare Python.

Tuttavia, anche se l'installazione di Python è impostata su TLS v1.2 o versioni successive, è comunque possibile per Python rinegoziare una versione precedente a TLS v1.2 se il server non supporta TLS v1.2 o versioni successive. Per verificare che Python non rinegozi automaticamente su versioni precedenti, riavviare il server di test con quanto segue.

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

Se si sta utilizzando una versione precedente di OpenSSL, il flag -no_tls_3 potrebbe non essere disponibile. In questo caso, rimuovere il flag perché la versione di OpenSSL che si sta utilizzando non supporta TLS v1.3. Eseguire lo script Python.

$ python check.py

Se l'installazione di Python non rinegozia correttamente per le versioni precedenti a TLS 1.2, si dovrebbe ricevere un errore SSL.

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

Se si è in grado di stabilire una connessione, ricompilare OpenSSL e Python per disabilitare la negoziazione dei protocolli precedenti a TLS v1.2.

Compilare OpenSSL e Python

Per garantire che l'SDK o AWS CLI non negozi nessuna versione precedente a TLS 1.2, è necessario ricompilare OpenSSL e Python. A tale scopo, copiare il contenuto seguente per creare uno script ed eseguirlo.

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

Questa operazione esegue la compilazione di una versione di Python che ha un OpenSSL collegato staticamente che non negozia automaticamente versioni precedenti a TLS 1.2. Questa operazione installa anche OpenSSL nella directory /opt/openssl-with-min-tls1_2 e installa Python nella directory /opt/python-with-min-tls1_2. Dopo aver eseguito questo script, confermare l'installazione della nuova versione di Python.

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

Questa operazione dovrebbe stampare quanto segue.

$ Python 3.8.1

Per confermare che questa nuova versione di Python non negozi una versione precedente a TLS 1.2, eseguire nuovamente le fasi a partire da Determinare i protocolli attualmente supportati utilizzando la versione di Python appena installata (ovvero /opt/python-with-min-tls1_2/bin/python3).