在 AndroidTV 上安装证书
Install certificate on AndroidTV
我需要查看我的 androidTV 应用程序发出的后端 https 请求,但是,由于调用是 "https" 调用,我需要安装一个 charles 证书(在我的 androidTV 上)以允许 charles 解密他们。
如果有人知道如何在androidTV上安装证书请告诉我。
非常感谢!
您可以通过编程方式完成。有关详细信息,请参阅 here。不幸的是,我还没有找到在 Android 电视 UI 上执行此操作的选项。
编辑:即使
也失败了
android.content.ActivityNotFoundException: Unable to find explicit activity class {com.android.settings/com.android.settings.CredentialStorage}; have you declared this activity in your AndroidManifest.xml?
所以我不知道该怎么做...
我写了一篇关于这个的文章:https://zahidrasheed.medium.com/charles-proxy-with-androidtv-fedc863e7039
TLDR;
1- 从 charles app 导出根证书并将其放在 res/raw
下:
Help > SSL Proxying > Save Charles Root Certificate… and save it as charles_ssl_cert.pem file.
2-通过network-security在app中嵌入证书-config.xml
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<debug-overrides>
<trust-anchors>
<certificates src="system" />
<certificates src="@raw/charles_ssl_cert" />
<certificates src="user" />
</trust-anchors>
</debug-overrides>
</network-security-config>
3- 通过以下方式再次导出根证书:
Help > SSL Proxying > Export Charles Certificate and Private Key
现在与想要测试该应用程序的用户共享 .p12
文件。需要:
Proxy > SSL Proxying Settings > Root Certificate > Import P12 (Enter the password you used above).
您可以通过 ADB 在 Android 模拟器中安装 SSL 证书,前提是您使用的模拟器映像没有 Google Play 服务。这将允许您对模拟器进行 root 并将证书推送到 /system 中的 cacerts 目录。这意味着您可以在 AndroidTV 上安装 SSL 证书,即使设置中没有 UI 可用。
要在模拟器中安装您的证书,请按照以下步骤操作:
- 获取不带 Play 服务的 Android(电视)模拟器,并为其取一个方便的名称
- 转到
$ANDROID_HOME/emulator
和 运行 ./emulator @<emulatorname> -writable-system
。如果您通过 Android Studio 运行 模拟器,您将无法将系统分区挂载为可写分区。
adb root
adb remount
openssl x509 -inform PEM -subject_hash_old -in <your certificate>.pem | head -n 1
,这将为您提供在以下步骤中需要的哈希值
- 将
<your certificate>.pem
重命名为 <hash>.0
(例如 711d79cc.0)
adb push <hash>.0 /system/etc/security/cacerts/<hash>.0
adb shell chmod 644 /system/etc/security/cacerts/<hash>.0
我需要查看我的 androidTV 应用程序发出的后端 https 请求,但是,由于调用是 "https" 调用,我需要安装一个 charles 证书(在我的 androidTV 上)以允许 charles 解密他们。
如果有人知道如何在androidTV上安装证书请告诉我。
非常感谢!
您可以通过编程方式完成。有关详细信息,请参阅 here。不幸的是,我还没有找到在 Android 电视 UI 上执行此操作的选项。
编辑:即使
也失败了android.content.ActivityNotFoundException: Unable to find explicit activity class {com.android.settings/com.android.settings.CredentialStorage}; have you declared this activity in your AndroidManifest.xml?
所以我不知道该怎么做...
我写了一篇关于这个的文章:https://zahidrasheed.medium.com/charles-proxy-with-androidtv-fedc863e7039
TLDR;
1- 从 charles app 导出根证书并将其放在 res/raw
下:
Help > SSL Proxying > Save Charles Root Certificate… and save it as charles_ssl_cert.pem file.
2-通过network-security在app中嵌入证书-config.xml
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<debug-overrides>
<trust-anchors>
<certificates src="system" />
<certificates src="@raw/charles_ssl_cert" />
<certificates src="user" />
</trust-anchors>
</debug-overrides>
</network-security-config>
3- 通过以下方式再次导出根证书:
Help > SSL Proxying > Export Charles Certificate and Private Key
现在与想要测试该应用程序的用户共享 .p12
文件。需要:
Proxy > SSL Proxying Settings > Root Certificate > Import P12 (Enter the password you used above).
您可以通过 ADB 在 Android 模拟器中安装 SSL 证书,前提是您使用的模拟器映像没有 Google Play 服务。这将允许您对模拟器进行 root 并将证书推送到 /system 中的 cacerts 目录。这意味着您可以在 AndroidTV 上安装 SSL 证书,即使设置中没有 UI 可用。
要在模拟器中安装您的证书,请按照以下步骤操作:
- 获取不带 Play 服务的 Android(电视)模拟器,并为其取一个方便的名称
- 转到
$ANDROID_HOME/emulator
和 运行./emulator @<emulatorname> -writable-system
。如果您通过 Android Studio 运行 模拟器,您将无法将系统分区挂载为可写分区。 adb root
adb remount
openssl x509 -inform PEM -subject_hash_old -in <your certificate>.pem | head -n 1
,这将为您提供在以下步骤中需要的哈希值- 将
<your certificate>.pem
重命名为<hash>.0
(例如 711d79cc.0) adb push <hash>.0 /system/etc/security/cacerts/<hash>.0
adb shell chmod 644 /system/etc/security/cacerts/<hash>.0