HTTPS协议

HTTPS协议,中文全称为超文本传输安全协议,即使再HTTP协议的基础上加入了SSL层,用来解决下面这些HTTP中的安全问题

1、HTTP协议为明文传输,很容易被窃听

2、HTTP没有验证数据的完整性,容易被篡改

3、HTTP没有验证对端身份,容易被伪装

要解决1,2个问题很简单只要一方对数据进行加密,另一方拿到数据后解密进行验证即可。加密的方式一般分为2种,一种是对策加密,另一种是非对称加密。

对称加密:

在对称加密算法中,加密与解密使用的是同一个密钥。对称加密算法的特点是效率高,性能好。但问题是密钥该如何约定呢?

比如你现在正在网购,需要先输入支付密码才能支付。支付密码肯定不能明文传输啊!不然黑客截获了你的请求,你的钱立马就不翼而飞。于是支付公司与你约定了一个对称加密算法来加密你的支付信息。那么问题来了,加密/解密算法需要的密钥双方都必须知道,密钥肯定不能通过网络去约定,因为一旦黑客截获了密钥,那么加密也就没有意义了。这个时候就需要用到非对称加密了。

非对称加密:

在非对称加密算法中,加密与解密的密钥是不相同的。一把作为公开的公钥,另一把作为谁都不能给的私钥。公钥加密的内容只有私钥才能解密,同理私钥加密的内容也只有对应的公钥才能解密。非对称加密算法的优势是安全性高,但其效率不如对称加密。

现在我们有了非对称加密算法。上面的问题就很容易解决了。首先支付公司将他的公钥给你,然后你用支付公司的公钥来加密对称算法的密钥,再发给支付公司,支付公司拿他自己的私钥解密,这样就可以得到对称加密密钥。这样看似完美的解决了密钥的传输问题。但是仔细想想,这样真的万无一失了么?如果在你请求支付公司的公钥时,黑客截取了你的请求,然后将他自己的公钥发给了你,这样你的信息还是泄露了。

数字证书:

这个时候就需要一个权威部门介入了。就像你的身份证,可以造出无数个假证,但是只有公安局颁发的那个才是真的身份证。在互联网世界,这个由权威部分颁发的成为证书(Certificate),这个权威部门我们称作CA(Certificate Authority)。

那么CA颁发的证书里面有什么呢?这里面最为重要的莫过于数字签名了。数字签名简单来说是将支付公司的公钥+支付公司的信息通过一种Hash算法生成一个数字摘要,然后用CA的私钥去对这个数字摘要进行加密,这样就生成了一个数字签名。再将数字签名与支付公司的公钥+支付公司的信息一起放入证书中,当我们拿到证书后,先对证书中的支付公司公钥+信息做Hash运算,如果生成的数字摘要和用CA的公钥解密数字签名得出的数字摘要一致,就表示这个证书未被改动过,里面的支付公司的公钥是真的。(PS:这里其实还有一个问题就是想要验证证书就需要CA的公钥,那么如何保证CA的公钥是对的呢?事实上CA本身也有证书表明自己的身份,由更上一级的CA为其颁发,这样一层一层网上,知道全球最著名的几个大CA。这个几个CA的公钥会预置在操作系统,或浏览器中。所以不要安装盗版的操作系统,这样相当于你的计算机在裸奔)

HTTPS的工作模式

image.png

随机数与pre-master的作用

image.png

书山有路勤为径 学海无涯苦作舟