View a markdown version of this page

Bekerja dengan TLS di SDK untuk Java - AWS SDK for Java 2.x

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 untuk Java

Menggunakan AWS SDK untuk Java 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 disarankan.

TLS 1.3 adalah prasyarat untuk mengaktifkan kriptografi pasca-kuantum, yang mungkin memerlukan tindakan atau konfigurasi tambahan. Untuk mempelajari lebih lanjut, lihat Mengaktifkan T https://docs.aws.amazon.com/sdkref/latest/guide/pqtls-details.html LS 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 TLS/SSL didukung.

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 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 CRT HTTP

Jika Anda menggunakan klien HTTP AWS CRT, properti debug Java TLS yang ditunjukkan dalam contoh sebelumnya tidak berpengaruh karena CRT menggunakan tumpukan TLS-nya sendiri. Untuk memeriksa detail permintaan tingkat jaringan dengan klien HTTP CRT, aktifkan pencatatan kabel. Untuk informasi selengkapnya, lihat Aktifkan pencatatan kawat.

Menerapkan versi TLS minimum

SDK untuk Java selalu lebih memilih 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 HTTP Apache, Netty, dan URL Connection, 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 mengkonfigurasi versi TLS, lihat dokumentasi untuk platform Java Anda.

Untuk klien HTTP AWS CRT, yang menggunakan tumpukan TLS-nya sendiri, properti jdk.tls.client.protocols sistem tidak berpengaruh. Sebagai gantinya, gunakan opsi minTlsVersion pembangun untuk menerapkan versi TLS minimum.

TlsVersionEnum (software.amazon.awssdk.http.crt.TlsVersion) memberikan nilai-nilai berikut:

TLS_1_3

Menegakkan 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 TLS CRT default macOS, tidak mendukung TLS 1.3. Untuk digunakan TlsVersion.TLS_1_3 di macOS, Anda harus menyetel 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 melemparIllegalStateException.

AWS Upgrade titik akhir API ke TLS 1.2

Lihat posting blog ini untuk informasi tentang titik AWS akhir API yang pindah ke TLS 1.2 untuk versi minimum.