Используйте простой DefaultHttpClient или хранилище ключей, созданное с помощью BouncyCastle, включенного в приложение.

Сервер, к которому подключалось приложение, имел временный сертификат или что-то в этом роде. Я занимаюсь только приложением 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, как в приведенном выше коде, могут ли возникнуть некоторые проблемы, когда на некоторых устройствах сертификат может быть не распознан как действительный? Или лучше, я должен использовать сохраненное хранилище ключей, как в ответе выше?


person Alin    schedule 01.11.2016    source источник
comment
Я не уверен, что понимаю. Приведенное выше решение неверно, потому что оно доверяет всем вызовам https из вашего приложения? Решение: доверять только этому конкретному сертификату с вашего сервера?   -  person klimat    schedule 09.11.2016
comment
согласился с mklimek - мне приходилось делать это раньше с okhttp3, используя этот вид подхода   -  person Saik Caskey    schedule 10.11.2016