Https协议

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Https协议相关的知识,希望对你有一定的参考价值。

参考技术A 简单地来说,是基于ssl的http协议,依托ssl协议,https协议能够确保整个通信是加密的,密钥随机产生,并且能够通过数字证书验证通信双方的身份,以此来保障信息安全。其中证书包含了证书所代表一端的公钥,以及一些其所具有的基本信息,如机构名称,证书所作用域名、证书的数字签名等,通过数字签名能够验证证书的真实性。通信的内容使用对称加密方式进行加密,通信两端约定好通信密码后,通过公钥对密码进行加密传输,只有该公钥对应的私钥,也就是通信的另一端才能够解密获得通信密码,这样既保证了通信的安全,也使加密性能和时间成本可控。

https协议在http协议和tcp协议增加一层安全层,所有请求和响应的数据在结果网络传输之前都会先进行加密,然后在进行传输。

Https协议既支持单向认证,也支持双向认证。
单向认证:只校验服务端证书的有效性。
双向认证:既校验服务端也校验客户端。

SSL的全称是Secure Socket Layer,既安全套接层。SSL协议独立于应用层,高层应用http,ftp,ssh都可以简历在ssl之上。
TLS全程是Transport Layer Security,传输层安全协议,是基于SSL的通用化协议,同样位于应用层和传输层之间,正逐步接替SSL成为下一代网络安全协议。
SSL/TLS分为两层:
1.Record Protocol,记录协议;
记录协议建立在可靠的传输协议(TCP)之上,提供数据封装,加密解密,数据压缩,数据校验等基本功能。
2,Handshake Protocol,握手协议。
建立在握手协议之上,在实际的数据传输开始前,进行加密算法的协商,通信密钥的交换,通信双方身份的认证。

(1)客户端发送一个client hello消息,消息包含协议的版本信息、sessionid、客户端支持的加密算法、压缩算法等信息,并且还包含客户端产生的随机数。
(2)服务端响应一个server hello消息,消息包含服务端产生的随机数、协议版本信息、sessionid、压缩算法信息,还有服务端数字证书,如果服务端配置是双向验证,则服务端将请求客户端证书。
(3)客户端通过证书来验证服务端证书的有效性。
(4)如果证书验证通过,客户端将向服务端发送经过服务端公钥加密的预主密钥,即PreMaster Secret。假如服务端在上一个步骤请求了客户端证书,客户端会将客户端证书发送给服务端进行校验。
(5)服务端验证客户端证书的有效性,并用自己的私钥对PMS进行解密,使用client hello和server hello两个步骤所生成的随机数,加上解密的PMS来生成主密钥,即Master Secret,然后通过MS生成加密密钥。
(6)客户端也将使用client hello和server hello两个步骤所生成的随机数,加上解密的PMS来生成MS,,然后通过MS生成加密密钥。
(7)通知服务端未来信息将使用加密密钥来加密。
(8)给服务端发送加密密钥来加密信息,终止握手。
(9)通知客户端未来信息将使用加密密钥来加密。
(10)给客户端发送加密密钥来加密信息,终止握手。
完成握手后,客户端与服务端便可以开始加密数据通信:

HTTPS协议详解

HTTPS协议

安全超文本传输协议

HTTPS协议概述


  • 1、HTTPS协议 = HTTP协议 + SSL/TLS协议,在HTTPS数据传输的过程中,需要用SSL/TLS对数据进行加密和解密,需要用HTTP对加密后的数据进行传输,由此可以看出HTTPS是由HTTP和SSL/TLS一起合作完成的。

  • 2、SSL协议:网络安全协议(安全套接层)

    • 1、SSL协议是在传输通信协议上实现的一种安全协议,采用公开秘钥技术,广泛支持各种类型的网络,同时提供三种基本的安全服务:

      • 1)认证用户和服务器,确保数据发送到正确的客户机和服务器;
      • 2)加密数据以防止数据中途被窃取;
      • 3)维护数据的完整性,确保数据在传输过程中不被改变。
    • 2、SSL协议的优势在于他是与应用层协议独立无关的,高层的应用层协议能透明的建立于SSL协议之上,SSL协议在应用层协议通信之前就已经完成加密算法,通信秘钥的协商以及服务器认证工作,在此之后应用层协议所传送的数据都会被加密,从而保证通信的私密性以及完整性

HTTPS协议通信过程

  • 一、客户端给服务端发送第一个http协议请求,进行三步操作:
    • 1、客户端向服务端发送请求获取身份认证(非对称加密公钥);
    • 2、客户端向服务端发送一个比如a = 1的常量;
    • 3、客户端向服务端发送客户端支持的加密算法的列表,服务端中意那个算法,确定后返回给客户端。

  • 二、服务端接收到客户端的请求后,进行三步操作:
    • 1、服务端采取一种非对称的加密算法,如:RSA算法生成公钥跟私钥对;
    • 2、对公钥通过CA认证机构颁发的证书进行签名,相当于数字签名;
    • 3、给客户端返回四类数据:
      • 1、将这个经过签名的公钥返回给客户端;
      • 2、再给客户端返回一个如b = 3 的常量;
      • 3、以及返回一个如:func = a + b + ‘随机字符串‘ 的计算公式;
      • 4、从客户端发送过来的包含加密算法的列表中确定一个加密算法如:MD5算法 返回给客户端。

  • 三、客户端接收到服务端返回的四类数据后,进行六步操作:
    • 1、利用获取到的服务端返回的经过证书签名后的公钥,去ca认证机构校验本次访问的服务端的真伪,如果没问题,则服务端就是真的;
    • 2、客户端生成一个随机字符串 如:kfdn,结合服务端返回的 func = a + b + ‘kfdn’ 这个计算公式生成一个 协议秘钥 比如:sss;
    • 3、对 刚生成的 协议秘钥 通过 服务端发送过来的公钥 加密成密文如:xxx;
    • 4、对 请求数据 ddd 通过刚生成的协议秘钥进行 对称加密 成密文如:kkk;
    • 5、对 (xxx + kkk)通过服务端返回的挑选中的加密算法md5,进行加密成密文即:MD5(xxx + kkk) = ooo;
    • 6、给服务端发送第二个http协议请求,请求数据中包括三类数据:
      • 1、发送 xxx ;
      • 2、发送 kkk ;
      • 3、发送 ooo。

  • 四、服务端接收到客户端发送过来的两类数据后,进行两步操作:

    • 1、通过MD5算法对 (xxx + kkk) 加密 看是否等于 ooo,等于则可证明数据未被篡改;

    • 2、通过RSA算法生成的 公私钥对 中的 私钥 对 客户端发送过来 的 经过公钥加密后 的 协议秘钥 解密

      • 即对接收到的数据中的 xxx 解密 成 sss;
      • 注意:
        • 或者可以让客户端将 kfdn 这个随机字符串发送过来,服务端 借助 func = a + b + kfdn 这个计算公式也可以得到协议秘钥 sss(推荐)
    • 3、通过得到的协议秘钥 sss 对 密文数据 kkk 进行解密 为 ddd 。


图解

技术图片


思考:

客户端在确认服务端的身份之后,完全可以利用服务端发送过来的公钥对请求数据进行非对称加密后再发送给服务端,服务端照样可以借助生成公钥时生成的私钥对数据进行解密,为什么客户端还要自己生成一个用于对称加密的协议秘钥呢?

解释:

借助对称加密可以提高效率,即客户端对称加密后的数据发送给服务端,服务端可以很快解密出来,提高数据传输效率,节省了网络占用空间。

以上是关于Https协议的主要内容,如果未能解决你的问题,请参考以下文章

HTTPS协议详解

Https协议

Https协议详解

HTTPS协议

浅谈HTTPS以及Fiddler抓取HTTPS协议

https网络编程——HTTPS简介以及SSL协议详解