先来了解几个概念:
- 非对称加密:使用一对**(公钥、私钥),通过一定数学关系,使通过其中一个**加密的内容只能通过另外一个**进行解密私钥自持,公钥提供给其他用户。
- 摘要算法:摘要算法是一种方法,它将一个任意长度的数据变换为一个定长的数据串,这一定长的数据串被称为消息摘要,也有数据指纹之称。合格的摘要算法必须满足下列条件:
找出具有相同摘要的消息集合在技术上是不可能的;
对一给定的消息摘要,反向计算出消息本身在技术上是不可行的。
ps: 数据发送方在数据发送前,首先用摘要算法对数据计算消息摘要,然后将数据和消息摘要一起发送给接受方。接受方用相同的摘要算法对数据重新计算消息摘要,通过对二个消息摘要的比较,可以明确地判断出数据在传输过程中是否被篡改。结果相同表示数据未被修改,而结果不同表明数据被修改或数据被丢失,从而保证数据在传输过程中的完整性。常用的摘要算法有MD2和MD5,它是由RSA实验室发明的,具体算法请参阅RFC1319和RFC1321。
数字签名:数字签名实际上是非对称密码算法和消息摘要算法的一种组合应用,其目的在于:如某人张三对一段消息进行了数字签名,那么其它的人都能验证这个签名确实是张三签的,同时也能验证张三签名后数据是否被篡改。下面的例子将详细介绍Alice如何对一份合同M进行数字签名,同时Bob又是如何来验证她所签的合同。见图示:
Alice准备了一份合同M;
Alice用摘要算法计算出该合同M的消息摘要MD;
Alice用非对称算法和自己的私钥对合同消息摘要MD进行加密,该密文S就是合同的数字签名;
Alice将合同M和合同的数字签名S合并在一起,通过网络传送到合同的接受者Bob;
Bob收到Alice的合同M及合同的数字签名S;
Bob用Alice的公钥对合同签名S进行解密,得到Alice计算的合同摘要MD;
Bob采用相同摘要算法对收到的合同重新计算消息摘要MD’;
Bob比较MD与MD’是否相等?
如结果相等,根据摘要算法的特性表明合同在传输过程中未被篡改。同时由于非对称加密算法的特性可以断定合同确实是Alice发送的,因为用Alice公钥能解密成功的数据只有Alice用她自己私钥对其进行加密才能产生,而她的私钥其它人是无法获取的。
1、浏览器将自身支持的SSL版本;加密组件(RAS加密算法、对称加密算法、hash摘要算法+**长度)
发送给网站–Client Hello 通知网站开始SSL通信
2、服务器可以进行SSL通信时,会以Server Hello应答,包含:
+ SSL版本
+ 从Client Hello中筛选出来的加密组件
然后,发送Certificate报文,其中包含公开**证书,证书中包含的内容有:
+ 公钥
+ 数字证书认证机构的数字签名(认证机构将服务器公钥内容用摘要算法进行加密后通过自持私钥进行加密生成)
最后发送Server Hello Done通知浏览器第一阶段的ssl握手协商部分结束
3、浏览器接收到证书后,首先验证证书的合法性(浏览器中一般安装了一些知名ca的公钥,将此公钥与获取到的数
字签名发送给对应ca通过ca自持私钥对签名解密后得到的公钥摘要内容与发送的公钥内容通过摘要后得到的内容比对,
若相同则通过认证),确认证书合法性之后,浏览器产生一个随机密码Pre-master secret(后续通过此密码进行通信)
通过公钥进行加密;同时通过选择的hash摘要算法将消息内容进行摘要后用随机密码进行加密。将加密后的随机密码以
及加密后的消息内容摘要以及消息内容原文发给网站(Change Cipher Spec)最后发送Finished报文
4、网站通过自身持有的私钥将加密后的随机密码解密后,使用密码将消息摘要解密,使用相同摘要算法将消息内容进行
摘要后与解密后获取的消息摘要进行比对,若相同则可保证消息完整性;完成后发送Change Cipher Spec报文通知浏览器
后续使用此Pre-master secret进行通信,然后发送Finished报文
加密一段握手消息,
报文流转过程
client hello–>server hello–>certificate–>server hello done–>client key exchange–>Pre-master secret–>Change
Cipher Spec(客户端发送)–>Finished–>Change Cipher Spec(服务器发送)–>Finished