先理清HTTPS的流程:
消息认证:第五步 --> 第六步过程中,对加密后的YY做单向散列函数操作(准确的说是做了消息认证,本质上其实也是单向散列函数),因为密钥只有客户端和服务器知道,这就保证了数据的完整性,简单的单向散列函数只能做判断数据信息被篡改没有,但是无法判断客户端是否发了消息,还是是别人伪装发的消息,要识别对方是否是伪装的,只有通过双方共有的密钥来确定。对方有了我们约定的密钥,说明是真身,不是伪装的,这样就保证的信息数据的完整性。
对称加密:用随机数1,2,3组成的密钥,对数据进行加密,和解密操作
单向散列函数:在生成伪随机数时,可以用单向散列函数生成随机数。
公钥加密:对随机数3,用公钥进行加密,用自己私钥解密
数字签名:验证服务器证书时用到,由于消息认证只能验证对方是否是伪装的,单向散列函数只能验证消息是否被篡改过,但二者都无法防止否认。举例说明:
A缺钱,找B借钱,B通过银行借给了A100万,然后A写借条给B,AB隔得太远,A准备用电子邮件写借条,“B,A欠B100万 ”。但是这个邮件可能被篡改(单向散列函数可以避免),这个邮件可能被人伪造(攻击人伪造A发的邮件,也可以通过消息认证来避免),但是没办法避免A的否认,因为共享密码B也知道,可能B伪造A发的邮件,或者B把密码告诉第三方,第三方伪造A发的邮件,这时消息认证就有局限性了。所以就产生了数字签名,数字签名就是公钥加密反着用。
所以在验证服务器证书时,为了确保服务器真干了这件事,不可否认,就做了数字签名校验。