Как я могу заставить все HTTP-запросы от моего Android приложения принимать данный центр сертификации? - PullRequest
0 голосов
/ 27 января 2020

У меня есть сервер, на котором работает HTTPS с сертификатом из моего собственного центра сертификации. У меня есть сертификат CA в виде файла .pem (например, я могу передать его в CURL с помощью --cacert, чтобы заставить его общаться с моим сервером).

Я пишу приложение Android который должен будет поговорить с этим сервером. Мне нужно как-то передать этот файл PEM, чтобы он принимал сертификаты, подписанные моим CA. Это приложение работает в привилегированном режиме на оборудовании специального назначения, и пользователь не может сам добавить сертификат через пользовательский интерфейс настроек Android, как вы могли бы сделать для традиционного приложения. Мне нужно добавить CA либо программно в Java, либо, возможно, во время развертывания, если это проще (программное обеспечение развернуто как полная Android сборка).

Я хочу иметь возможность добавить CA в одном месте, а затем любые HTTPS-запросы, сделанные из приложения, будут принимать ЦС, независимо от того, с какой библиотекой или клиентом они сделаны. Я не хочу go через все приложение, настраивающее каждый запрос на принятие ЦС, мы используем несколько библиотек, и я не хочу выяснять, как настроить каждую из них.

Обратите внимание, что Мне не нужно все устройство , чтобы обязательно доверять ЦС, только мое приложение.

Возможно ли это?

1 Ответ

2 голосов
/ 27 января 2020

Согласно документации , функция настройки сетевой безопасности использует файл XML, в котором вы указываете настройки для своего приложения. Вы должны включить запись в манифест вашего приложения, чтобы указать на этот файл. Следующий фрагмент кода из манифеста демонстрирует, как создать эту запись:

<?xml version="1.0" encoding="utf-8"?>
<manifest ... >
    <application android:networkSecurityConfig="@xml/network_security_config"
                    ... >
        ...
    </application>
</manifest>

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>

Добавьте ваш PEM сертификат файл в res / raw / my_ca.

...