Saat menggunakan SDK V2.0, aplikasi Anda mengakses Layanan Alibaba Cloud melalui HTTPS secara default. Anda dapat menggunakan parameter protocol dari kelas com.aliyun.teaopenapi.models.Config untuk memilih protokol komunikasi yang diinginkan. Nilai yang valid adalah HTTP atau HTTPS. Untuk transmisi data yang aman, selalu gunakan HTTPS.
com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config();
config.setProtocol("HTTPS");
Saat mengakses sumber daya melalui protokol HTTPS, SDK secara default mengaktifkan verifikasi Sertifikat SSL/TLS. Jika lingkungan Anda tidak memiliki sertifikat yang diperlukan, Anda mungkin mengalami error kegagalan verifikasi sertifikat. Anda dapat menggunakan parameter ignoreSSL dari kelas com.aliyun.teautil.models.RuntimeOptions untuk mengontrol apakah verifikasi Sertifikat SSL/TLS diaktifkan. Misalnya, di lingkungan staging, Anda dapat mengatur ignoreSSL ke true guna mengabaikan verifikasi sertifikat selama pengujian sementara.
Aktifkan validasi Sertifikat SSL/TLS di lingkungan produksi.
com.aliyun.teautil.models.RuntimeOptions runtimeOptions = new com.aliyun.teautil.models.RuntimeOptions();
// true: lewati validasi sertifikat, false: validasi sertifikat (default adalah false)
runtimeOptions.ignoreSSL = true;
Permasalahan umum koneksi HTTPS
Client Java melaporkan error Connection reset
Saat memanggil API melalui HTTPS dari kode Java, Anda mungkin menemui error Connection reset atau javax.net.ssl.SSLException, meskipun URL yang sama berfungsi dengan baik di browser. Hal ini biasanya terjadi karena Versi TLS yang digunakan oleh waktu proses Java tidak sesuai dengan versi yang didukung oleh server.
Akar Penyebab
-
JDK 7 dan versi sebelumnya menggunakan TLS 1.0 secara default, sedangkan JDK 8 menggunakan TLS 1.2 secara default.
-
Server target telah menonaktifkan TLS 1.0 dan TLS 1.1 serta hanya mendukung TLS 1.2 atau versi yang lebih tinggi.
-
Browser secara otomatis melakukan negosiasi ke Versi TLS tertinggi yang didukung, tetapi client Java menggunakan versi default JDK, sehingga menyebabkan perilaku yang tidak konsisten.
Solusi
Setelah membuat objek Config, atur secara eksplisit Versi TLS ke 1.2 menggunakan argumen JVM atau melalui kode.
-
Opsi 1: Atur Argumen Startup JVM
Tambahkan parameter berikut ke perintah start Anda:
java -Dhttps.protocols=TLSv1.2 -jar your-app.jar -
Opsi 2: Tentukan Versi TLS dalam Kode
// Atur properti sistem di titik masuk program System.setProperty("https.protocols", "TLSv1.2");
Setelah menerapkan perubahan tersebut, jalankan ulang program Anda dan pastikan panggilan HTTPS berfungsi dengan benar. Jika error masih terjadi, periksa Versi TLS dan paket sandi yang didukung oleh server target, lalu pastikan kompatibilitasnya dengan lingkungan Java Anda.