也来聊聊 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好了. 客户端与服务器端的交握 ...
随机推荐
- 才华能力出众的ReentrantLock
主要内容 1. synchronized介绍 2. ReentrantLock介绍 3. ReentrantLock和synchronized的可伸缩性比较 4. Condition变量 5. Ree ...
- 读Pyqt4教程,带你入门Pyqt4 _012
颜色 颜色是指一个代表红(Red).绿(Green).蓝(Blue)(RGB)强度值组合的对象,有效的RGB值在0~255之间.我们可以用多种方式定义颜色,最常用的是RGB十进制或者十六进制值.也可以 ...
- pandas如何逐行需改DataFrame
逐行修改DataFrame而不会报SettingwithCopyWarning警告的方法: df.iloc[行数,df.columns.get_loc(列名)]=new_value 参考:https: ...
- 逃离CSDN
2012年2月18日,从CSDN搬家到这里.对于搬家的理由,总觉得该说点什么.我是在2012年1月29日又开始写博客的,在此之前我的CSDN博客闲置了10个月.从1月29日开始,不到1个月的时间建立了 ...
- 【Java8新特性】关于并行流与串行流,你必须掌握这些!!
写在前面 提到Java8,我们不得不说的就是Lambda表达式和Stream API.而在Java8中,对于并行流和串行流同样做了大量的优化.对于并行流和串行流的知识,也是在面试过程中,经常被问到的知 ...
- Chisel3-Intellij IDEA中使用sbt构建Chisel项目
https://mp.weixin.qq.com/s/gssjiiPW6zUzKwCFZdNduw 1. 使用Intellij IDEA创建Scala项目 Chisel项目,就是构建Scala ...
- 使用turtle库绘制图形
1.使用turtle库绘制红色五角星图形 import turtle n = eval(input("请输入五角星的长度")) turtle.begin_fill() #开始填充颜 ...
- Java实现 LeetCode 526 优美的排列(DFS)
526. 优美的排列 假设有从 1 到 N 的 N 个整数,如果从这 N 个数字中成功构造出一个数组,使得数组的第 i 位 (1 <= i <= N) 满足如下两个条件中的一个,我们就称这 ...
- Java实现 LeetCode 414 第三大的数
414. 第三大的数 给定一个非空数组,返回此数组中第三大的数.如果不存在,则返回数组中最大的数.要求算法时间复杂度必须是O(n). 示例 1: 输入: [3, 2, 1] 输出: 1 解释: 第三大 ...
- Java实现奇偶数排序
1 问题描述 给定一个整数数组,请调整 数组中数的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分.要求时间复杂度为O(n). 2 解决方案 2.1 一头一尾指针往中间扫描法 pack ...