Aplicación de una versión mínima de TLS 1.2 - AWS ParallelCluster

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Aplicación de una versión mínima de TLS 1.2

Para aumentar la seguridad al comunicarse con los servicios de AWS, debe configurar la () de modo que use TLS 1.2 o una versión posterior. Cuando se utiliza AWS ParallelCluster, Python se usa para establecer la versión de TLS.

Para asegurarse de que AWS ParallelCluster no use ninguna versión de TLS anterior a TLS 1.2, es posible que tenga que volver a compilar OpenSSL para que aplique este mínimo y, a continuación, volver a compilar Python para que use el OpenSSL recién creado.

Determinar los protocolos admitidos actualmente

Primero, cree un certificado autofirmado con el fin de usarlo para el servidor de prueba y Python SDK mediante OpenSSL.

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

A continuación, cree un servidor de prueba mediante OpenSSL.

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

En una nueva ventana de terminal, cree un entorno virtual e instale Python SDK.

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

Cree un script de Python denominado check.py que use la biblioteca HTTP subyacente del 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'))

Ejecute el nuevo script.

$ python check.py

Muestra detalles sobre la conexión realizada. Busque «Protocol:» en la salida. Si el resultado es «TLSv1.2» o posterior, el SDK predeterminado es TLS v1.2 o posterior. Si se trata de una versión anterior, debe volver a compilar OpenSSL y Python.

Sin embargo, aunque la instalación de Python se establezca de forma predeterminada en TLS v1.2 o posterior, es posible que Python renegocie a una versión anterior a TLS v1.2 si el servidor no admite TLS v1.2 o posterior. Para comprobar que Python no renegocia automáticamente a versiones anteriores, reinicie el servidor de prueba con lo siguiente.

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

Si está utilizando una versión anterior de OpenSSL, es posible que la opción -no_tls_3 no esté disponible. Si este es el caso, elimine la opción, porque la versión de OpenSSL que está utilizando no admite TLS v1.3. A continuación, vuelva a ejecutar el script de Python.

$ python check.py

Si su instalación de Python no renegocia correctamente las versiones anteriores a TLS 1.2, debería recibir un error de 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)')))

Si puede establecer una conexión, debe volver a compilar OpenSSL y Python para deshabilitar la negociación de protocolos anteriores a TLS v1.2.

Compilar OpenSSL y Python

Para asegurarse de que AWS ParallelCluster no negocie a nada anterior a TLS 1.2, debe volver a compilar OpenSSL y Python. Para ello, copie el siguiente contenido con el fin de crear un script y ejecútelo.

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

Se compila una versión de Python que tiene un OpenSSL enlazado estáticamente que no negocia automáticamente a nada anterior a TLS 1.2. Esto también instala OpenSSL en el directorio /opt/openssl-with-min-tls1_2 directorio e instala Python en el directorio /opt/python-with-min-tls1_2. Después de ejecutar este script, confirme la instalación de la nueva versión de Python.

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

Se debería imprimir lo siguiente.

Python 3.8.1

Para confirmar que esta nueva versión de Python no negocia a una versión anterior de TLS 1.2, vuelva a ejecutar los pasos de Determinar los protocolos admitidos actualmente usando la versión de Python recién instalada (es decir, /opt/python-with-min-tls1_2/bin/python3).