自己的体会:

1.数字证书的作用就是保证里面的公钥还有证书指纹、加密算法啥的没有被别人篡改,然后证书中的证书指纹、发布者、所有者等和你的签名文件中的一样,证明这个app是你的(如何保证请看下文)

2.用自己的私钥计算出的签名,保证app的内容在发行过程中不被篡改

 

1.获取签名文件信息:

android 的用户证书在哪 安卓 用户证书 什么用_Android

 

获取apk中的签名:

android 的用户证书在哪 安卓 用户证书 什么用_App_02

两个指数指纹完全一样,所以签名文件能保证这个app是属于某个人的app,因为可以保证是一个签名文件签的,因为这些信息被私钥加密过所以是不能被篡改的,如果你瞎改公钥解密时会出错

但是不能保证这个app没有被动过:

android 的用户证书在哪 安卓 用户证书 什么用_签名文件_03

第三步因为用自己的私钥计算出签名(这个计算出来的签名是在CERT.RSA文件中并不在证书中,CERT.RSA包括证书和计算出的签名),所以不可能被伪造、修改(如果被伪造进行验证的时候,因为不是私钥计算的所以公钥解密后内容会不一样)。

Android的签名机制(用私钥计算出的签名)能保证App再发布的过程中不被其他人篡改

这里看到证书中并不包含apk签名流程中第三部生成CERT.RSA时对用私钥计算出的签名。所以证书的信息是不会改变的,这也验证了上面所说的RSA中证书指纹和.keystone中的指纹相同的问题

上图最下面的文字,用CA的私钥对证书的所有域及这些域和Hash值一起加密,这个CA的私钥就是证书自己的私钥,这个保证这些信息都是可靠的(证书的内容被hash和签名(用CA的私钥加密)这样如果证书内容被篡改,那那公钥解密后就会和内容对不上,因为没有私钥,所以不可能伪造已加密的Hash值)