Android证书分为“用户证书”和“系统证书”两种,在设置->安全->"查看安全证书"列表中,可以看到“系统”和“用户”两个列表。用户通过浏览器下载安装或者通过WLAN高级设置安装的证书均为用户证书。

安装为系统证书有什么好处呢?

(1)安装用户证书必须要设置开机密码,而且设置后就不能取消,除非先删掉所有的用户证书。如果安装为系统证书就不需要设置开机密码,自动化操作时更方便。

(2)Android 7以上版本APP默认不信任用户证书,只信任系统证书,安装为用户证书,对APP的HTTPS抓包会失败。安装为全局证书才能被所有APP信任,方可进行HTTPS抓包。

Android的系统证书的存储位置是/system/etc/security/cacerts,证书文件必须是PEM格式,而且文件命名必须符合系统证书规范。
1、准备一台已经 root的手机

2、准备mitmproxy证书文件

3、确认移动设备(模拟器)已经连接

adb devices -l #显示所有已连接的设备详细信息

android 需要什么证书 安卓有什么证书_系统目录

 

 如果没有设备显示,便手动连接(夜神模拟器)

adb connect 127.0.0.1:62001 #默认端口

再次查看连接确认

 

 

Windows 或者Linux 在mitmdump第一次运行会在用户目录生成对应的文件。

android 需要什么证书 安卓有什么证书_android 需要什么证书_02

#PEM或者DER格式均可。
#如果是PEM格式的:
 openssl x509 -inform PEM -subject_hash_old -in mitmproxy-ca-cert.pem -noout
c8750f0d
# 如果是DER格式的:
 openssl x509 -inform PEM -subject_hash_old -in mitmproxy-ca-cert.cer -noout
c8750f0d
#重命名
cp mitmproxy-ca-cert.pem c8750f0d.0
#传入手机
adb push c8750f0d.0 /sdcard/c8750f0d.0

android 需要什么证书 安卓有什么证书_android 需要什么证书_02

传输到手机的反馈如下:

 

android 需要什么证书 安卓有什么证书_android 需要什么证书_04

 

 

android 需要什么证书 安卓有什么证书_android 需要什么证书_02

#获取手机的root权限
adb shell
su
#挂载系统目录为可写
mount -o rw,remount /   #或者/system

 

mv /sdcard/c8750f0d.0 /system/etc/security/cacerts
#修改证书权限
chmod 644 /system/etc/security/cacerts/c8750f0d.0

 

你可能会报错:'/dev/block/dm-0' is read-only

在次确认你是root(#)状态下后,你可以执行以下命令来你查看的android的构建类型,在 adb shell 输入

cat /system/build.prop | grep build.type

如若return的信息显示你是开发版,继续往后看。

对于调试版本,用户必须首先 disable-verity 。

随后:

adb root
adb disable-verity
adb reboot
adb remount
adb shell
mount -o rw,remount /system

 

 

至此,证书安装成功!

现在我们可以在系统证书里面找到mitmproxy证书了。手机连接mitmproxy代理进行抓包时系统也不会报”该证书来自非可信的授权中心“的错误了。

如果升级系统的话,可能需要重新拷入证书到系统目录。可以考虑将该证书做成magisk模块,这样升级系统后也无需重新拷入。

 




安装为系统证书有什么好处呢?

(1)安装用户证书必须要设置开机密码,而且设置后就不能取消,除非先删掉所有的用户证书。如果安装为系统证书就不需要设置开机密码,自动化操作时更方便。

(2)Android 7以上版本APP默认不信任用户证书,只信任系统证书,安装为用户证书,对APP的HTTPS抓包会失败。安装为全局证书才能被所有APP信任,方可进行HTTPS抓包。

Android的系统证书的存储位置是/system/etc/security/cacerts,证书文件必须是PEM格式,而且文件命名必须符合系统证书规范。
1、准备一台已经 root的手机

2、准备mitmproxy证书文件

3、确认移动设备(模拟器)已经连接

adb devices -l #显示所有已连接的设备详细信息

android 需要什么证书 安卓有什么证书_系统目录

 

 如果没有设备显示,便手动连接(夜神模拟器)

adb connect 127.0.0.1:62001 #默认端口

再次查看连接确认

 

 

Windows 或者Linux 在mitmdump第一次运行会在用户目录生成对应的文件。

android 需要什么证书 安卓有什么证书_android 需要什么证书_02

#PEM或者DER格式均可。
#如果是PEM格式的:
 openssl x509 -inform PEM -subject_hash_old -in mitmproxy-ca-cert.pem -noout
c8750f0d
# 如果是DER格式的:
 openssl x509 -inform PEM -subject_hash_old -in mitmproxy-ca-cert.cer -noout
c8750f0d
#重命名
cp mitmproxy-ca-cert.pem c8750f0d.0
#传入手机
adb push c8750f0d.0 /sdcard/c8750f0d.0

android 需要什么证书 安卓有什么证书_android 需要什么证书_02

传输到手机的反馈如下:

 

android 需要什么证书 安卓有什么证书_android 需要什么证书_04

 

 

android 需要什么证书 安卓有什么证书_android 需要什么证书_02

#获取手机的root权限
adb shell
su
#挂载系统目录为可写
mount -o rw,remount /   #或者/system

 

mv /sdcard/c8750f0d.0 /system/etc/security/cacerts
#修改证书权限
chmod 644 /system/etc/security/cacerts/c8750f0d.0

 

你可能会报错:'/dev/block/dm-0' is read-only

在次确认你是root(#)状态下后,你可以执行以下命令来你查看的android的构建类型,在 adb shell 输入

cat /system/build.prop | grep build.type

如若return的信息显示你是开发版,继续往后看。

对于调试版本,用户必须首先 disable-verity 。

随后:

adb root
adb disable-verity
adb reboot
adb remount
adb shell
mount -o rw,remount /system

 

 

至此,证书安装成功!

现在我们可以在系统证书里面找到mitmproxy证书了。手机连接mitmproxy代理进行抓包时系统也不会报”该证书来自非可信的授权中心“的错误了。

如果升级系统的话,可能需要重新拷入证书到系统目录。可以考虑将该证书做成magisk模块,这样升级系统后也无需重新拷入。