我正在使用Apache HttpClient庫來設置https連接。不幸的是,Android給了我一個「不受信任的服務器證書」錯誤。如果我使用手機瀏覽器瀏覽網站,它會正確驗證證書,這使我相信我需要讓HttpClient「知道」手機上的根證書。這是我的HttpClient設置代碼:Android上不受信任的證書錯誤和httpclient
HttpParams params = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(params, 20000);
HttpConnectionParams.setSoTimeout(params, 20000);
HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
HttpProtocolParams.setContentCharset(params, HTTP.DEFAULT_CONTENT_CHARSET);
HttpProtocolParams.setUseExpectContinue(params, false);
SchemeRegistry schReg = new SchemeRegistry();
schReg.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
schReg.register(new Scheme("https", SSLSocketFactory.getSocketFactory(), 443));
ClientConnectionManager conMgr = new ThreadSafeClientConnManager(params, schReg);
DefaultHttpClient defaultHttpClient = new DefaultHttpClient(conMgr, params);
return (defaultHttpClient);
正如你可以看到我做什麼特別與SSLSocketFactory的。我怎樣才能使HttpClient庫驗證我的網站,而無需在密鑰庫中添加自定義證書?我應該創建一個自定義的SSLSocketFactory並從Android手機加載cacerts.bks?在這種情況下,我可能會在不同手機上的密鑰存儲區使用不同密碼的問題?
如果您需要更多信息,請讓我知道。這對於我來說非常困難。
我沒有問題使用HttpClient訪問HTTPS。我只是使用BasicHttpParams和DefaultHttpClient,沒有那ClientConnectionManager或SchemeRegistry ...是你需要的嗎? – SteelBytes
http://stackoverflow.com/questions/995514/https-connection-android#1000205 –
證書需要驗證。安裝一個'不檢查'TrustManager不是首選,否則使用ssl會有什麼意義?我想確保我連接到正確的主機,並且證書沒有被調和。感謝您的鏈接。 – Ivo