您的位置:首页 > 移动开发 > Android开发

android 加密:数字证书

2016-03-23 14:49 375 查看
1 数字证书就是一种特殊格式的文件,x509就是一个数字证书,公玥作为一个特殊的字段存储在证书之中,传递证书的时候就是在交互公玥,比如老王发数据给小李



不清楚的查看:
http://www.ruanyifeng.com/blog/2011/08/what_is_a_digital_signature.html
证书的电子签名:能够保证证书的可靠性



有几点一点要分析清楚的:

(1)证书中只保存发送者的公玥,证书不能保证私玥,发送者自己保存私玥。

(2)证书颁发中心CA具有自己的公玥和私玥,一定要区分CA的公玥和私玥和证书申请者的公玥和私玥区分开。

我们来分析下证书的电子签名,保证证书在传输过程中的可靠性





来源:http://blog.csdn.net/coolmeme/article/details/39958787

证书的签名有两种:上面是非根证书的签名

非根证书的签名

第一步,证书请求者到证书颁发证书请求证书,证书颁发机构验明身份之后会颁发证书,证书中的某个字段保存着请求者的公玥,注意请求者的私玥自己保存,不好保存在证书中,证书中除了保存公玥之外,还有其他字段的信息。

第二步:证书颁发者会使用某个签名算法例如MD5算法,对证书进行签名,得到签名值A,然后证书颁发中心会使用自己的CA私玥对签名值A进行加密,然后将加密后的值依附在证书的后面发送给接受者

第三步:接收方收到证书之后,会到证书的颁发网站上得到CA的公玥,使用CA的公玥进行解密,得到解密之后的签名值A,然后对接受到的证书进行hash计算得到签名值B,如果签名值B和签名值A一样,说明证书在传递过程中没有被修改。

上面是使用CA的私玥对证书进行签名,发送者使用CA的公玥对证书进行验证签名

还有一种情况是:

发送者自己自定义证书,自己生成证书,自签名证书,这种证书叫做根证书

证书中存放着自己的公玥,发送者把证书发送给对方的时候,使用自己的私玥对证书使用某个签名算法例如MD5算法,得到签名值A,然后发送者会使用自己的私玥对签名值A进行加密,然后将加密后的值依附在证书的后面发送给接受者

第三步:接收方收到证书之后,只能使用证书中的公玥才能进行解密,认证了发送者的身份,得到解密之后的签名值A,然后对接受到的证书进行hash计算得到签名值B,如果签名值B和签名值A一样,说明证书在传递过程中没有被修改,保证了证书在传递过程中的有效性。

这就是电子签名,不清楚的可以看博客android加密:电子签名

所以证书的签名:分为根证书的签名和非根证书的签名,根证书的签名采用自己的私玥签名,非根证书的签名使用颁发证书的CA的私玥进行签名


这里有几点需要说明:

数字签名签发和校验使用的密钥对是CA自己的公私密钥,跟证书申请者提交的公钥没有关系。

数字签名的签发过程跟公钥加密的过程刚好相反,即是用私钥加密,公钥解密。

现在大的CA都会有证书链,证书链的好处一是安全,保持根CA的私钥离线使用。第二个好处是方便部署和撤销,即如何证书出现问题,只需要撤销相应级别的证书,根证书依然安全。

根CA证书都是自签名,即用自己的公钥和私钥完成了签名的制作和验证。而证书链上的证书签名都是使用上一级证书的密钥对完成签名和验证的。

怎样获取根CA和多级CA的密钥对?它们是否可信?当然可信,因为这些厂商跟浏览器和操作系统都有合作,它们的公钥都默认装到了浏览器或者操作系统环境里。比如firefox就自己维护了一个可信任的CA列表,而chrome和IE使用的是操作系统的CA列表。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: