也来聊聊 HTTPS.
前言: 网上聊 HTTPS 的文章已经数都数不过来了吧,厚着脸皮,整理下读书笔记,结合平常项目的实践,也来聊聊 HTTPS。
一、为什么需要 HTTPS?
众所周知,HTTP 协议具有无连接、不可靠、尽最大努力的特点,这也为 HTPP 协议带来信息窃听或身份伪装等安全问题。主要体现在几个方面:
- 通信使用明文(不加密),内容可能会被窃听。
- 不验证通信方的身份,因此有可能遭遇伪装。
- 无法证明报文的完整性,所以有可能已遭篡改。
那要如何做到防止窃听保护信息呢?最为普及的就是加密技术。
- 通信的加密:用 SSL(Secure Socket Layer,安全套接层)或 TLS(Transport Layer Security,安全层传输协议)建立安全通信线路之后,就可以在这条线路上进行 HTTP 通信了。与 SSL/TLS 组合使用的 HTTP 就是 HTTPS,通常 HTTP 直接和 TCP 通信,当使用 SSL 时,则演变成先与 SSL 通信,再由 SSL 和 TCP 通信了,所以 HTTPS 并不是一种新的协议。
- 内容的加密: 对 HTTP 协议传输的内容本身加密,即把 HTTP 报文里所含的内容进行加密处理。
SSL 协议最初是由浏览器开发商网景通信公司率先倡导的,开发过 SSL3.0 之前的版本。IETF 以 SSL3.0 为基准,后又制定了 TLS1.0、TLS1.1 和 TLS1.2。TSL 是以 SSL为原型开发的协议,有时会统一称该协议为 SSL。当前主流的版本是 SSL3.0 和 TLS1.0。
SSL 不仅提供加密处理,而且还使用了一种被称为证书的手段,可用于确定通信方。
二、HTTPS 怎么来保障通信安全的?
HTTPS 具有加密、认证以及完整性保护的功能。
1. 加密
客户端和服务端想要进行安全的通信,首先想到的就是对通信双方的内容进行加密处理。客户端利用“密钥”加密内容,服务端利用“密钥”解密内容,反之亦然。这种方式称为对称(共享密钥)加密。
对称加密客户端和服务端的“密钥”是一致的,因此,客户端和服务端之间的“密钥”传输不可避免,如果“密钥”在传输途中被盗用,那么加密处理就没有意义了。
那么如何保护“密钥”的传输安全呢?实践的思路是非对称(公开密钥)加密,服务端拥有 公钥(public key)+ 私钥(private key)的密钥对,公钥任何人都可以获取,私钥只保存在服务端。以下是 SSL 建立安全通信线路的过程。
- 服务端将公钥传输给客户端。
- 客户端通过公钥加密“密钥”(客户端生成)得到一个加密串并传输给服务端。
- 服务端根据私钥解密加密串得到“密钥”。
- 双方通过“密钥”加密传输。
非对称加密“密钥”的方式很好的保障了“密钥”的安全传输,因为即使传输过程中加密串被盗用了,由于盗用者没有私钥信息,也无法得到加密串中的“密钥”信息。
HTTPS 采用对称(共享密钥)加密和非对称(公开密钥)加密两者并用的混合加密机制。之所以要这么复杂,是因为非对称加密的处理速度相较于对称加密要慢,因此,我们一般在交换“密钥”环节使用非对称加密,之后的建立通信交换报文阶段则使用对称加密方式。
2. 认证
遗憾的是,非对称加密传输“密钥”的方式仍然有缺陷,那就是无法证明服务器公钥本身就是货真价实的公钥。比如,接收到某台服务器的公钥,如何证明公钥就是原本预想的那台服务器发行的公钥呢?或许在公钥传输途中,真正的公钥已经被攻击者替换掉了。

计算机科学领域的任何问题都可以通过增加一个间接的中间层来解决。
这里我们引入的中间层就是数字证书认证机构(CA,Certificate Authority),数字证书认证机构处于客户端与服务器双方都可信赖的第三方机构的立场上,以下是数字证书认证机构的业务流程。
- 服务器的运营人员向数字证书认证机构提出公开密钥的申请。
- 数字证书认证机构在判明提出申请者的身份之后,会对已申请的公开密钥做数字签名,然后分配这个已签名的公开密钥,并将该公开密钥放入公钥证书。
- 服务器将公钥证书下发给客户端。
- 客户端使用公钥证书的公开密钥,对那张证书上的数字签名进行验证,一旦验证通过,客户端便可明确两件事:一,认证服务器的公开密钥的是真实有效的数字证书认证机构颁发的。二,服务器的公开密钥是值得信赖的。
HTTPS 中还可以使用客户端证书,以客户端证书进行客户端认证,证明服务器正在通信的对方始终是预料之内的客户端,其作用跟服务器证书如出一辙。
使用 OpenSSL 这套开源程序,每个人都可以构建一套属于自己的认证机构,从而自己给自己颁发服务器证书,但该服务器证书在互联网上不可作为证书使用,因为个人并不是可信任的三方机构。
3. 完整性保护
基于 SSL 进行 HTTP 通信时,应用层发送数据会附加一种叫做 MAC(Message Authentication Code)的报文摘要,MAC 能够查知报文是否遭到篡改,从而保护报文的完整性。
三、HTTPS 的通信过程

CBC 模式(Cipher Block Chaining)又名密码分组链接模式。在此模式下,将前一个明文块加密处理后和下一个明文块做 XOR 运算,使之重叠,然后再对运算结果做加密处理。 对第一个明文块做加密时,要么使用前一段密文的最后一块,要么利用外部生成的初始向量(initial vector, IV)。
四、HTTPS 的缺点?
处理速度上,由于 HTTPS 还需要做服务器、客户端双方加密及解密过程,因此会消耗 CPU 和内存等硬件资源。
通信上,和单纯 HTTP 通信相比,SSL 通信会消耗部分网络资源。
综上所述,相较于 HTTP 通信来说,HTTPS 通信速度会变慢。针对速度变慢这一问题,并没有根本性的解决方案,我们会使用 SSL 加速器这种(专用服务器)硬件来改善该问题。 该硬件为 SS通信专用硬件,相对软件来讲,能够提高数倍 SSL 的计算速度。
另外,SSL 证书的费用开销也是使用 HTTPS 的考虑因素之一(阿里云/腾讯云有免费的 SSL 证书可以申请使用)。
也来聊聊 HTTPS.的更多相关文章
- 聊聊 HTTPS
聊聊 HTTPS 本文写于 2021 年 6 月 30 日 最近工作也是越来越忙了,不像上学的时候,一天下来闲着没事可以写两篇博客. 今天来聊一下 HTTPS. HTTP HTTP 是不安全的协议. ...
- 聊聊HTTPS和SSL/TLS协议
要说清楚 HTTPS 协议的实现原理,至少需要如下几个背景知识.1. 大致了解几个基本术语(HTTPS.SSL.TLS)的含义2. 大致了解 HTTP 和 TCP 的关系(尤其是“短连接”VS“长连接 ...
- 聊聊HTTPS和SSL_TLS协议
要说清楚 HTTPS 协议的实现原理,至少需要如下几个背景知识. 1. 大致了解几个基本术语(HTTPS.SSL.TLS)的含义 2. 大致了解 HTTP 和 TCP 的关系(尤其是“短连接”VS“长 ...
- 聊聊HTTPS和SSL/TLS协议 分类: 计算机网络 2015-07-11 21:41 4人阅读 评论(0) 收藏
要说清楚 HTTPS 协议的实现原理,至少需要如下几个背景知识. 1. 大致了解几个基本术语(HTTPS.SSL.TLS)的含义 2. 大致了解 HTTP 和 TCP 的关系(尤其是"短连接 ...
- 【转】聊聊HTTPS和SSL/TLS协议
要说清楚 HTTPS 协议的实现原理,至少需要如下几个背景知识.1. 大致了解几个基本术语(HTTPS.SSL.TLS)的含义2. 大致了解 HTTP 和 TCP 的关系(尤其是“短连接”VS“长连接 ...
- 从让 HTTPS 更安全出发,聊聊 HTTPS
随着公众对网络安全的日益关注,各种网络安全防护手段层出不穷.HTTPS Everywhere作为提升HTTPS安全性的有效手段,日前安全性与实用性再次得到了加强. HTTPS虽然可以有效提升用户浏览网 ...
- 聊聊HTTPS和SSL/TLS协议 【基础入门】
要说清楚 HTTPS 协议的实现原理,至少需要如下几个背景知识.1. 大致了解几个基本术语(HTTPS.SSL.TLS)的含义2. 大致了解 HTTP 和 TCP 的关系(尤其是“短连接”VS“长连接 ...
- 聊聊HTTPS和SSL协议
本文为转载,原文链接http://www.techug.com/https-ssl-tls,作者不详. 要说清楚 HTTPS 协议的实现原理,至少需要如下几个背景知识. 1. 大致了解几个基本术语(H ...
- 浅谈HTTPS安全性
各位可曾有过使用智能手机App在网络商店购物的经验,想必是有的,那你/妳会不会担心不够安全呢?有人会说放心吧,购物网站有使用SSL/TLS加密传输,我们就来聊聊HTTPS好了. 客户端与服务器端的交握 ...
随机推荐
- Life In Changsha College- SQA计划与验收测试规程
本次任务 以前面小组完成的SCRUM设计任务作为背景,拟制软件开发任务的虚拟SQA计划. 编制前面小组完成的SCRUM设计任务的验收测试规程. SQA计划 验收测试规程 测试分析:工程完成的功能包括登 ...
- [Python进阶]002.装饰器(1)
装饰器(1) 介绍 HelloWorld 需求 使用函数式编程 加入装饰器 解析 介绍 Python的装饰器叫Decorator,就是对一个模块做装饰. 作用: 为已存在的对象添加额外功能. 与Jav ...
- Java并没有衰落.大家对它的认识才刚刚开始 Java8全新出发
Java并没有衰落.大家对它的认识才刚刚开始 很高兴能在此给大家分享Java8的新特性.这篇文章将一步一步带你了解Java8的所有新特性.我将通过简单的实例代码向大家展示接口中默认方法,lambda ...
- pandas手册
https://www.dataquest.io/blog/large_files/pandas-cheat-sheet.pdf
- 安装和换源pip
pip 是 Python 包管理工具,该工具提供了对Python 包的查找.下载.安装.卸载的功能 一.ubuntu安装和配置pip 1.进入终端,输入命令sudo su root ,输入密码后进入r ...
- C语言 俄罗斯方块demo
这是我的第一篇随笔,当然是发我写的第一个游戏啦! 大一(本人现在大二)寒假过完年,在家待着想起放假前计划写一个游戏的,因为本人立志走游戏开发这条路,加上大一上册学了C语言,就想写个游戏练练手.想了很久 ...
- no-strings-attached
0x01 拿到程序,直接IDA放进去看一下,结果如图: 我们发现main中有四个函数,我们一个一个进去,经过分析之后,发现authenticate();是关键函数,所以,接下来我们进去看看. void ...
- 前端HTML 定位position 绝对定位 相对定位
>>>position:absolute;绝对定位 当前元素相对于父级元素位置[该父级元素必须也设定了position,不然会继续往上找祖先元素,直到body为止]的定位 >& ...
- Java 第十一届 蓝桥杯 省模拟赛 小明的城堡
小明用积木搭了一个城堡. 为了方便,小明在搭的时候用的是一样大小的正方体积本,搭在了一个 n 行 m 列的方格图上,每个积木正好占据方格图的一个小方格. 当然,小明的城堡并不是平面的,而是立体的.小明 ...
- Java实现蓝桥杯算法提高 陶陶摘苹果
试题 算法提高 陶陶摘苹果 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 陶陶家的院子里有一棵苹果树,每到秋天树上就会结出n个苹果.苹果成熟的时候,陶陶就会跑去摘苹果.陶陶有个30 ...