我的android項目正在使用api 15.我通過https使用HttpsURLConnection類連接到服務器。一切都運行得很好通過WiFi,但如果我關閉WiFi和運行在3G我得到如下:當使用3g以上時,找不到證書路徑的信任錨,但在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)
如果我做錯了什麼,爲什麼會工作在無線網絡?
這裏有更多的信息。
如果我使用OpenSSL查看服務器證書信息,
echo | openssl s_client -connect myserver.com:443
返回一個服務器級別的自簽名的證書,而
echo | openssl s_client -connect myserver.com:443 -servername myserver.com
返回「正確」的證書。我在我的服務器上有多個虛擬主機,每個都有自己的rapidssl頒發的證書,所以我認爲這意味着我需要使用支持TLS的客戶端。至少這是我的我在Apache日誌看啓動時的消息的解釋:
Name-based SSL virtual hosts only work for clients with TLS server name indication support
如果我是正確的,到目前爲止,這是否意味着我的移動3G網絡可以與TLS來擰緊或者是有別的東西我應該這樣做?
我可以通過繼承DefaultHttpClient並導入包含服務器自簽名證書的密鑰庫,但絕對不是我的首選選項,從而使事情在3G上工作。
什麼是服務器的URL? – jww 2014-08-13 08:49:40