Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Menegakkan Versi Minimum TLS 1.2
Untuk menambahkan peningkatan keamanan saat berkomunikasi dengan AWS layanan, Anda harus mengonfigurasi penggunaan TLS 1.2 atau yang lebih baru. AWS ParallelCluster Saat Anda menggunakan AWS ParallelCluster, Python digunakan untuk mengatur versi TLS.
Untuk memastikan tidak AWS ParallelCluster menggunakan versi TLS lebih awal dari TLS 1.2, Anda mungkin perlu mengkompilasi ulang OpenSSL untuk menerapkan minimum ini dan kemudian mengkompilasi ulang Python untuk menggunakan OpenSSL yang baru dibangun.
Tentukan Protokol yang Didukung Saat Ini
Pertama, buat sertifikat yang ditandatangani sendiri untuk digunakan untuk server pengujian dan SDK Python menggunakan OpenSSL.
$
openssl req -subj '/CN=localhost' -x509 -newkey rsa:4096 -nodes -keyout key.pem -out cert.pem -days 365
Kemudian putar server uji menggunakan OpenSSL.
$
openssl s_server -key key.pem -cert cert.pem -www
Di jendela terminal baru, buat lingkungan virtual dan instal Python SDK.
$
python3 -m venv test-env source test-env/bin/activate pip install botocore
Buat skrip Python baru bernama check.py
yang menggunakan pustaka HTTP dasar 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'))
Jalankan skrip baru Anda.
$
python check.py
Ini menampilkan detail tentang koneksi yang dibuat. Cari “Protocol:" di output. Jika outputnya adalah "TLSv1.2" atau yang lebih baru, SDK default ke TLS v1.2 atau yang lebih baru. Jika ini adalah versi sebelumnya, Anda perlu mengkompilasi ulang OpenSSL dan mengkompilasi ulang Python.
Namun, bahkan jika instalasi Python Anda default ke TLS v1.2 atau yang lebih baru, Python masih mungkin melakukan negosiasi ulang ke versi lebih awal dari TLS v1.2 jika server tidak mendukung TLS v1.2 atau yang lebih baru. Untuk memeriksa bahwa Python tidak secara otomatis melakukan negosiasi ulang ke versi sebelumnya, restart server pengujian dengan yang berikut ini.
$
openssl s_server -key key.pem -cert cert.pem -no_tls1_3 -no_tls1_2 -www
Jika Anda menggunakan versi OpenSSL yang lebih lama, Anda mungkin tidak memiliki -no_tls_3
flag yang tersedia. Jika ini masalahnya, hapus bendera karena versi OpenSSL yang Anda gunakan tidak mendukung TLS v1.3. Kemudian jalankan kembali skrip Python.
$
python check.py
Jika instalasi Python Anda dengan benar tidak menegosiasikan ulang untuk versi yang lebih awal dari TLS 1.2, Anda akan menerima kesalahan 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)')))
Jika Anda dapat membuat koneksi, Anda perlu mengkompilasi ulang OpenSSL dan Python untuk menonaktifkan negosiasi protokol lebih awal dari TLS v1.2.
Kompilasi OpenSSL dan Python
Untuk memastikan bahwa AWS ParallelCluster tidak bernegosiasi untuk apa pun yang lebih awal dari TLS 1.2, Anda perlu mengkompilasi ulang OpenSSL dan Python. Untuk melakukan ini, salin konten berikut untuk membuat skrip dan menjalankannya.
#!/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
Ini mengkompilasi versi Python yang memiliki OpenSSL yang ditautkan secara statis yang tidak secara otomatis menegosiasikan apa pun lebih awal dari TLS 1.2. Ini juga menginstal OpenSSL di /opt/openssl-with-min-tls1_2
direktori dan menginstal Python di direktori. /opt/python-with-min-tls1_2
Setelah Anda menjalankan skrip ini, konfirmasikan instalasi versi baru Python.
$
/opt/python-with-min-tls1_2/bin/python3 --version
Ini harus mencetak yang berikut ini.
Python 3.8.1
Untuk mengonfirmasi versi baru Python ini tidak menegosiasikan versi lebih awal dari TLS 1.2, jalankan kembali langkah-langkah dari menggunakan versi Python Tentukan Protokol yang Didukung Saat Ini yang baru diinstal (yaitu,). /opt/python-with-min-tls1_2/bin/python3