Burpsuit抓取Android7.0以上设备Https
Android7以上的设备安装Burpsuit的CA之后,抓包仍然可能不生效,代理后打开Chrome访问一下网站发现会报错:“Using a custom root CA with Burp for inspecting Android N traffic”,查阅了各种方法之后发现可以有两个解决方案,一个是来自blog.nviso.eu的导入自制证书+私钥的方案,另一个是迂回的方式,在查找解决Burpsuit相应速度过慢的方法的时候看到了这篇文章BurpSuite和Fiddler串联使用解决App测试漏包和速度慢的问题,发现这样不但可以解决Burpsuit过慢的问题还可以解决Burpsuit证书有效期过长的问题:通过证书有效期较短的抓包工具抓取https流量,然后转发到Burpsuit。
方法一:自建CA证书
-
OpenSSL安装
linux中可以直接apt install openssl
windows中可以访问slproweb.com下载安装包
-
找到openssl.cnf
如:D:\Program Files\OpenSSL-Win64\bin\cnf\openssl.cnf
-
创建一个私钥,具有v3_ca扩展名并提供openssl.cnf文件
openssl req -x509 -days 730 -nodes -newkey rsa:2048 -outform der -keyout server.key -out ca.der -extensions v3_ca -config openssl.cnf
然后按照要求输入各类信息
4. 转换为der格式
openssl rsa -in server.key -inform pem -out server.key.der -outform der
- 将密钥转换为pkcs8格式
openssl pkcs8 -topk8 -in server.key.der -inform der -out server.key.pkcs8.der -outform der -nocrypt
-
将生成的der证书导入安卓
可以使用 magisk模块或者手动将其转换为.0形式的证书导入(使用magisk模块可能存在一些问题,建议手动导入)
-
burpsuit中导入证书和私钥
- 重启burpsuit
方法二 使用fiddler中转
除了自建CA和私钥以外还可以使用证书有效期更短的抓包工具进行抓包,且这样会有一个好处:处理速度更快,相应请求更及时。
-
设置Fiddler证书有效期
在Fiddler的QuickExec中输入about:config 进入设置页面
-
增加以下设置
fiddler.certmaker.ValidDays 820
-
导出Fiddler证书
此时的证书有效期即为820天
burpsuit的相应速度是目前我用过的抓包工具里最慢的,有些App在抓包时会导致请求时间被拖到2秒以上,有些超时时间比较短的App这时就超时了,Fiddler和Charles的相应时间比Burpsuit快N倍。
所以可以用Fiddler作为中转,这样速度反而更快:
-
Android手机中安装Fiddler证书
-
Fiddler中设置抓取https
- Fiddler中设置网关,指向burpsuit的地址
-
设置完成即可使用
-
注意事项
使用时需要先启动burpsuit,否则fiddler检测到网关不可用就会跳过设置
将CA证书安装为系统证书
安卓7.0及以上系统对于证书的安全策略做了修改,用户证书只能用于代理浏览器的流量,默认不再信任用户自己安装的证书。(ios和安卓<7.0的版本没有此问题)
将证书转换为Android可识别的系统证书格式
cer和pem格式都可以,若为der格式则需要转换一下
# cer/crt格式证书
openssl x509 -inform DER -subject_hash_old -in <Certificate_File>
# 也可以将上一步输出的公钥复制一下到<Certificate_Hash>.<Number>,不过可能会出现编码问题
openssl x509 -inform DER -in <Certificate_File> -text > <Certificate_Hash>.<Number>
# pem格式证书
openssl x509 -inform PEM -subject_hash_old -in <Certificate_File>
cp <Certificate_File> <Certificate_Hash>.<Number>
证书的命名规则: <Certificate_Hash>. 文件名是一个Hash值,而后缀是一个数字
后缀名的数字是为了防止文件名冲突,比如如果两个证书算出的Hash值是一样的话,那么一个证书的后缀名数字可以设置成0,而另一个证书的后缀名数字可以设置成1
# 执行之后的效果
➜ Charles openssl x509 -inform PEM -subject_hash_old -in charles-ssl-proxying-certificate.pem
c89a8671
-----BEGIN CERTIFICATE-----
MIIFRjCCBC6gAwIBAgIGAXXQ6fVFMA0GCSqGSIb3DQEBCwUAMIGnMTgwNgYDVQQD
DC9DaGFybGVzIFByb3h5IENBICgxNiBOb3YgMjAyMCwgQ0ZDQS1NQlAxLmxvY2Fs
KTElMCMGA1UECwwcaHR0cHM6Ly9jaGFybGVzcHJveHkuY29tL3NzbDERMA8GA1UE
CgwIWEs3MiBMdGQxETAPBgNVBAcMCEF1Y2tsYW5kMREwDwYDVQQIDAhBdWNrbGFu
ZDELMAkGA1UEBhMCTlowHhcNMjAxMTE1MTE1NjM1WhcNMjExMTE1MTE1NjM1WjCB
pzE4MDYGA1UEAwwvQ2hhcmxlcyBQcm94eSBDQSAoMTYgTm92IDIwMjAsIENGQ0Et
TUJQMS5sb2NhbCkxJTAjBgNVBAsMHGh0dHBzOi8vY2hhcmxlc3Byb3h5LmNvbS9z
c2wxETAPBgNVBAoMCFhLNzIgTHRkMREwDwYDVQQHDAhBdWNrbGFuZDERMA8GA1UE
CAwIQXVja2xhbmQxCzAJBgNVBAYTAk5aMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
MIIBCgKCAQEAppW0OnzrzafdrSI8lZk7PSQ1W7yNeB9YHAha2VGSkh88Kc6mxJnh
p2OQWxfNZppWYNTRNrCPbaWNfpIlcplqzkxTekOiLS+iaVRd5fbHVGj02hNEYatX
SS/UNn+kMFh1Uv6nihaYdvw1Xdb3W/QOvZR9xjLvhv5ePqm2zb3ez13z5bhOIyIy
ZSleLxnygq6hDhturZP+W+3SSbREVtRPQMUPy5zbUqJm+0EyEwrod/27D1EHl1JV
VeMbzMzQmQRVCefnF8dtJXbQp6jRHQWXfKu3wfNEYa1oWZcODCcfaVEzCWESsN4w
QJCwj85kOlwPwOHMCR9uhyFJ4ldlUaxk1QIDAQABo4IBdDCCAXAwDwYDVR0TAQH/
BAUwAwEB/zCCASwGCWCGSAGG+EIBDQSCAR0TggEZVGhpcyBSb290IGNlcnRpZmlj
YXRlIHdhcyBnZW5lcmF0ZWQgYnkgQ2hhcmxlcyBQcm94eSBmb3IgU1NMIFByb3h5
aW5nLiBJZiB0aGlzIGNlcnRpZmljYXRlIGlzIHBhcnQgb2YgYSBjZXJ0aWZpY2F0
ZSBjaGFpbiwgdGhpcyBtZWFucyB0aGF0IHlvdSdyZSBicm93c2luZyB0aHJvdWdo
IENoYXJsZXMgUHJveHkgd2l0aCBTU0wgUHJveHlpbmcgZW5hYmxlZCBmb3IgdGhp
cyB3ZWJzaXRlLiBQbGVhc2Ugc2VlIGh0dHA6Ly9jaGFybGVzcHJveHkuY29tL3Nz
bCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4wDgYDVR0PAQH/BAQDAgIEMB0GA1UdDgQW
BBRKPjF6Bxrw4PqTnjH73H7fc8LtsTANBgkqhkiG9w0BAQsFAAOCAQEAgRiIvyIR
PL1l7BbH4fklVBb0w0ECgKDcJhqBsmFINmrPcC7+9eWfuQo38zb2IGNvhwxSh+AP
5Z2KWS7US5zj/Cvsc2H39bez1mIyYtVGQWozWZJNS1Z92UKxn0M7qnnLfLx+MHP3
8V7Bxnn6oueTrhgMwjE4g1nv7s2U1d0bm9sYuHtgPVkkjf80XmrsplltY92Re4Fr
my5ybjeom48kYR54G0hnHnOKjno0Cxdao6uQ22yba8Nvd62PZp3IT5KnR8Q6Hb/D
TGqQFISJPPPjwlHQqT9ITTlywilaZO2ycROp0JIXUIY5dBS9MZfoytdpa1ca8e6p
lWJUSWwegh7TeQ==
-----END CERTIFICATE-----
# 执行下一步
openssl x509 -inform PEM -text -in charles-ssl-proxying-certificate.pem > c89a8671.0
编辑输出的文件,把"-----BEGIN CERTIFICATE-----"到文件结束这部分移动到文件首部或者将其余部分删除掉
将转换后的证书放到Android系统证书目录下
目录:/system/etc/security/cacerts/
可以使用RE管理器直接复制,不需要复杂的adb命令操作