一步一步理解HTTPS

1、对称加密的理解:通信双方共用一个秘钥

2、非对称加密(RSA):

        1、私钥 + 公钥 = 秘钥对

        2、私钥加密的数据只能公钥解开,反之亦然

        3、通信之前双方会把公钥分别发给对方,然后用公钥加密数据,双方用自己的私钥来解密 

3、采用非对称加密造成速度缓慢的解决办法

        1、先生成一个对称加密算法的秘钥、用RSA的方式安全的发给对方

        2、随后再用对称加密的秘钥来通信 

4、再说说上面的方式,上面的方式存在一个明显的中间人问题

假设客户端和服务器之间存在一个中间人,这个中间人只要把原本双方通信互发的公钥换成自己的公钥,这样中间人们就可以轻松解密通信双方所发送的所有数据

5、证书的出现就是为了解决以上问题

证书包括个人的基本信息和公钥

简单的来说就是找一个大家公认的中介,来证明我就是我,你就是你的问题,防止中间人篡改:

但证书还是会有问题,比如证书在传输的过程中被篡改了呢,所以又出现了数字签名。

6、数字签名

        1、简单的说就是把公钥和个人信息用一个hash算法生成一个消息摘要 

        2、这个hash算法有个极好的特性,就是输入数据只要发生一点变化,那形成的消息摘要就会有巨变,能有效防止别人篡改 

        3、但如果中间人直接替换掉所有的整个原始信息,那么依旧可以伪造消息 

        4、所以就出现了CA, 这时CA在用他的私钥对消息摘要进行加密,形成签名,并把原始信息和数据签名进行合并,即所谓的’数字证书’

        5、这样当别人把他的证书发过来的时候,我们再用同样的hash算法生成消息摘要,然后用CA公钥进行数字签名解密,得到CA创建的消息摘要两者对比就可以知道中间有没有被人篡改了

7、https具体同心过程:

借用网上的一张图:


HTTPS.png

过程解释如下:

1、客户端首先会将自己支持的加密算法,打个包告诉服务器端。

2、服务器端从客户端发来的加密算法中,选出一组加密算法和HASH算法(注,HASH也属于加密),并将自己的身份信息以证书的形式发回给客户端。而证书中包含了网站的地址,加密用的公钥,以及证书的颁发机构等;我们常见的加密算法一般是一些对称的算法,如凯撒加密;对称算法即加密用的密钥和解密用的密钥是一个。还有一种加密解密算法称之为非对称算法。这种算法加密用的密钥(公钥)和解密用的密钥(私钥)是两个不同的密钥;通过公钥加密的内容一定要使用私钥才能够解密。这里,服务器就将自己用来加密用的公钥一同发还给客户端,而私钥则服务器保存着,用户解密客户端加密过后的内容。

3、客户端收到了服务器发来的数据包后,会做这么几件事情:

 1)验证一下证书是否合法。一般来说,证书是用来标示一个站点是否合法的标志。如果说该证书由权威的第三方颁发和签名的,则说明证书合法。    

 2)如果证书合法,或者客户端接受和信任了不合法的证书,则客户端就会随机产生一串序列号,使用服务器发来的公钥进行加密。这时候,一条返回的消息就基本就绪。

 3)最后使用服务器挑选的HASH算法,将刚才的消息使用刚才的随机数进行加密,生成相应的消息校验值,与刚才的消息一同发还给服务器。

4、服务器接受到客户端发来的消息后,会做这么几件事情:

  1)使用私钥解密上面第2)中公钥加密的消息,得到客户端产生的随机序列号。

  2)使用该随机序列号,对该消息进行加密,验证的到的校验值是否与客户端发来的一致。如果一致则说明消息未被篡改,可以信任。

  3)最后,使用该随机序列号,加上之前第2步中选择的加密算法,加密一段握手消息,发还给客户端。同时HASH值也带上。

5、客户端收到服务器端的消息后,接着做这么几件事情:

  1)计算HASH值是否与发回的消息一致    

  2)检查消息是否为握手消息

6、握手结束后,客户端和服务器端使用握手阶段产生的随机数以及挑选出来的算法进行对称加解密的传输。

为什么不直接全程使用非对称加密算法进行数据传输?这个问题的答案是因为非对称算法的效率对比起对称算法来说,要低得多得多;因此往往只用在HTTPS的握手阶段。

以下是我们一些经常使用的加密算法,是不是有熟悉的味道?

非对称加密算法:RSA, DSA/DSS

对称加密算法: AES, 3DES

HASH算法:MD5, SHA1, SHA256

推荐阅读更多精彩内容