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 из открытого ключа сертификата, который вы хотите закрепить.
Я рекомендую вам использовать 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.
Или вы можете узнать, как это сделать, с помощью
В этом репо представлены основные шаги по интеграции закрепления сертификатов в ваше мобильное приложение с использованием этого бесплатного инструмента Approov. Это руководство написано специально для нативных приложений Android, начиная с API 24 (Android 7.0), для которых вы хотите защитить вызовы API с помощью закрепления сертификатов.
Чтобы следовать этому руководству, на вашем компьютере должна быть установлена программа для разработки под Android.
ПРИМЕЧАНИЕ. Никогда не приставляйте к доменам, которые вы не контролируете. Например, те, которые используются вашим мобильным приложением для подключения к сторонним сервисам. Чтобы закрепить этот домен, вам необходимо использовать обратный прокси. Вы можете узнать больше в статье, которую я написал об
В этой статье вы начнете с изучения сторонних API-интерфейсов и того, почему вам не следует обращаться к ним напрямую из мобильного приложения. Далее вы узнаете, что такое обратный прокси, а затем расскажете, когда и почему вы должны использовать его для защиты доступа к сторонним API, используемым в вашем мобильном приложении.