Okhttp - Закрепление сертификатов и Закрепление открытых ключей

Я хочу улучшить безопасность моего приложения для Android. Я использую OkHttp версии 3.

Как:

1) использовать прикрепление сертификата с OkHttp.

2) использовать закрепление открытого ключа с помощью OkHttp.

Когда я делаю это:

httpClient.certificatePinner(new CertificatePinner.Builder()
            .add(BuildConfig.HOST_NAME, "sha256/VRtYBz1boKOAjChfZYssN1AeNZCjywl77l2RTl/v110=")
            .build());

Пиннинг сертификатов работает. Но что с Пиннингом Открытого ключа? Как включить это?

1 ответ

сертификат закрепления рабочий. Но что с закреплением открытого ключа? Как это включить?

Начиная с Android API 24 вы можете сделать это для любого стека Http через res/xml/network_security_config.xmlфайл, как описано в их документах:

      <?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config>
        <domain includeSubdomains="true">example.com</domain>
        <pin-set expiration="2018-01-01">
            <pin digest="SHA-256">7HIpactkIAq2Y49orFOOQKurWxmmSFZhBCoQYcRhJ3Y=</pin>
            <!-- backup pin -->
            <pin digest="SHA-256">fwza0LRMXouZHRC8Ei+4PyuldPDcf3UKgO/04cDM1oE=</pin>
        </pin-set>
    </domain-config>
</network-security-config>

Этот подход намного проще реализовать, чем предыдущие, но он по-прежнему подвержен неправильной настройке и опечаткам, плюс вам нужно знать, как правильно создать дайджест SHA-256 из открытого ключа сертификата, который вы хотите закрепить.

Я рекомендую вам использовать Mobile Certificate Pinning Generator, чтобы помочь вам с реализацией закрепления сертификатов. Этот бесплатный онлайн-инструмент сгенерирует для вас дайджест SHA-256 для указанных доменов и предоставит network_security_config.xml файл готов к копированию и вставке в ваш проект.

Например, если в проекте мобильного приложения вы хотите гипотетически привязать к домену httpbin.org а также example.com:

Предупреждения появляются потому, что резервный PIN-код не был предоставлен, и рекомендуется всегда предоставлять его, загружая файл сертификата резервной копии, который действителен для домена и еще не используется в реальном времени.

Теперь вам просто нужно скопировать и вставить конфигурацию в свой проект, как указано на той же странице:

Создайте файл ./main/res/xml/network_security_config.xml в своем проекте.

Скопируйте приведенную выше конфигурацию закрепления сертификата в формате xml и вставьте ее в файл.

Откройте файл AndroidManifest.xml и добавьте следующий фрагмент кода android:networkSecurityConfig="@xml / network_security_config" внутри тега приложения.

Перестройте мобильное приложение и дважды проверьте, что вы все еще можете отправлять запросы к API.

Или вы можете узнать, как это сделать, с помощью репозиторияприложения Pin Test примера :

В этом репо представлены основные шаги по интеграции закрепления сертификатов в ваше мобильное приложение с использованием этого бесплатного инструмента Approov. Это руководство написано специально для нативных приложений Android, начиная с API 24 (Android 7.0), для которых вы хотите защитить вызовы API с помощью закрепления сертификатов.

Чтобы следовать этому руководству, на вашем компьютере должна быть установлена ​​программа для разработки под Android.

ПРИМЕЧАНИЕ. Никогда не приставляйте к доменам, которые вы не контролируете. Например, те, которые используются вашим мобильным приложением для подключения к сторонним сервисам. Чтобы закрепить этот домен, вам необходимо использовать обратный прокси. Вы можете узнать больше в статье, которую я написал об использовании обратного прокси для защиты сторонних API:

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

Другие вопросы по тегам