当我成功将自定义SSL证书添加到Android 6模拟器(我对system.img
文件进行持久更改)时,我觉得我破解了原子。但浏览器无法以任何方式识别它。
我跟着这个很棒的tutorial,我觉得我在散列方面做错了。以下是我所做的全部步骤,以及到目前为止所做的工作。
Windows 10,64 BIT
预建模拟器
高级模拟器设置
系统文件
890c6016.0
c:\device_tmp
实用程序:
emulator
的/android_sdk/tools/emulator.exe
来自adb
/android_sdk/platform-tools/adb.exe
启动模拟器:
emulator -avd Nexus_64 -no-snapshot-load
现在它启动,我打开命令行窗口
找到外部存储的名称,因为sdcard
没有足够的存储空间用于图像文件。
adb shell df
在我的情况下,/storage/13E4-1F02/
获得了2GB空间
安装证书
adb shell "rm /sdcard/"
adb push 890c6016.0 /sdcard/
adb shell "mount -o remount,rw /system"
adb shell "cp /sdcard/890c6016.0 /system/etc/security/cacerts/"
adb shell "chmod 644 /system/etc/security/cacerts/890c6016.0"
adb shell "dd if=/dev/block/vda of=/storage/13E4-1F02/system.img"
adb pull /storage/13E4-1F02/system.img c:/device_tmp
每个最后一行大约需要5分钟。之后,我通过关闭所有shell窗口并从system.img
文件
emulator -http-proxy my.ip:8888 -system c:/device_tmp/system.img
当设备启动时,它的系统中有该证书。
这是我构建证书文件的方式。我使用Charles和 openssl ,因此我从 help-> SSL-Proxing->导出Charles根证书下载了Charles证书:{{1} }。
制作crt
go.p12
制作PEM
openssl pkcs12 -in go.p12 -clcerts -nokeys -out go.crt
获取用作扩展名为.0的文件名的哈希码
openssl pkcs12 -in go.p12 -out go.pem
复制openssl x509 -inform PEM -subject_hash_old -in go.crt
并将其名称更改为我们刚刚获得的哈希值(890c6016.0)
go.crt
*类型是 cat (Mac)的Windows命令
将所有签名信息附加到文件
type go.crt > 890c6016.0
完成!
以下是结果证书的内容: 890c6016.0
它也是你跑步时会得到的:
openssl x509 -inform PEM -text -fingerprint -in go.crt -out /dev/null >> 890c6016.0
890c6016.0:
openssl x509 -in 890c6016.0 -text -noout
当我从模拟器运行默认的android浏览器时,它表示在运行我的应用程序时它无法信任SSL和类似的问题。这表示代理正在运行,但我建立的证书不被接受。我还检查了文件系统以确保。它在那里!
那我在这里想念什么?
我在Genymotion模拟器上测试了这种方法,并且它可以工作!!! 为什么Android模拟器会有所不同?
答案 0 :(得分:0)
因此,您拥有的证书是自签名证书,即证书的问题和颁发具有相同的值。客户端应该抛出它不信任证书的错误,因为在这种情况下它不知道发行者。我不知道为什么它适用于Genymotion。 :)