在AndroidTV上安装证书

13

我需要查看我的AndroidTV应用程序所发出的后端https请求,但由于这些是“https”调用,因此我需要在AndroidTV上安装Charles证书以允许Charles对其进行解密。

如果有人知道如何在AndroidTV上安装证书,请告诉我。

非常感谢!


1
这个SO帖子将帮助您安装证书。然后,您可能想尝试将您的Android电视连接到运行Charles代理的计算机上,就像这个YouTube视频中所示。 - Teyam
我也在尝试。电视上没有该菜单项,即使赋予了android.permission.MANAGE_CA_CERTIFICATES,createInstallIntent也会失败。我似乎找不到任何手动/编程方式来完成这个任务。有人能否将我重定向到相关信息,解释为什么无法实现? - HLL
你已经得到了这个工作解决方案吗? - AKASH WANGALWAR
现在我已经找到了解决方案,只是将其发布为答案。 - Zahid Rasheed
非常感谢你,兄弟。 - Sebastian Corradi
显示剩余2条评论
3个回答

5
您可以通过ADB在Android模拟器上安装SSL证书,前提是您使用不带Google Play服务的模拟器镜像。这将使您能够获取模拟器的root权限,并将证书推送到/system下的cacerts目录中。这意味着即使在设置中没有此选项的UI界面,您也可以在AndroidTV上安装SSL证书。
要在模拟器中安装您的证书,请按照以下步骤操作:
- 获取一个没有Play Services的Android(TV)模拟器并给它起一个方便的名称 - 进入$ANDROID_HOME/emulator路径并运行./emulator @ -writable-system命令。如果您通过Android Studio运行模拟器,将无法将系统分区挂载为可写。 - adb root - adb remount - 运行openssl x509 -inform PEM -subject_hash_old -in .pem | head -n 1命令,这将为您提供以下步骤所需的哈希值 - 将.pem重命名为.0(例如711d79cc.0) - 运行adb push .0 /system/etc/security/cacerts/.0命令 - 运行adb shell chmod 644 /system/etc/security/cacerts/.0命令

4
我对此写了一篇文章:https://zahidrasheed.medium.com/charles-proxy-with-androidtv-fedc863e7039 简要版: 1- 从Charles应用程序中导出根证书,并通过以下方式将其放置在res/raw下:
Help > SSL Proxying > Save Charles Root Certificate… and save it as charles_ssl_cert.pem file.

2- 通过 network-security-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).

1
你可以通过编程来完成。请参阅此处以获取更多详细信息。不幸的是,我还没有找到从Android TV界面中完成它的选项。
编辑:即使如此,也会失败。
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?

所以我不知道如何做这个...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接