mio progetto Android sta usando api 15. Sto collegando a un server tramite HTTPS utilizzando la classe HttpsURLConnection. Tutto funziona bene su WiFi, ma se spengo WiFi e corro su reti 3G ottengo il seguente:Trust for percorso del certificato non trovato quando si utilizza su reti 3G, ma funziona bene su WiFi
javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found. at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:413)
at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:257) at libcore.net.http.HttpConnection.setupSecureSocket(HttpConnection.java:210)
at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.makeSslConnection(HttpsURLConnectionImpl.java:477)
at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.connect(HttpsURLConnectionImpl.java:432)
at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:282)
at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:232) at libcore.net.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:80)
at libcore.net.http.HttpURLConnectionImpl.getOutputStream(HttpURLConnectionImpl.java:188) at libcore.net.http.HttpsURLConnectionImpl.getOutputStream(HttpsURLConnectionImpl.java:280)
Se sto facendo qualcosa di sbagliato, perché dovrebbe lavorare su WiFi?
Un po 'più informazioni qui.
Se uso OpenSSL per visualizzare le informazioni certificato del server,
echo | openssl s_client -connect myserver.com:443
restituisce una a livello di server cert auto-firmato, mentre
echo | openssl s_client -connect myserver.com:443 -servername myserver.com
restituisce il certificato 'corretta'. Ho più vhosts sul mio server, ognuno con il proprio cert rapidssl, quindi penso 'questo significa che ho bisogno di usare un client abilitato per TLS. ci
Name-based SSL virtual hosts only work for clients with TLS server name indication support
Se ho ragione finora, vuol dire che la mia rete mobile 3G potrebbe essere scopa con il TLS o è qualcosa di diverso: Almeno questa è la mia interpretazione del messaggio che vedo nel mio log di Apache all'avvio Dovrei fare?
I può può far funzionare le cose oltre 3g sottoclasse DefaultHttpClient e importare un keystore contenente il server autofirmato cert ma questa non è sicuramente la mia opzione preferita.
Qual è l'URL del server? – jww