Https

222 阅读6分钟

1、Http 协议存在的一些问题

  • http报文明文发送,可能会被第三方窃听
  • http报文可能会被第三方截取之后修改通信内容,接收方没有办法发现报文内容的修改
  • http还存在认证问题,第三方可以冒充他人参与通信

2、Https简介

  • HTTPS指的是超文本传输安全协议,HTTPS是基于HTTTP协议的,不过它会使用TLS/SSL来对数据进行加密,即Http+TLS/SSL(混合加密)
  • 使用TLS和SSL协议,所有的信息都是加密的,第三方没有办法窃听,并且他提供了一种校验机制,信息一旦被篡改,通信双方立刻就会发现
  • 它还配备了身份证书,防止身份被冒充的情况出现
  • Https组成: HTTP协议 + 混合加密 + CA证书 + 数字签名

3、SSL加密方式

  • 对称加密

    对称加密即客户端和服务端同时约定同一种秘钥,客户端发送信息给服务端使用该秘钥加密,服务端收到信息后在用秘钥解密,整个流程类似下面这个例子: 期末考试,小明找小红希望数学考试的时候小红可以帮他,两个人考试前约定了一把秘钥:小红把所有的答案都加上250; 小红把答案通过秘钥加密: 15 + 250 = 265 --> 偷偷的丢给小明 小明通过秘钥解密: 265- 250 = 15 ---> 小明得到正确答案

    • 对称加密加密效率高速度快

    • ❗❗❗ 但是该加密方式存在一些漏洞,假如别人获取到了加密方式,然后再用该方案来解密,那数据信息岂不是还是可以被截取修改,因此出现了非对称加密的方案

      image-20220213154442752

  • 非对称加密

    非对称加密就是有两把密钥,公钥和私钥。私钥自己藏着,不告诉任何人;而公钥可以公开给别人。

    非对称加密即通信双方各自有一个秘钥和公钥,公钥用来对信息进行加密,私钥用来对信息进行解密; 通信的时候, 公钥是随着信息一起发送给对方的,即公钥是公开的, 但是私钥是不会公开的 假如A发送信息给B:

    • A把自己发送的信息连同公钥(加密方式)一起发送给B,
    • B方收到信息和公钥的时候,把返回的信息通过A的公钥对信息进行加密
    • 返回信息给A的同时把自己的公钥和密文一起发送给A
    • A收到B的加密信息之后,再通过自己的私钥对信息进行解密,如果还需要和B进行通信,再用B的公钥加密即可
    • 非对称加密相对于对称加密安全度是高了一点,但是如果拦截方把数据拦截下来,将自己的数据用拦截下来的公钥加密后返回给发送方,放松方并不能识别出来是不是目标通信对象发来的信息,因此还需要数字签名来作保障

    image-20220213154503026

4、数字签名

数字签名是附加在报文上面的特殊加密校验码.可以防止报文被篡改,如果恶意攻击在传输过程中篡改了报文,那么校验的时候就不再匹配,因此可以确认报文被篡改;

数字签名加密过程:

  • 发送端将报文通过算法(比如通过HASH函数)提取为定长的摘要;
  • 发送端将摘要应用签名算法,以私有密钥作为参数生成一个签名;
  • 计算得出签名后,将签名附加在报文末端发送给接收方;
  • 接收端收到报文后,对签名进行检查。接收端通过公开密钥解码签名。然后比对报文生成的摘要是否与签名一致便可判断报文是否被篡改。

5、数字(CA)证书:

数字证书是由权威机构给某网站颁发的一种认可凭证。它主要包含一些认证信息,比如:对象的名称(服务器、组织、个人等)、过期时间、证书颁发者、来自证书发布者的数字签名。

image-20220213154553609

上面的图片就是www.github.com的证书。

我们可以看到在上面讲到数字签名的时候,似乎就可以保证报文的安全了。为什么还需要数字证书呢?这个设想一下这个场景:比如某人A把发送到浏览器的公有密钥进行了替换,同时A在给浏览器发送报文时使用自己的私有密钥对报文进行数字签名,那么浏览器就不能确认报文是否来自于真实服务器。这个时候就可以使用数字证书进行验证,因为数字证书中保存了真实服务器的信息。

6、HTTPS的工作流程

建立安全传输 在TCP连接建立完成以后,在HTTPS协议中,客户端和服务端会初始化SSL层,也就是安全层。

SSL握手 在发送报文之前,客户端和服务端会进行一次SSL握手,在这个过程中主要完成以下工作:

  • 交换协议版本号;

  • 选择一个两端都了解的密码;

  • 对两端的身份进行认证;

  • 生成临时会话密钥,以便加密信道(建立完安全通道后,传输报文时使用对称加密);

在SSL会进行很多工作,处理交换一些必要的信息之外,还会对身份进行认证。

这里的认证是通过数字证书进行的,在客户端获取证书后,会采用相应的算法对服务端的身份信息进行验证:

  • 日期检测:客户端会检查证书的有效期是否合法;

  • 签名颁布者可信度检测:浏览器会附带一个签名颁发机构的授信列表,如果浏览器收到了位置的颁发机构签发的证书,那么它会显示一条警告信息;

  • 签名检测:客户端对签名使用签名颁发机构的公开密钥,然后将其与校验码比较,以便验证证书是否合法;

  • 站点身份检测:客户端验证数字证书中的域名是否与服务端的域名匹配;

身份认证完成后,客户端与服务端进行密码协商,确定本次连接采用哪种加密算法进行通信。

开始通信 SSL握手完成后,就完成建立了HTTPS通道,客户端与服务端就会根据协商的加密算法进行通信。

6、总结

相较于HTTP协议,HTTPS确保了报文的机密性以及完整性。HTTPS确保这些的依赖就是SSL/TSL协议,SSL/TSL安全协议搭配数字证书保证了报文在传输过程中的绝对安全。