El SDK V2.0 accede a los servicios de Alibaba Cloud mediante HTTPS de forma predeterminada. Para cambiar de protocolo, establezca el parámetro protocol de la clase com.aliyun.teaopenapi.models.Config con el valor HTTP o HTTPS. Se recomienda usar HTTPS para garantizar una transmisión segura de los datos.
com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config();
config.setProtocol("HTTPS");
El SDK compruebe los certificados SSL/TLS de forma predeterminada en las conexiones HTTPS. Si su entorno no cuenta con los certificados obligatorios, esta comprobación podría fallar. Utilice el parámetro ignoreSSL de la clase com.aliyun.teautil.models.RuntimeOptions para omitir la validación del certificado. Por ejemplo, establezca ignoreSSL en true dentro de un entorno de pruebas para evitar la validación durante las pruebas.
Habilite la validación de certificados SSL/TLS en los entornos de producción.
com.aliyun.teautil.models.RuntimeOptions runtimeOptions = new com.aliyun.teautil.models.RuntimeOptions();
// true: skip certificate validation, false: validate certificates (default is false)
runtimeOptions.ignoreSSL = true;
Problemas comunes de conexión HTTPS
El cliente de Java reporta el error Connection reset
Las aplicaciones de Java que llaman a API mediante HTTPS pueden presentar un error Connection reset o javax.net.ssl.SSLException, incluso cuando la misma URL funciona correctamente en un navegador. Esto suele ocurrir cuando la versión de TLS predeterminada del entorno de ejecución de Java no coincide con la que exige el servidor.
Causa principal
JDK 7 y versiones anteriores usan TLS 1.0 de forma predeterminada. JDK 8 usa TLS 1.2 de forma predeterminada.
El servidor de destino deshabilitó TLS 1.0 y TLS 1.1, por lo que solo es compatible con TLS 1.2 o superior.
Los navegadores negocian automáticamente la versión de TLS más alta available. En cambio, los clientes de Java utilizan la versión predeterminada del JDK, lo cual puede generar incompatibilidades.
Solución
Después de crear un objeto Config, establezca explícitamente la versión de TLS en 1.2 mediante un argumento de JVM o directamente en el código.
-
Opción 1: Establecer un argumento de inicio de JVM
Agregue a continuación el parámetro correspondiente a su comando de inicio:
java -Dhttps.protocols=TLSv1.2 -jar your-app.jar -
Opción 2: Especifique la versión de TLS en el código
// Set the system property at the program entry point System.setProperty("https.protocols", "TLSv1.2");
Una vez aplicado el cambio, reinicie su aplicación y compruebe que las llamadas HTTPS se ejecuten correctamente. Si los errores continúan, compruebe que las versiones de TLS y los conjuntos de cifrado compatibles con el servidor de destino también lo sean con su entorno de Java.