Если я правильно понял, что вы пытаетесь атаковать мобильное устройство, использующее закрепление сертификата для соединения с сервером API.
Если это так, то добавления mitmproxy-ca-cert.pem
в надежное хранилище для мобильных устройств недостаточно, вам нужночтобы настроить файл безопасности сети res/xml/network_security_config.xml
согласно google docs .
Если вы все еще заполняете потерянное, попробуйте следовать статье Руки на Mobile Api Security Pinning , чтобы увидетьесли это поможет вам вернуться на правильный путь.
РЕДАКТИРОВАТЬ
Следующие инструкции действительны для Android API уровня 24 и выше.
Bash script чтобы сгенерировать хеш из открытого ключа сертификата:
#!/bin/bash
# Heavily inspired on:
# * https://medium.com/@appmattus/android-security-ssl-pinning-1db8acb6621e#ecea
set -eu
Main()
{
local certificate_path="${1? Missing path to certificate.}"
local certs="$( cat ${certificate_path} )"
local rest=$certs
while [[ "$rest" =~ '-----BEGIN CERTIFICATE-----' ]]; do
cert="${rest%%-----END CERTIFICATE-----*}-----END CERTIFICATE-----"
rest=${rest#*-----END CERTIFICATE-----}
local certificate_name="$( echo "$cert" | grep 's:' | sed 's/.*s:\(.*\)/\1/' )"
if [ -n "${certificate_name}" ]; then
printf "\nCERTIFICATE NAME: \n ${certificate_name} \n"
fi
printf "\nCERTIFICATE PUBLIC KEY HASH:\n\n"
echo "$cert" |
openssl x509 -pubkey -noout |
openssl rsa -pubin -outform der 2>/dev/null |
openssl dgst -sha256 -binary |
openssl enc -base64
echo
exit 0
done
}
Main ${@}
Сохраните вышеприведенный скрипт bash где-нибудь в пути к корзине, а затем используйте его следующим образом:
$ hash-certificate-public-key.sh ~/path/to/mitmproxy-ca-cert.pem
CERTIFICATE PUBLIC KEY HASH:
gsGj6crKw/RebflwkwGIKxngaZaVxP7UsUtuF71VKDw=
Теперь скопируйте и вставьте хеши добавьте его в этот файл src / main / res / xml / network_security_config.xml :
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<!-- Official Android N API -->
<!--https://android-developers.googleblog.com/2016/07/changes-to-trusted-certificate.html-->
<domain-config>
<domain>the-domain-to-pin.com</domain>
<trust-anchors>
<certificates src="user" />
<!-- <certificates src="system" /> -->
</trust-anchors>
<pin-set>
<!-- THE MITM CERTIFICATE HASH -->
<pin digest="SHA-256">gsGj6crKw/RebflwkwGIKxngaZaVxP7UsUtuF71VKDw=</pin>
</pin-set>
</domain-config>
</network-security-config>
А теперь включите его в AndroidManifest.xml :
<application
android:allowBackup="true"
<!--omitted-->
android:networkSecurityConfig="@xml/network_security_config">
Если еще не сделано, добавьте mitmproxy сертификат для доверенного хранилища пользователя на устройстве Android, затем перекомпилируйте приложение, и теперь вы сможете перехватывать запросы.
NOTE :
Примеры кода были извлечены из репозитория Демонстрационный конвертер валют , который использовался как часть статьи Украсть этот ключ API с атакующим человеком в середине и статьей Защита HTTPS с закреплением сертификата на Android