android导入CA(自签名根证书)方法

Life is short , play more!
本文来自lihao's Blog,转载请注明。

本内容在Oneplus 5T上经过验证.
为什么要导入CA证书(通常的受信的CA证书已经预先导入到了我们的操作系统中), 自己导入的通常是企业内部或者自己创建的自签名根证书. (这里说的CA不是指导入用户凭证证书, 而是根证书Certificate authority) 在android系统中, 最直接的体现的是导入后, 前者证书会出现在用户凭证下. 而导入根证书, 该证书会出现在用户[信用]凭证下.

导入根证书的第一个作用, 就是通过根证书签名的这些服务器证书, 自己的设备(客户端)进行链接时,不会再提示不安全链接. 对于安全性比较高的客户端链接不安全的服务器时,会直接拒绝(断开)与服务器的链接(因为客户端认为服务端是不可信的). 我这里要导入CA证书的原因, 是因为要在手机上使用goagent的代理. 使用过goagent的同学应该不陌生, goagent 有一个已经默认初始生成好的CA.crt 文件, 这个就是根证书了. 但是goagent的CA证书版本太老, 新版本的android 版本无法正确导入CA 证书. goagent的CA证书版本是1, android 据资料查, 应该是version 3的版本.

如何检查CA证书的版本.

$openssl x509 -in certificate.crt -text -noout
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 17235696841543340895 (0xef317ef57083535f)

如果version不是3, 那么adnroid导入并不能导入到用户[信用]凭据, 而是导入到了用户凭据.

首先我们先创建自签名根证书.

1) 创建私钥 (lihaoCA.key)
openssl genrsa -out lihaoCA.key 2048
2) 自签自根证书 (lihaoCA.pem)
openssl req -x509 -new -nodes -key lihaoCA.key -sha256 -days 10024 -out lihaoCA.pem

根证书完成后, 我们将私钥添加到根证书后, 覆盖goagent的CA.crt
1) cat lihaoCA.pem > CA.crt
2) cat lihaoCA.key >> CA.crt
3) cp CA.crt 覆盖 goagent的CA.crt

重新启动goagent.

手机android端导入根证书.

1) cp lihaoCA.pem lihaoCA.crt
2) 手机将lihaoCA.crt 下载到手机存储里, 在安全里, 从存储导入lihaoCA.crt.

如下图是正确导入后的示例(导入的时候, 下面示例图, 提到的是包含一个CA证书, 如果这里不是提示CA证书, 则你前面的操作步骤出现了问题, 需要重新检查自己的生成根证书是否出现了问题) :

备注:

https 中间人攻击(或者信息截取)测试时, 也需要导入根证书, 则代理可以通过中间人攻击的方式截获到数据包.


发表评论

电子邮件地址不会被公开。 必填项已用*标注