По умолчанию, при установке безопасного Websocket соединения с сервером, Android SDK отдает проверку SSL сертификата сервера на уровень системы. В свою очередь, система сверяет сертификат с записями в хранилище сертификатов.

При этом, если на сервере, в целях отладки, установлен самоподписанный сертификат, он не пройдет проверку. В этом случае возможны следующие варианты, в зависимости от сборки Android SDK.

Не рекомендуется: Доверять всем сертификатам

В сборке 1.1.0.18 добавлена опция сессии SessionOptions.trustAllCertificates (по умолчанию false). Чтобы принимать любые, в том числе самоподписанные сертификаты при установке соединения, необходимо установить данную опцию в true

SessionOptions sessionOptions = new SessionOptions(url);
sessionOptions.trustAllCertificates(true);

Пример использования

code

                    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 со ссылкой на файл сертификата из ресурсов:

code

<network-security-config>
    <base-config>
        <trust-anchors>
            <certificates src="@raw/my_ca"/>
            <certificates src="system"/>
        </trust-anchors>
    </base-config>
</network-security-config>