По умолчанию, при установке безопасного Websocket соединения с сервером, Android SDK отдает проверку SSL сертификата сервера на уровень системы. В свою очередь, система сверяет сертификат с записями в хранилище сертификатов.
При этом, если на сервере, в целях отладки, установлен самоподписанный сертификат, он не пройдет проверку. В этом случае возможны следующие варианты, в зависимости от сборки Android SDK.
Не рекомендуется: Доверять всем сертификатам
В сборке 1.1.0.18 добавлена опция сессии SessionOptions.trustAllCertificates (по умолчанию false). Чтобы принимать любые, в том числе самоподписанные сертификаты при установке соединения, необходимо установить данную опцию в true
SessionOptions sessionOptions = new SessionOptions(url); sessionOptions.trustAllCertificates(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());
В настоящее время правила безопасности Google Play не позволяют опубликовать приложение с таким кодом. Поэтому рекомендуется следующий способ.
Рекомендуется: Добавить самоподписанный сертификат в ресурсы приложения
В сборке 1.1.0.56 реализация класса X509TrustManager удалена из кода Android SDK. При необходимости, самоподписанные сертификаты для тестирования должны быть добавлены в ресурсы приложения. Также, в приложение должен быть добавлен файл настройки network_security_config.xml
со ссылкой на файл сертификата из ресурсов:
<network-security-config> <base-config> <trust-anchors> <certificates src="@raw/my_ca"/> <certificates src="system"/> </trust-anchors> </base-config> </network-security-config>