Проверка SSL сертификатов сервера при установке Websocket соединения¶
По умолчанию, при установке безопасного Websocket соединения с сервером, Android SDK отдает проверку SSL сертификата сервера на уровень системы. В свою очередь, система сверяет сертификат с записями в хранилище сертификатов.
При этом, если на сервере, в целях отладки, установлен самоподписанный сертификат, он не пройдет проверку. В этом случае возможны следующие варианты, в зависимости от сборки Android SDK.
Не рекомендуется: Доверять всем сертификатам¶
В сборке 1.1.0.18 добавлена опция сессии SessionOptions.trustAllCertificates
(по умолчанию false
). Чтобы принимать любые, в том числе самоподписанные сертификаты при установке соединения, необходимо установить данную опцию в true
Пример использования:
private CheckBox mTrustAllCer;
...
mTrustAllCer = (CheckBox) findViewById(R.id.trust_all_certificates_default);
...
/**
* The options for connection session are set.
* WCS server URL is passed when SessionOptions object is created.
* SurfaceViewRenderer to be used to display video from the camera is set with method SessionOptions.setLocalRenderer().
* SurfaceViewRenderer to be used to display preview stream video received from the server is set with method SessionOptions.setRemoteRenderer().
*/
SessionOptions sessionOptions = new SessionOptions(url);
sessionOptions.setLocalRenderer(localRender);
sessionOptions.setRemoteRenderer(remoteRender);
sessionOptions.trustAllCertificates(mTrustAllCer.isChecked());
Warning
В настоящее время правила безопасности Google Play не позволяют опубликовать приложение с таким кодом. Используйте следующий способ.
Рекомендуется: Добавить самоподписанный сертификат в ресурсы приложения¶
В сборке 1.1.0.56 реализация класса X509TrustManager
удалена из кода Android SDK. При необходимости, самоподписанные сертификаты для тестирования должны быть добавлены в ресурсы приложения. Также, в приложение должен быть добавлен файл настройки network_security_config.xml
со ссылкой на файл сертификата из ресурсов: