HTTPS协议及其工作原理

一、什么是HTTPS

HTTP 协议(HyperText Transfer Protocol,超文本传输协议)是客户端浏览器或其他程序与Web服务器之间的应用层通信协议 。HTTP协议传输的数据都是未加密的,也就是明文的,因此使用HTTP协议传输隐私信息非常不安全。为了保证这些隐私数据能加密传输,于是Netscape 公司设计了SSL(Secure Sockets Layer)协议用于对HTTP协议传输的数据进行加密,从而就诞生了HTTPS。HTTPS 协议(HyperText Transfer Protocol over Secure Socket Layer)可以理解为 HTTP+SSL/TLS, 即 HTTP 下加入 SSL 层,HTTPS 的安全基础是 SSL,因此加密的详细内容就需要 SSL,用于安全的 HTTP 数据传输。如下图所示 HTTPS 相比 HTTP 多了一层 SSL/TLS:

.

SSL(Secure Socket Layer,安全套接字层):1994年为 Netscape 所研发,SSL 协议位于 TCP/IP 协议与各种应用层协议之间,为数据通讯提供安全支持。SSL目前的版本是3.0,被IETF(Internet Engineering Task Force)定义在RFC 6101中,之后IETF对SSL 3.0进行了升级,于是出现了TLS(Transport Layer Security) 1.0,定义在RFC 2246。

TLS(Transport Layer Security,传输层安全):其前身是 SSL,它最初的几个版本(SSL 1.0、SSL 2.0、SSL 3.0)由网景公司开发,1999年从 3.1 开始被 IETF 标准化并改名,发展至今已经有 TLS 1.0、TLS 1.1、TLS 1.2 三个版本。SSL3.0和TLS1.0由于存在安全漏洞,已经很少被使用到。TLS 1.3 改动会比较大,目前还在草案阶段,目前使用最广泛的是TLS 1.1、TLS 1.2。

实际上我们现在的HTTPS都是用的TLS协议,但是由于SSL出现的时间比较早,并且依旧被现在浏览器所支持,因此SSL依然是HTTPS的代名词,但无论是TLS还是SSL都是上个世纪的事情,SSL最后一个版本是3.0,今后TLS将会继承SSL优良血统继续为我们进行加密服务。

SSL/TLS 协议位于 TCP/IP 和HTTP协议之间,其作用如下:
1> 认证用户和服务器,确保数据发送到正确的客户机和服务器 -> 验证证书
2> 加密数据以防止数据中途被窃取 -> 加密
3> 维护数据的完整性,确保数据在传输过程中不被改变 -> 摘要算法

二、 HTTPS工作原理

HTTPS在传输数据之前需要客户端(浏览器)与服务端(网站)之间进行一次握手,在握手过程中将确立双方加密传输数据的密码信息。TLS/SSL协议中使用了非对称加密,对称加密以及信息摘要算法。TLS协议握手过程的简单描述如下:

1> 客户端发出一个 client hello 消息,携带的信息包括:支持的 SSL/TLS 的版本列表、支持的加密算法(一般是对称加密)、信息摘要算法、随机数random_C等信息。

2> 服务端响应一个 server hello 消息,携带的信息包括:协商采用的 SSL/TLS 版本号、加密算法与信息摘要算法、随机数random_S、数字证书serverCA。若有双向认证需求,服务端需对客户端进行认证,会同时发送 client certificate request 表示请求客户端的CA证书。

注:CA证书主要包含了域名信息,加密公钥,以及证书的颁发机构、签名等信息,用于身份验证与密钥交换。

3> 客户端响应:

a)校验服务端CA证书:如果验证通过才会进行后续通信,证书合法性验证包括:

  • 校验证书(链)是否可信 trusted certificate path:浏览器从已内置的受信任的证书发布机构CA中与服务器发来的证书中的颁发者CA比对,如果找不到,浏览器就会报错,说明服务器发来的证书是不可信任的;如果找到,那么浏览器就会取出颁发者CA的公钥,然后对证书里面的签名进行解密,得到摘要D'。如果不能解密,说明该签名是伪造的,因为生成签名的私钥只有CA机构知道。浏览器使用证书中提供的信息摘要算法对证书进行计算得到摘要D,将摘要D与摘要D' 进行对比;如果对比结果一致,则证明服务器发来的证书合法,没有被冒充;否则,说明证书中的公钥是被篡改过的,不受信;
  • 校验证书是否吊销 revocation,有两类方式离线 CRL 与在线 OCSP,不同的客户端行为会不同;
  • 校验证书有效期 expiry date,证书是否在有效时间范围;
  • 校验证书域名 domain,核查证书域名是否与当前的访问域名匹配,匹配规则后续分析;

b)如果证书受信任或用户接受了不受信的证书,则客户端计算产生随机数 pre-master,并用证书的公钥加密,发送给服务器;由于服务端发起了 client certificate request,客户端使用证书私钥加密并生成 certificate_verify_message 与客户端的证书 clientCA 一并发出。

c)通过之前协商好的两个明文随机数 random_C 和 random_S 与自己计算产生的 pre-master 随机数,计算得到协商密钥:enc_key=Fuc(random_C, random_S, Pre-Master),这个协商密钥就是过程1、2协商好的加密算法的密钥;

d)使用协商的信息摘要算法计算出之前所有通信参数的 hash 值结合其它相关信息生成一段数据签名,采用协商算法和密钥 enc_key 进行加密,然后发送给服务器用于握手验证;

e)通知服务端后续的通信都采用之前协商的通信密钥和加密算法进行加密通信;

4> 服务端回应:

a)服务端校验客户端的证书,并成功使用证书公钥解密 certificate_verify_message;

b)使用证书私钥解密 pre-master 随机数,基于之前交换的两个明文随机数 random_C 和 random_S,计算得到协商密钥:enc_key=Fuc(random_C, random_S, Pre-Master);

c)使用协商密钥 enc_key 解密客户端发送的握手信息,并计算出之前所有接收信息的 hash 值,验证数据签名和密钥正确性;

d)如果验证通过,服务器同样告知客户端后续的通信都采用协商的密钥与算法进行加密通信;

e)服务端也结合所有当前的通信参数信息生成一段数据以及 hash 值并采用协商密钥与算法加密并发送到客户端;

5> 客户端计算所有接收信息的 hash 值,并采用协商密钥解密握手信息,验证服务器发送的数据和密钥,验证通过则握手完成,握手过程中如果有任何错误,都会使加密连接断开,从而阻止了隐私信息的泄露。

6> 开始使用协商密钥与算法进行加密通信。

HTTPS通信过程的简单时序图如下:

.

客户端与服务端互相发送加密的握手消息并验证,目的是为了保证双方都获得了一致的密码,并且可以正常的加密解密数据,为后续真正数据的传输做一次测试。另外,HTTPS一般使用的加密与信息摘要算法如下:

  • 非对称加密算法:RSA,DSA/DSS
  • 对称加密算法:AES,RC4,3DES
  • 信息摘要算法:MD5,SHA1,SHA256

其中非对称加密算法用于在握手过程中加密生成的对称加密算法的密钥,对称加密算法用于对真正传输的数据进行加密,而信息摘要算法用于验证数据的完整性。由于浏览器生成的对称密钥是整个数据加密的关键,因此在传输的时候使用了非对称加密算法对其加密。非对称加密算法会生成公钥和私钥,公钥只能用于加密数据,因此可以随意传输,而网站的私钥用于对数据进行解密,所以网站都会非常小心的保管自己的私钥,防止泄漏。

CA机构如何颁发数字证书给服务器端的?

.

  • 服务端将本端的公钥K、域名、签名哈希算法(MD5、SHA256 ..)发送到CA机构申请数字证书
  • CA机构生成证书并使用服务端制定的签名哈希算法进行计算,得到证书摘要信息D
  • CA机构使用自己的加密算法私钥对摘要D进行加密,得到签名S,最后将证书颁发给服务端

 拿到证书后,我们就可以将证书配置到自己的服务器上,客户端后续就可以https方式访问了。

 参考资料

HTTPS原理通俗了解

HTTPS加密协议详解(四):TLS/SSL握手过程

SSL双向认证和SSL单向认证的区别

  • 4
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值