https深入分析

https

https就是在http的基础上又增加了一个TLS层,它就是一个套壳协议。

加密和解密

https的发展和密码学的发展是分不开的。加密方式可以大体分为对称加密和非对称加密

  • 对称加密,就是加密和解密都是用同一个秘钥,这种方式优点就是速度快,缺点就是在管理和分配秘钥的时候不安全。
  • 非对称加密算法,非对称加密有一个秘钥对,叫做公钥和私钥,私钥自己持有,公钥可以公开的发送给使用的人。使用公钥进行加密的信息,只有和其配对的私钥可以解开。目前常见的非对称加密算法是RSA,非对称的加密算法的优点是安全,因为他不需要把私钥暴露出去。 在正式的使用场景中一般都是对称加密和非对称加密结合使用,使用非对称加密完成秘钥的传递,然后使用对称秘钥进行数据加密和解密

https的简要流程

1. 先是经典的TCP三次握手,这里不详细展开了。

  1. client Hello,客户端(通常是浏览器)先向服务器发出加密通信的请求

    1
    2
    3
    4
    * 支持的协议版本,比如TLS 1.0版。
    * 一个客户端生成的随机数 random1,稍后用于生成"对话密钥"。
    * 支持的加密方法,比如RSA公钥加密。
    * 支持的压缩方法。

  2. 服务器收到请求,然后响应 (server Hello)

    1
    2
    3
    4
    * 确认使用的加密通信协议版本,比如TLS 1.0版本。如果浏览器与服务器支持的版本不一致,服务器关闭加密通信。
    * 一个服务器生成的随机数random2,稍后用于生成"对话密钥"。
    * 确认使用的加密方法,比如RSA公钥加密。
    * 服务器证书。

  3. 客户端收到证书之后会首先会进行验证

验证通过之后,客户端会生成一个随机数pre-master secret,然后使用证书中的公钥进行加密,然后传递给服务器端
  1. 服务器收到使用公钥加密的内容,在服务器端使用私钥解密之后获得随机数pre-master secret,然后根据radom1、radom2、pre-master secret通过一定的算法得出session Key和MAC算法秘钥,作为后面交互过程中使用对称秘钥。同时客户端也会使用radom1、radom2、pre-master secret,和同样的算法生成session Key和MAC算法的秘钥。

https证书

服务器发给了客户端证书,客户端是如何验证证书的有效性的呢?这里我们分析一下它的原理。

SSL 证书中包含的具体内容有:
(1)证书的发布机构CA
(2)证书的有效期
(3)公钥
(4)证书所有者
(5)签名
...
CA机构在签发证书的时候,都会使用自己的私钥对证书进行签名,如果我们使用的是购买的证书,那么很有可能,颁发这个证书的CA机构的公钥已经预置在操作系统中。这样浏览器就可以使用CA机构的公钥对服务器的证书进行验签,验签之后得到的是CA机构使用sha256得到的证书摘要,客户端就会对服务器发送过来的证书使用sha256进行哈希计算得到一份摘要,然后对比之前由CA得出来的摘要,就可以知道这个证书是不是正确的,是否被修改过。
所以说原理就是因为CA机构的公钥已经预存于我们的操作系统之中。

完整的验证过程如下:
1. 首先浏览器读取证书中的证书所有者、有效期等信息进行一一校验; 2. 浏览器开始查找操作系统中已内置的受信任的证书发布机构CA,与服务器发来的证书中的颁发者CA比对,用于校验证书是否为合法机构颁发; 3. 如果找不到,浏览器就会报错,说明服务器发来的证书是不可信任的; 4. 如果找到,那么浏览器就会从操作系统中取出 颁发者CA 的公钥,然后对服务器发来的证书里面的签名进行解密; 5. 浏览器使用相同的hash算法计算出服务器发来的证书的hash值,将这个计算的hash值与证书中签名做对比; 6. 对比结果一致,则证明服务器发来的证书合法,没有被冒充; 7. 此时浏览器就可以读取证书中的公钥,用于后续加密了

参考: * 深入理解HTTPS协议 * HTTPS协议原理和流程分析