前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一文理解https运行机制

一文理解https运行机制

原创
作者头像
zenlu
发布2024-02-20 17:47:43
2240
发布2024-02-20 17:47:43
举报
文章被收录于专栏:学习笔记学习笔记

一 什么是https

https的英文全程为:Hypertext Transfer Protocol Secure,相比http多了一个secure,顾名思义,就是在http的基础上新增了安全相关内容。具体来说,主要是如下两点:

  1. 客户端(浏览器)对服务端(网站)的身份进行认证。
  2. 客户端(浏览器)与服务端(网站)之间做加密通信。

在2016年之前,证书的颁发都是一项昂贵的操作,只有支付交易等对安全要求很高的领域才会广泛使用https,后面EFF(Electronic Frontier Foundation)组织开展了一项推广https的活动,才使得这个协议变得普遍。

现在https服务已经非常普及,互联网上每一个服务都需要使用https协议已经得到共识,如果你访问的网站提供的是http服务,chrome浏览器甚至会对你发出警告,通知该网站不安全。而当该网站是https时,在url输入框的最左端,你可以看到一把小锁:

https使用的整体流程为:

  1. 客户端使用安全 HTTPS发起连接
  2. 服务端向客户端发送其证书
  3. 客户端验证证书合法性
  4. 客户端和服务端双方协商加密算法与加密密钥
  5. 双方加密会话

可以看到上面描述的https功能是通过下面的机制实现:

  1. 身份识别:使用证书证明身份
  2. 加密通信:使用SSL协议进行数据的加密传输(后升级为TLS协议)。 下面就对两者进行说明:

二 https证书解析

1 证书的信任链机制

https使用证书作为身份识别的凭证,那么浏览器在发起访问的时候如何判断服务器证书是有效的呢?这里面又有哪些认证机制呢?

简单来说,https证书是使用信任链这种机制来证明其证书的有效性,这种信任链的信任源头是根证书,根证书向中间CA颁发证书,中间CA向网站服务商颁发服务器证书,证书中含有可以验证证书的公钥,私钥则被隐藏起来,整个流程如下所示:

如果想了解证书的颁发流程,可以查看附录:

当浏览器认证服务端的证书时,它会先验证网站证书的有效性,并且递归的向上验证,直到验证到CA证书,这样就证明了用户访问的网站是可信的。这个验证机制如下图所示:

注:每个操作系统、第 3 方 Web 浏览器和自定义应用程序都附带 100 多个预安装的受信任根 CA 证书(私钥不会存储在这里,验证证书有效性只需要公钥)。

2 证书的层次结构

一般来说,网站的信任链就只有三层,根证书->中间证书->服务器证书。

  1. 根证书是信任根,如果根证书私钥被泄露的话,整条链的所有证书都将作废,所以根证书很少直接颁发服务器证书,都是先给一个中间商颁发证书,然后再通过中间商的私钥为服务器颁发证书,这样即使中间CA的私钥泄露了,也不会影响到根证书。
  2. 为了保证根证书的安全,中间证书以一个代理人的角色出现,颁发各种服务器证书。
  3. 服务器证书就是我们搭建网站需要申请的。

以qq的域名为例,我们可以到其证书结构:

从上到下即为CA证书,中间证书,服务器证书。

3 服务器证书类型

  • EV证书(扩展验证证书):最昂贵的证书,最高的验证标准。
  • OV证书(组织验证证书):验证组织的身份以及组织的运营位置。
  • DV证书(域验证证书):最低级别的验证,一般可以免费获得。
  • UCC证书(多域验证证书):认证多个域名。
  • 单域验证证书

一般比较正规的网站都会使用OV及以上验证证书。

4 一个证书实例

当前,基本所有的证书都遵循X.509证书格式,里面需要包含:

  • 证书基本信息:
    1. 版本号
    2. 序列号
    3. 签名算法
    4. 颁发者
    5. 证书有效期:此日期前无效,此日期后无效
    6. 主题
    7. 主题公钥信息:公钥算法,主题公钥
    8. 颁发者唯一身份信息(可选项)
    9. 主题唯一身份信息(可选项)
    10. 扩展信息(可选项)
  • 证书签名算法
  • 数字签名

我们用chrome打开qq.com,点击上面的小锁,导出may29-2022-1.ias.qq.com证书,用证书查看工具展开详细信息(直接在chrome上面查看也可以):

主题信息

项目

内容

通用名称(CN)

may29-2022-1.ias.qq.com

组织(O)

Shenzhen Tencent Computer Systems Company Limited

城市(L)

Shenzhen

省份(ST)

Guangdong Province

国家(C)

CN

签发者信息

项目

内容

通用名称(CN)

DigiCert Secure Site CN CA G3

组织(O)

DigiCert Inc

国家(C)

US

证书信息

项目

内容

序列号

90A470E1617F09E93A7D3074D9F475A

根证书

算法

SHA256WithRSA

证书类型

OV

证书品牌

Other

私钥长度

2048 Bits

SHA1指纹

C9CAA155BB2948090DA37FBCDA7E633DC4BC1962

SHA256指纹

0D9D6218DAD87E60E5FA43E3FD8238A2098F8900548E019A9B6BFF36FD7D186B

公钥PIN-SHA256

U7qetdYWDHOtTmIFWtCqIEBnZF+cDcfNrj4kjFB7O14=

颁发日期

2022-05-28 08:00:00

截止日期

2023-05-31 07:59:59

有效期

189天

extKeyUsage

Server authentication,Client authentication

sans

may29-2022-1.ias.qq.com qq.com www.qq.com

ocsp_url

crlUrl

caUrl

公钥

30820122300D06092A864886F70D01010105000382010F003082010A0282010100E89788BD171C462220FE181133634EEF9C260FD87DA30B0A629E7C35A26FF99B6EFACBD2A9963BBE006FFCB42318D18358DA58161A8793EBA2D278200617733457A3D25FDABD19A9B15120C359DA0A6803D0DC3963079A879E9822BBEEE4AE43AB952880BFE72E35A51065A38D17A3227EE4DD9F0C68FC97216624C25672DBD50DBDE388FB8C9BCD1C129B82AF15C2EED49C015598C21D429BD30C274BC7F3365C720D0E6C21F5907E4ABF10C51012B851707C72C6639DE4EB41836E254F056D0A3B402B953F10D1B7B2528C49C8845C03DDEB2EC2A10231E2FC33B0EC7A975E273352A39EB70BEDE8A860DF23DB2B61873F6DEC2A7FEDD42AFDD9E3A50DF2B30203010001

证书链

项目

内容

颁发给

may29-2022-1.ias.qq.com

颁发者

DigiCert Secure Site CN CA G3

加密算法

RSA 2048 bits

签名算法

SHA256WithRSA

SHA-1

C9CAA155BB2948090DA37FBCDA7E633DC4BC1962

PIN值

U7qetdYWDHOtTmIFWtCqIEBnZF+cDcfNrj4kjFB7O14=

有效期

2022-05-28T00:00:00Z~2023-05-30T23:59:59Z(剩余 189 天)

项目

内容

颁发给

DigiCert Secure Site CN CA G3

颁发者

DigiCert Global Root CA

加密算法

RSA 2048 bits

签名算法

SHA256WithRSA

SHA-1

4479F69C9BE9C394B9F17211AA6D6DA8143DB69C

PIN值

TbrK7tI1CsyZLKNdMvoHsV863GbcuERLt4LWrjChCv0=

有效期

2020-03-13T12:00:00Z~2030-03-13T12:00:00Z(剩余 2667 天)

项目

内容

颁发给

DigiCert Global Root CA

颁发者

Baltimore CyberTrust Root

加密算法

RSA 2048 bits

签名算法

SHA256WithRSA

SHA-1

FB20FA8A6A93B375F054814F9E00273EA51A6138

PIN值

r/mIkG3eEpVdm+u/ko/cwxzOMo1bk4TyHIlByibiA5E=

有效期

2016-12-07T12:17:34Z~2025-05-10T12:00:00Z(剩余 899 天)

5 关于证书的一些思考

我可以自己颁发一个根证书并用它来签署其他证书吗?

  • 可以的,但是由于你的证书并没有被加载到其他设备或者浏览器中,使用自颁发证书部署的服务并不可信。 连公共wifi会暴露我的https流量吗?
  • 不会,https服务所有的流量都是加密的,只有在你的设备上才能解开。 公司可以监控https流量吗?
  • 如果使用了公司的设备,是可以的,https的基础是根证书,公司可以将自签名的证书放到你的机器CA列表中。

三 ssl/tls加密协议

ssl/tls协议是一套安全协议,也是https加密的基础。

1 ssl/tls 历史

ssl协议在1994年出现,版本号为1.0,但是由于出生时就有安全漏洞,从未发布过。SSl的第一个版本2.0于1995年发布,一年以后SSL3.0版本问世,与此同时,作为ssl协议的加强版,tls的研发也正在路上,1999年tls v1.0问世,至于为什么叫tls1.0而不是叫ssl3.1。

这里面是有一点八卦的,可以参考:https://tim.dierks.org/2014/05/security-standards-and-name-changes-in.html?m=1,课代表总结一下就是上世纪 Netscape/Microsoft一直在争夺浏览器份额,而ssl协议是Netscape公司提出的,Microsoft为了削弱Netscape的影响力,就不想继续沿用ssl这个名字。

ssl3.0被广泛使用到2014年,2014年秋季谷歌团队发现了一个重大的安全漏洞:使用POODLE攻击可以获得明文(https://www.cisa.gov/uscert/ncas/alerts/TA14-290A);此外,tls1.0和tls1.1由于依赖MD5和SHA-1,后来也被建议弃用,如今只有chrome浏览器上只有约0.5%的https连接是建立在tls1.0和1.1上的。

2 ssl/tls连接建立流程

与大家都了解的tcp三次握手类似,ssl/tls连接建立的过程也是一个握手的过程,握手的时机为建立tcp连接后:

之后就是双方协商密钥的过程,协商密钥的算法一般采用ECDH密钥交换算法,相关的一些细节可以查看我之前的文章:密码学小白必知必会,客户端与服务端协的连接建立过程包含验证双方证书和交换密钥两部分,如图所示:

等待协商完成密钥之后,双方使用这个协商好的密钥进行通信,使用wireshark抓包可以看到整个过程:

3 思考

可能有细心的,或者有一些密码学基础的小伙伴会问,为什么客户端不能直接用服务端的公钥对数据进行加密,服务端使用客户端的公钥进行加密?

  • 这样貌似也行的通,但是需要注意,现在一般使用的对称加密算法AES是非对称加密RSA性能的两百倍左右,如果全部使用非对称加密,性能损失会非常严重。

附录

1 根证书颁发流程

  1. 根证书机构生成公私钥,私钥:pri_key, 公钥pub_key
  2. 生成包含机构,有效期,主题,扩展信息等的表单:ca_info
  3. 使用pri_key对ca_info+pub_key做SHA256WithRSA(先做SHA256签名,然后做rsa加密)生成根证书

其他证书颁发流程相似。

总结

本文讲述了https的总体流程,包括证书验证和密钥交换部分;也补充了一些https证书的内部信息与细节,如果有疑问,欢迎留言。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一 什么是https
  • 二 https证书解析
    • 1 证书的信任链机制
      • 2 证书的层次结构
        • 3 服务器证书类型
          • 4 一个证书实例
            • 5 关于证书的一些思考
            • 三 ssl/tls加密协议
              • 1 ssl/tls 历史
                • 2 ssl/tls连接建立流程
                  • 3 思考
                  • 附录
                    • 1 根证书颁发流程
                    • 总结
                    相关产品与服务
                    SSL 证书
                    腾讯云 SSL 证书(SSL Certificates)为您提供 SSL 证书的申请、管理、部署等服务,为您提供一站式 HTTPS 解决方案。
                    领券
                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档