Мое приложение обращается к URL-адресу, защищенному самозаверяющим сертификатом.
Версия 1 :
Я скопировал файл «selfsigned.crt» на телефон, затем установил сертификат через Security - Other Security Settings - Install from device storage
с помощью credential use: VPN and apps
, что также заставило меня установить PIN-код.
Впоследствии я добавил это в манифест:
android:networkSecurityConfig="@xml/network_security_config"
... и создал соответствующий файл network_security_config.xml
в папке "res / xml" (как предложено здесь ):
<network-security-config>
<debug-overrides>
<trust-anchors>
<certificates src="user"/>
</trust-anchors>
</debug-overrides>
<base-config>
<trust-anchors>
<certificates src="user"/>
</trust-anchors>
</base-config>
</network-security-config>
Проблема в том, что мое приложение не может подключиться к URL-адресу, как это, и выдает только исключение:
javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.
Версия 2 :
Если я скопирую файл «selfsigned.crt» в папку «res / raw» и добавлю его в файл xml:
<certificates src="@raw/selfsigned"/>
это успешно. Но это также означает, что мне придется обновить приложение, если сертификат изменится.
Вопрос:
Я что-то пропустил в версии 1, возможно, вам нужно было создать собственный KeyStore
/ TrustManager
(как описано здесь ), даже когда вы используете файл xml?
Кстати, в настоящее время я использую javax.net.ssl.HttpsURLConnection
вместо "basic" URLConnection
для открытия соединения.