Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Bekerja dengan TLS di SDK for Java
AWS SDK untuk Java Menggunakan kemampuan TLS dari platform Java yang mendasarinya. Dalam topik ini, kami menunjukkan contoh menggunakan implementasi OpenJDK yang digunakan oleh Amazon Corretto 17.
Untuk bekerja dengan Layanan AWS, JDK yang mendasarinya harus mendukung versi minimum TLS 1.2, tetapi TLS 1.3 direkomendasikan.
TLS 1.3 adalah prasyarat untuk mengaktifkan kriptografi pasca-kuantum, yang mungkin memerlukan tindakan atau konfigurasi tambahan. Untuk mempelajari lebih lanjut, lihat Mengaktifkan TLS pasca-kuantum hibrida.
Pengguna harus berkonsultasi dengan dokumentasi platform Java yang mereka gunakan dengan SDK untuk mengetahui versi TLS mana yang diaktifkan secara default serta cara mengaktifkan dan menonaktifkan versi TLS tertentu.
Cara memeriksa informasi versi TLS
Menggunakan OpenJDK, kode berikut menunjukkan penggunaan SSLContext untuk mencetak versi mana yang
System.out.println(Arrays.toString(SSLContext.getDefault().getSupportedSSLParameters().getProtocols()));
Misalnya, Amazon Corretto 17 (OpenJDK) menghasilkan output berikut.
[TLSv1.3, TLSv1.2, TLSv1.1, TLSv1, SSLv3, SSLv2Hello]
Untuk melihat jabat tangan SSL beraksi dan versi TLS apa yang digunakan, Anda dapat menggunakan properti sistem javax.net.debug.
Misalnya, jalankan aplikasi Java yang menggunakan TLS.
java app.jar -Djavax.net.debug=ssl:handshake
Aplikasi mencatat jabat tangan SSL yang mirip dengan yang berikut ini.
... javax.net.ssl|DEBUG|10|main|2022-12-23 13:53:12.221 EST|ClientHello.java:641|Produced ClientHello handshake message ( "ClientHello": { "client version" : "TLSv1.2", ... javax.net.ssl|DEBUG|10|main|2022-12-23 13:53:12.295 EST|ServerHello.java:888|Consuming ServerHello handshake message ( "ServerHello": { "server version" : "TLSv1.2", ...
AWS Debugging TLS klien HTTP CRT
Jika Anda menggunakan klien HTTP AWS CRT, properti debug Java TLS yang ditunjukkan pada contoh sebelumnya tidak berpengaruh karena CRT menggunakan tumpukan TLS sendiri. Untuk memeriksa detail permintaan tingkat jaringan dengan klien HTTP CRT, aktifkan pencatatan kawat. Untuk informasi selengkapnya, lihat Aktifkan pencatatan kawat.
Menerapkan versi TLS minimum
SDK for Java selalu lebih menyukai versi TLS terbaru yang didukung oleh platform dan layanan. Pendekatan untuk menerapkan versi TLS minimum tertentu berbeda tergantung pada klien HTTP yang Anda gunakan.
Untuk klien Apache, Netty, dan URL Connection HTTP, yang menggunakan tumpukan Java TLS, gunakan properti sistem. jdk.tls.client.protocols Misalnya, untuk menerapkan TLS 1.3 untuk klien layanan SDK, berikan properti sistem berikut.
java -Djdk.tls.client.protocols=TLSv1.3 -jar app.jar
Untuk informasi selengkapnya tentang mengonfigurasi versi TLS, lihat dokumentasi untuk platform Java Anda.
Untuk klien HTTP AWS CRT, yang menggunakan tumpukan TLS sendiri, properti jdk.tls.client.protocols sistem tidak berpengaruh. Sebagai gantinya, gunakan opsi minTlsVersion pembuat untuk menerapkan versi TLS minimum.
TlsVersionsoftware.amazon.awssdk.http.crt.TlsVersion) memberikan nilai-nilai berikut:
TLS_1_3-
Menerapkan TLS 1.3 sebagai versi minimum.
SYSTEM_DEFAULT-
Menggunakan perilaku negosiasi versi TLS default platform.
Contoh berikut membuat klien HTTP AWS CRT sinkron yang memberlakukan TLS 1.3 sebagai versi minimum.
import software.amazon.awssdk.http.crt.AwsCrtHttpClient; import software.amazon.awssdk.http.crt.TlsVersion; AwsCrtHttpClient httpClient = AwsCrtHttpClient.builder() .minTlsVersion(TlsVersion.TLS_1_3) .build();
Contoh berikut membuat klien HTTP AWS CRT asinkron yang memberlakukan TLS 1.3 sebagai versi minimum.
import software.amazon.awssdk.http.crt.AwsCrtAsyncHttpClient; import software.amazon.awssdk.http.crt.TlsVersion; AwsCrtAsyncHttpClient asyncHttpClient = AwsCrtAsyncHttpClient.builder() .minTlsVersion(TlsVersion.TLS_1_3) .build();
Anda kemudian dapat meneruskan klien HTTP yang dikonfigurasi ke klien AWS layanan.
import software.amazon.awssdk.services.s3.S3Client; import software.amazon.awssdk.http.crt.AwsCrtHttpClient; import software.amazon.awssdk.http.crt.TlsVersion; S3Client s3Client = S3Client.builder() .httpClientBuilder(AwsCrtHttpClient.builder() .minTlsVersion(TlsVersion.TLS_1_3)) .build();
Persyaratan macOS untuk TLS 1.3
Apple Secure Transport, backend macOS CRT TLS default, tidak mendukung TLS 1.3. Untuk digunakan TlsVersion.TLS_1_3 di macOS, Anda harus mengatur variabel lingkungan AWS_CRT_USE_NON_FIPS_TLS_13 ke nilai yang tidak kosong sebelum memulai aplikasi. Ini mengalihkan CRT ke backend s2n-tls-nya.
Perhatikan pertimbangan berikut saat Anda menggunakan variabel lingkungan ini:
-
Backend s2n-tls tidak. FIPS-validated
-
Backend s2n-tls tidak terintegrasi dengan macOS Keychain.
Jika Anda tidak menyetel variabel lingkungan ini di macOS, permintaan pertama gagal dengan CRT-side kesalahan.
Pengecualian timbal balik dengan pengaturan TLS pasca-kuantum
Anda tidak dapat menggabungkan postQuantumTlsEnabled(false) denganminTlsVersion(TlsVersion.TLS_1_3). Opsi ini saling eksklusif dalam konteks CRT TLS. Jika Anda menentukan keduanya, pembangun melempar fileIllegalStateException.
AWS Upgrade titik akhir API ke TLS 1.2
Lihat posting blog