Сервер, к которому подключалось приложение, имел временный сертификат или что-то в этом роде. Я занимаюсь только приложением Android, и для выполнения вызовов веб-службы https приложение использовало небезопасную реализацию интерфейса X509TrustManager
. Теперь сертификат сервера исправлен и имеет окончательный сертификат.
Работает следующий код:
HttpClient mHttpClient = null;
HttpParams httpParameters = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(httpParameters, 30000);
DefaultHttpClient client = new DefaultHttpClient(httpParameters);
SchemeRegistry registry = new SchemeRegistry();
registry.register(new Scheme("https", SSLSocketFactory.getSocketFactory(), 443));
registry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
SingleClientConnManager mgr = new SingleClientConnManager(client.getParams(), registry);
mHttpClient = new DefaultHttpClient(mgr, client.getParams());
final HttpParams params = mHttpClient.getParams();
HttpConnectionParams.setConnectionTimeout(params, HTTP_TIMEOUT);
HttpConnectionParams.setSoTimeout(params, HTTP_TIMEOUT);
ConnManagerParams.setTimeout(params, HTTP_TIMEOUT);
По сути, использование этого mHttpClient
при выполнении вызовов веб-службы не вызывает никаких ошибок или жалоб и работает должным образом. Однако я видел такие реализации, как эта, которые имеют более безопасный подход.
Мой вопрос: используя простой DefaultHttpClient
, как в приведенном выше коде, могут ли возникнуть некоторые проблемы, когда на некоторых устройствах сертификат может быть не распознан как действительный? Или лучше, я должен использовать сохраненное хранилище ключей, как в ответе выше?