导航:首页 > 操作系统 > androidpem证书

androidpem证书

发布时间:2024-06-16 21:15:40

‘壹’ APK签名机制原理详解

众所周知,android系统在安装Apk的过程中,会对Apk进行签名校验,校验通过后才能安装成功。那你知道签名校验的机制是什么?具体校验的是什么内容吗?申请第三方SDK(如微信支付)时填入的SAH1值是什绝颂高么?目前众多的快速批量打包方案又是如何绕过签名检验的?

我将通过一系列的文章来解开这些疑惑:

这篇文章先来介绍Apk签名相关的基本知识。

要知道签名是什么,先来看为什么需要签名 。大家都知道,在消息通信时,必须至少解决两个问题:一是确保消息来源的真实性,二是确保消息不会被第三方篡改。在安装Apk时,同样需要确保Apk来源的真实性,以及Apk没有被第三方篡改。如何解决这两个问题呢?方法就是开发者对Apk进行签名:在Apk中写入一个“指纹”。指纹写入以后,Apk中有任何修改,都会导致这个指纹无效,Android系统在安装Apk进行签名校验时就会不通过,从而保证了安全性。

要了解如何实现签名,需要了解两个基本概念:数字摘要和数字证书。

简单来说,就是对一个任意长度的数据,通过一个Hash算法计算后,都可以得到一个固定长度的二进制数据,这个数据就称为“摘要”。摘要具有下面的几个特征:

前面已经说到,可以通过签名来确保数据来源的可靠性和数据的不可篡改性。签名就是在摘要的基础上再进行一次加密,对摘要加密后的数据就可以当作数字签名,在安装Apk需要对签名进行验证,验证通过才能继续安装。

这里有两个过程:签名过程 和 校验过程。

先来说 签名过程:

再来看 校验过程:

这里有一个前提:接收方必须要知道发送方的公钥和所使用的算法。如果数字签名和公钥一起被篡改,接收方无法得知,还是会校验通过。如何保证公钥的可靠性呢?答案是数字证书,数字证书是身份认证机构(Certificate Authority)颁发的,包含了以下信息:

接收方收到消息后,先向CA验证证书的合法性(根据证书的签名、绑定的域名等信息。CA机构是权威的,可以保证这个过程的可靠性。)再进行签名校验。

需要注意的是,Apk的证书通常的自签名的,也就是由开发者自己制作,没有向CA机构申请。Android在安装Apk时并没有校验证书本身的合法性,只是从证书中提取公钥和加密算法,这也正是对第三方Apk重新签名后,还能够继续在没有安装这个Apk的系统中继续安装的原因。

我们在对Apk签名时并没有直接指定私钥、公钥和数字证书,而是使用keystore文件,这些信息都包含在了keystore文件中。根据编码不同,keystore文件分为很多种,Android使用的是java标准keystore格式JKS(Java Key Storage),所以通过Android Studio导出的keystore文件是以.jks结尾的。

keystore使用的证书标准是X.509,X.509标准也有多种编码格式,常用的有两种:pem(Privacy Enhanced Mail)和der(Distinguished Encoding Rules)。jks使用的是der格式,Android也支持直接使用pem格式的证书进行签名,我们下面会介绍。

两种证书编码格式的区别:


X.509证书格式:

Android提供了两种对Apk的签名方式,一种是基于JAR的签名方式,另一种是基于Apk的签名方式,它们的主要区别在于使用的签名文件不一样:jarsigner使用keystore文件进行签名;apksigner除了并尺支持使用keystore文件进行签名外,还支持直接指定pem证书文件和私钥进行签名。

不知道大家有没有注意一个问题,我们通过樱御keytool或者AS生成一个keystore的时候( 签署您的应用 ),除了要输入keystore的密码外,还要输入一个alias和key的密码。在签名时,除了要指定keystore文件和密码外,也要指定alias和key的密码,这是为什么呢?

原因是keystore是一个密钥库,也就是说它可以存储多对密钥和证书,keystore的密码是用于保护keystore本身的,一对密钥和证书是通过alias来区分的。从这里可以看出jarsigner是支持使用多个证书对Apk进行签名的。apksigner也同样支持,关于apksigner的使用介绍可以参考官方文档 apksigner 。

ok,签名的基本概念和校验过程就介绍到这里,关于JAR签名和V2签名机制的详细介绍,参考下面两篇文章:

‘贰’ 手机端抓包工具

Charles 手机抓包

接口测试之——fiddler抓包、过滤、断点调试

AndroidHttpCapture---手机轻松抓包工具

AndroidHttpCapture使用方法:
【搭建环境】
1.在测试手机安装AndroidHttpCapture即可。
2.如果测试手机使用移动网络,新增一个接入点,将其代理服务器设置为127.0.0.1 端口为8888,别的参数参照已选中的接入点进行配置,保存后选择该新增接入点即可。
如果测试手机使用WIFI,把WIFI代理设为127.0.0.1:8888。
3.首次进入AndroidHttpCapture时安装CA证书,然后把自冲羡签名证书添加到系统根证书目录。
自签名证乎陪书所在路径:手机根目录岁判蠢的har/littleproxy-mitm.pem。
自签名证书添加方法:
首先用openssl命令计算证书的哈希值(可以打开Linux环境Git Bash命令窗口):

然后把上面的哈希值作为文件名,添加证书(可以打开Windows环境CMD命名窗口):

【使用方法】
https://github.com/JZ-Darkal/AndroidHttpCapture

【查看HAR文件】
http://h5.darkal.cn/har/

‘叁’ 如何为apk以及zip文件签名

如果你只是想知道如何签名及下载签名工具,请直接看“如何使用SignApk.jar来为一个apk或zip文件签名”部分。要创建自己的证书请从头看起。
准备知识:
当你要发布一个软件或是自制的ROM时,你就需要一个使用了私钥的证书来为.apk或.zip文件进行签名。Android系统使用证书来识别软件作者和软件之间所建立的认证关系。做这个事情最经典的方式就是用keytool创建证书,然后使用jarsigner进行签名。但是本教程则会提供一个对于大多数人来说更为容易的方法,那就是使用一个名为SignApk.jar的工具。
SignApk.jar是一个已包含在Android平台源码包中的工具,你可以在本贴的附件中下载。如果要使用SignApk.jar,你需要创建一个带有对应证书/公钥的私钥。而你可以使用Openssl来创建私钥/公钥对。在Unix/Linux系统中使用Openssl相对来说比较容易。对于Windows用户,你可以在本贴附件或此链接中下载Windows版本的Openssl。
如何使用OpenSSL创建私钥/公钥对(也就通常说的证书文件,有误勿怪)(Windows版本)

下载附件中的openssl-0.9.8k_WIN32.zip
将下载到的压缩解压到你电脑上的任意位置(例如:C:\OpenSSL)
在OpenSSL\bin文件夹下按顺序输入(使用CMD命令行工具,其中第2步会需要你输入一些信息,见图):
1、openssl genrsa -out key.pem 1024
2、openssl req -new -key key.pem -config C:\OpenSSL\openssl.cnf -out request.pem
3、openssl x509 -req -days 9999 -in request.pem -signkey key.pem -out certificate.pem
4、openssl pkcs8 -topk8 -outform DER -in key.pem -inform PEM -out key.pk8 -nocrypt

大星星提示:如果你的recovery不具备签名校验切换功能,那么用你自己生成的证书文件来给ROM签名,会提示签名校验失败。因为目前几乎所有的第三方recovery中所带的私钥都是testkey的。(附件中的android.zip里面所包含的证书文件已更新为testkey)

如何使用SignApk.jar来为一个apk或zip文件签名:

下载附件中的android.zip
将下载到的压缩包解压到你电脑上的任意位置(例如:C:\android)
如果你的电脑上还没有安装JAVA环境,请下载并进行安装。
(如果你创建了自己的私钥/公钥对)复制certificate.pem和key.pk8到你解压得到的android文件夹中
使用CMD命令行工具cd到android文件夹,然后输入:(对于我提供的包,只需要将要签名的文件放在android文件夹中,然后拖至对应的批处理文件上即可)
java -jar signapk.jar certificate.pem key.pk8 your-app.apk your-signed-app.apk
或是
java -jar signapk.jar certificate.pem key.pk8 your-update.zip your-signed-update.zip

‘肆’ android中pem证书是怎样生成的

证书都可以用openssl工具链来生成。
OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。
在OpenSSL被曝出现严重安全漏洞后,发现多数通过SSL协议加密的网站使用名为OpenSSL的开源软件包。由于这是互联网应用最广泛的安全传输方法,被网银、在线支付、电商网站、门户网站、电子邮件等重要网站广泛使用,所以该漏洞影响范围广大。
OpenSSL漏洞不仅影响以https开头的网站,黑客还可利用此漏洞直接对个人PC发起"心脏出血"(Heartbleed)攻击。据分析,Windows上有大量软件使用了存在漏洞的OpenSSL代码库,可能被黑客攻击抓取用户电脑上的内存数据。

‘伍’ 如何使用P12证书的Android

P12格式证书导入android的方法:
keytool无法直接导入PKCS12文件。
第一种方法是使用IE将pfx证书导入,再导出为cert格式文件。使用上面介绍的方法将其导入到密钥仓库中。这样的话仓库里面只包含了证书信息,没有私钥内容。
第二种方法是将pfx文件导入到IE浏览器中,再导出为pfx文件。
新生成的pfx不能被导入到keystore中,报错:keytool错误: java.lang.Exception: 所输入的不是一个 X.509 认证。新生成的pfx文件可以被当作keystore使用。但会报个错误as unknown attr1.3.6.1.4.1.311.17.1,查了下资料,说IE导出的就会这样,使用Netscape就不会有这个错误.
第三种方法是将pfx文件当作一个keystore使用。但是通过微软的证书管理控制台生成的pfx文件不能直接使用。keytool不认此格式,报keytool错误: java.io.IOException: failed to decrypt safe contents entry。需要通过OpenSSL转换一下:
1)openssl pkcs12 -in mycerts.pfx -out mycerts.pem
2)openssl pkcs12 -export -in mycerts.pem -out mykeystore.p12
通过keytool的-list命令可检查下密钥仓库中的内容:
keytool -rfc -list -keystore mykeystore.p12 -storetype pkcs12
这里需要指明仓库类型为pkcs12,因为缺省的类型为jks。这样此密钥仓库就即包含证书信息也包含私钥信息。

‘陆’ 安卓7.0以上手机写入系统证书

记录一场手动写入系统证书

谷歌在安卓7.0修改了安全策略,用户添加的CA证书不能再用于安全连接,对于https传输的数据就抓取不到了,会显示<unknown>。
我的解决方法是将charles的CA证书安装进系统信任的证书目录下,这样在开启charles代理的时候,系统就会认为CA证书安全,从而可以获取https数据。

用 “openssl x509 -inform PEM -subject_hash_old -in charles-ssl-proxying-certificate.pem”计算出hash值,并将后缀设为0

生成hash后,替换对应名称重新生成文件
//cer格式
openssl x509 -inform DER -text -in xxx.cer > 0dd2455e.0
//pem格式
openssl x509 -inform PEM -text -in xxx.pem > 0dd2455e.0

然后通过设置charles代理就可以查看到https的数据了。

‘柒’ mitmproxy-ca-cert.pem手机证书文件安装(一直安装不上,折磨我了两天!)

在mitmproxy软件证书配置中,其中手机的证书安装过程一般为:

“将mitmproxy-ca-cert.pem”文件发送到手机上,点击证书文件,便会出现一个安装窗口。”

但是,我的Android手机并不识别pem文件,如华为荣耀10 ,华谈掘为Nova青春版。

解决方法为:

(打开手机“设置”;选择“含腊核安全和隐私”;点击“更多安全设置”,找到“从SD卡安装”;搜索该证书文件,点击安装.)

1    设置

2  安全与隐私

3  更多安全设置

4  从存储局返设备安装

5  选中证书文件,点击安装

6  输入锁屏密码

7  给安装文件命名mitmproxy

8  结束了,完成安装!!!

阅读全文

与androidpem证书相关的资料

热点内容
加密超级特工文件夹 浏览:200
海外看影视 浏览:772
程序员办公显卡 浏览:669
phppost安全 浏览:34
cnc编程教程入门 浏览:10
抗压强度与压缩强度 浏览:447
泰剧被吊死都恐怖片 浏览:298
vip影视tv版下载 浏览:351
pdf如何把文字去掉 浏览:594
秦昊的癌症的电影 浏览:297
电脑课上python装代码 浏览:489
可以看那种视频的在线网页 浏览:163
算式1256x56的简便算法 浏览:475
西安家电维修用什么app 浏览:248
服务器如何邀请好友进去 浏览:950
java栈队列区别 浏览:100
公共电影什么意思 浏览:350
港澳电影大胸美女古装剧 浏览:398
王牌战争怎么玩别的服务器 浏览:997
stata画散点图命令 浏览:124