数字证书和数字签名
个人总结就是数字签名用来保证数据没有被篡改,数字证书用来验证数据的身份。
数字证书 = 元信息+数字签名(元信息hash + 私钥加密)
http://www.ruanyifeng.com/blog/2011/08/what_is_a_digital_signature.html
证书的签发(Signing)和认证(Verification)的过程:
签发过程:
- data里是证书的元信息,包含签发人(谁签发的这个证书),有效期,证书持有者的信息(域名),和持有人的公钥。
- 证书元信息通过hash算法生成摘要信息
- 用签发人的私钥对摘要信息进行加密生成数字签名(用签发人的公钥对摘要信息进行解密)
- 数字签名+证书元信息 = 签名过的证书
验证步骤:
- 签名过的证书 = 数字签名 + 证书元信息
- 证书元信息通过hash算法生成摘要信息
- 用签发人的公钥解密数字签名获得解密后摘要信息
- 对比解密后的摘要信息 和 hash算法生成摘要信息
总结 如果能用签发人的公钥解密数字签名证明这个证书的签发人,如果解密后的摘要信息等于hash算法生成的摘要信息证明证书元信息没有被篡改(也就保证了持有人公钥没有被篡改)
证书可以保证持有人的公钥匙不被篡改,但是这里有一个问题,如果证书是伪造的呢?想象一下证书的持有人没有去正规的ca签发,自己在证书的元信息中伪造了持有人的信息,比如把域名改成了淘宝自己伪装成马云爸爸。这多危险啊,所以还要对证书的身份做验证,你说你是马云爸爸不行,我看看你签发人的信息!你签发人要是阿里巴巴我才相信你。如果我把数字证书看成一个证书元信息,在对他进行一次数字签名是不是就可以证明我这个数字证书的身份了,有点绕我在说一下 ((证书元信息+数字签名)+数字签名)+数字签名)有点感觉了么?最终最外层的那个证书就叫做根证书,根证书是由根ca(证书中心)签发的,这俩别搞混了。
从上图可以看到,证书的元信息里有一个签发人的ca和签发人的ca的数字签名,那怎么验证签发人的ca是合法的呢?比如我说我是马云是因为一个神经病说我是马云,这肯定不对是吧,必须是阿里巴巴承认我是马云,那我证明阿里巴巴是合法的呢?往上一级一级的认证,最后到国税局认证,国税局肯定不会骗人吧,国税用他的公钥验证阿里巴巴的数字签名(数字签名=hash+签发人的私钥)如果正确就证实了阿里巴巴的合法性,由于可以确认阿里巴巴是真实合法的,再来验证我是马云。