Amazon ha "aggiornato" la sicurezza SSL nel suo SDK Java AWS nella versione 1.3.21. Questo ha interrotto l'accesso a tutti i bucket S3 che hanno periodi nel loro nome quando utilizzano l'API Java AWS di Amazon. Sto usando la versione 1.3.21.1 che è aggiornata fino a Oct/5/2012. Ho fornito alcune soluzioni nella mia risposta di seguito, ma sto cercando un ulteriore lavoro su questo problema.Problemi SSL con S3/AWS utilizzando l'API Java: "nome host nel certificato non corrisponde"
Se si verifica questo errore, verrà visualizzato un messaggio simile al seguente messaggio nelle eccezioni/nei registri. In questo esempio, il nome del bucket è 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)
Si può vedere la documentazione di questo problema sul forum di discussione AWS S3:
https://forums.aws.amazon.com/thread.jspa?messageID=387508񞦴
risposta di Amazon per il problema è il seguente.
Dovremmo essere in grado di risolvere questo problema utilizzando il metodo di stile del percorso più vecchio di indirizzamento del bucket (anziché il più recente indirizzamento di stile di host virtuale) per i bucket con questo modello di denominazione. Iniziamo con la correzione e assicuriamo che i nostri test di integrazione interna abbiano casi di test per nomi di bucket contenenti periodi.
Qualsiasi soluzione alternativa o altre soluzioni? Grazie per qualsiasi feedback.
Per essere onesti, se si richiede 'https: //foo.example.com.s3.amazonaws.com/...' nel proprio URL, '* .s3.amazonaws.com' non copre questo nome host: il carattere jolly non si propaga attraverso i punti secondo [le specifiche] (http://tools.ietf.org/html/rfc2818#section-3.1) ("**. a.com corrisponde a foo.a. com ma non bar.foo.a.com * "). Quello che Amazon potrebbe fare è ottenere un certificato per '*. *. *. S3.amazonaws.com'. – Bruno
Concordato @Bruno. Comunque, la domanda sta parlando usando la loro API Java. Fondamentalmente non posso fare nulla usando la loro API con un bucket che ha un punto nel suo nome. – Gray
Basta leggere [RFC 6125] (http://tools.ietf.org/html/rfc6125#section-6.4.3) (specifica best practice, ma non ancora implementata). Non sono sicuro di come interpretare se '*. *. *. Qualcosa sia permesso con la regola 1. La cosa giusta (se hai davvero bisogno di un gestore personalizzato) sarebbe in effetti scrivere il tuo verificatore che si aspetta il modello giusto . Il problema con ALLOW_ALL_HOSTNAME_VERIFIER è che consente attacchi MITM. – Bruno