Amazon "actualizó" la seguridad de SSL en su AWS Java SDK en la versión 1.3.21. Esto rompió el acceso a cualquier segmento S3 que tenga períodos en su nombre cuando se usa la API Java AWS de Amazon. Estoy usando la versión 1.3.21.1 que está vigente hasta el 5/Oct/2012. He proporcionado algunas soluciones en mi respuesta a continuación, pero estoy buscando soluciones adicionales a este problema.Problemas de SSL con S3/AWS con la API de Java: "el nombre de host en el certificado no coincide"
Si obtiene este error, verá algo como el siguiente mensaje en sus excepciones/registros. En este ejemplo, el nombre del cubo es foo.example.com
.
INFO: Unable to execute HTTP request: hostname in certificate didn't match:
<foo.example.com.s3.amazonaws.com> != <*.s3.amazonaws.com>
OR <*.s3.amazonaws.com> OR <s3.amazonaws.com>
at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:220)
at org.apache.http.conn.ssl.StrictHostnameVerifier.verify(StrictHostnameVerifier.java:61)
at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:149)
at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:130)
at org.apache.http.conn.ssl.SSLSocketFactory.connectSocket(SSLSocketFactory.java:390)
Se puede ver la documentación de este problema en el foro de discusión AWS S3:
https://forums.aws.amazon.com/thread.jspa?messageID=387508񞦴
respuesta de Amazon para el problema es el siguiente.
Deberíamos poder solucionarlo utilizando el método de estilo de ruta anterior de direccionamiento de grupos (en lugar del direccionamiento de estilo de host virtual más nuevo) para los depósitos con este patrón de nombres. Empezaremos con la corrección y aseguraremos que nuestras pruebas de integración interna tengan casos de prueba para nombres de depósitos que contengan puntos.
¿Alguna solución alternativa u otras soluciones? Gracias por cualquier comentario.
Para ser justo, si solicita 'https: //foo.example.com.s3.amazonaws.com/...' en su URL, el '* .s3.amazonaws.com' no cubre ese nombre de host: el comodín no se propaga a través de los puntos de acuerdo con [las especificaciones] (http://tools.ietf.org/html/rfc2818#section-3.1) ("**. a.com coincide con foo.a. com pero no bar.foo.a.com * "). Lo que Amazon podría hacer es obtener un certificado para '*. *. *. S3.amazonaws.com'. – Bruno
De acuerdo @ Bruno. Sin embargo, de lo que habla la pregunta es usando su API de Java. Básicamente no puedo hacer nada usando su API con un cubo que tiene un punto en su nombre. – Gray
Acaba de leer [RFC 6125] (http://tools.ietf.org/html/rfc6125#section-6.4.3) (especificaciones de mejores prácticas, pero realmente no implementadas todavía). No estoy seguro de cómo interpretar si '*. *. *. Something' se permitiría con la regla 1. Lo correcto (si realmente necesita un controlador personalizado) sería escribir su propio verificador que espera el patrón correcto . El problema con ALLOW_ALL_HOSTNAME_VERIFIER es que permite ataques MITM. – Bruno