Самоподписанный сертификат в Android-приложении RAD - PullRequest
1 голос
/ 25 мая 2019

У меня есть служба REST через SSL с самозаверяющим сертификатом.Я могу вызвать его из обычного приложения Delphi через TRESTClient.Но когда я использую его внутри приложения Android, во время вызова возникает следующее исключение.

Класс исключения EJNIException с сообщением java.security.cert.CertificateException: java.security.cert.CertPathValidatorException: доверять привязке дляпуть сертификации не найден.

Я обнаружил, что сетевая безопасность должна быть настроена путем добавления android:networkSecurityConfig="@xml/network_security_config" в application секцию файла AndroidManifest.template.xml .

<application android:networkSecurityConfig="@xml/network_security_config"
    android:persistent="%persistent%" 
    android:restoreAnyVersion="%restoreAnyVersion%" 
    android:label="%label%" 
    android:debuggable="%debuggable%" 
    android:largeHeap="%largeHeap%"
    android:icon="%icon%"
    android:theme="%theme%"
    android:hardwareAccelerated="%hardwareAccelerated%"
    android:resizeableActivity="false">

Затем мне пришлось создать res \ xml \ network_security_config.xml файл с похожим содержимым:

<?xml version="1.0" encoding="utf-8"?> <network-security-config>
    <domain-config>
        <domain includeSubdomains="true">example.com</domain>
        <trust-anchors>
            <certificates src="@raw/my_ca"/>
        </trust-anchors>
    </domain-config> </network-security-config>

Но где разместить network_security_config.xml файл.Когда я поместил его в папку res внутри Debug , он был удален во время сборки.Поэтому он не может быть найден, и приложение вызывает исключение на этапе упаковки.

Ошибка: E2312 C: \ Users \ Пользователь \ Documents \ Embarcadero \ Studio \ Projects \ Andr \ Android \ Debug \ TabbedApplication \ AndroidManifest.xml: 19: ошибка: ошибка: не найден ресурс, который соответствует указанному имени (в 'networkSecurityConfig' со значением '@ xml / network_security_config').

Не знаю, где разместитьи дать RAD Studio знать, что он должен получить этот файл во время компиляции.

1 Ответ

0 голосов
/ 29 мая 2019

Вы не можете напрямую использовать папки Debug и Release для указания файлов, которые необходимо развернуть вместе с приложением, поскольку они являются временными папками, очищаемыми при каждой перестройке.

Для развертывания вы должны использовать диалог Project -> Deployment.

Здесь вы можете указать, какие локальные файлы (размещенные вне папок сборки) вы хотите развернуть, в какой конфигурации (Отладка, Выпуск или оба) и путь их назначения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...