证书加密为了解决:
- 完整性 2. 保密性 3.身份
保密性: 通过校验算法: MD5, SHA1(128Bits), SHA2(256Bits)等
身份: 通过授信任的根证书机构CA颁发的证书, 再拿自己操作系统内预埋的受信任的根证书机构本身的
证书: 一般包含 公钥, 公钥的数字签名(用公钥的拥有者所拥有的私钥进行签名), 公钥拥有者信息.
证书签名: 就是上面提到的公钥的数字签名, 用OS内预埋的根证书附带的公钥进行解密, 即可得到公钥, 拿证书附带的公钥进行比对, 如果一致, 那么这个证书签名就是真的, 也同时证明了 该证书拥有者的身份.
证书机构: 根证书机构, 中间根机构, CA申请者
2
常见加密方式:
非对称:RSA\DSA
对称:DES\3DES\AES
不懂得点: 经过1\2次交互,客户端验证服务器的身份仅仅是通过用服务器发来的PubKey解密密文吧, 怎么跟传过来的证书搭配使用. 数字签名\指纹的概念不太懂, 以及第四步, 通过Client random、Server random和Premaster secret,这三样东西,经过什么算法原理, 这个Key-session是什么.
(1)如何保证公钥不被篡改?
解决方法:将公钥放在数字证书中。只要证书是可信的,公钥就是可信的。
(2) 如果服务器想对授权的客户端开放验证, 就要在第一步客户端请求时加上自己的客户端证书
除了上面这些信息,如果服务器需要确认客户端的身份,就会再包含一项请求,要求客户端提供"客户端证书"。比如,金融机构往往只允许认证客户连入自己的网络,就会向正式客户提供USB密钥,里面就包含了一张客户端证书。
1、客户端请求建立SSL链接,并向服务端发送一个随机数–Client random和客户端支持的加密方法(例如RSA\DSA),比如RSA公钥加密,此时是明文传输。
2、服务端回复一种客户端支持的加密方法、一个随机数–Server random、授信的服务器证书和非对称加密的公钥。
3、客户端收到服务端的回复后利用服务端的公钥,加上新的随机数–Premaster secret 通过服务端下发的公钥及加密方法进行加密,发送给服务器。
4、服务端收到客户端的回复,利用已知的加解密方式进行解密,同时利用Client random、Server random和Premaster secret通过一定的算法生成HTTP链接数据传输的对称加密key – session key。
此后的HTTP链接数据传输即通过对称加密方式进行加密传输。
再来看看非对称加密,非对称加密有两个密钥,公钥和私钥,公钥公开,私钥私有。
非对称加密的例子
加密:
A想要传输信息给B,那么B首先生成公钥和私钥,公钥发送给A,私钥保留,A收到B的公钥之后,将信息利用公钥加密,然后传输给B,B通过私钥解密。
防止篡改:
B想要给A发送一个证明,那么B首先生成公钥和私钥,利用私钥加密证明生成加密文件,然后将证明和加密文件以及公钥一同发送给A,A收到之后,利用公钥将加密文件解密,然后对比证明,如果相同,则可以认为证明没有被篡改过。