理解https中的安全及其实现原理
Google的一份网络上的 HTTPS 加密透明报告(数据截至2022年1月)中指出HTTPS 连接的普及率在过去几年激增,互联网上排名前 100 位的非 Google 网站HTTPS 使用情况为:97%的站点默认启用HTTPS,100%的站点支持HTTPS。
Chrome 中的 HTTPS 浏览时间所占的百分比(按平台)
Chrome 中通过 HTTPS 加载的网页所占的百分比(按国家/地区)
如此流行的HTTPS我们应当对其有所了解,通过阅读本文你可能能更进一步了解HTTPS相关的安全实现。
HTTPS(超文本传输安全协议)使用HTTP进行通信,但利用SSL/TLS来加密数据包,所以它也有另外一种称呼HTTP over TLS/SSL,说HTTPS安全其实说的就是TLS/SSL协议。HTTP以明文的方式在网络中交换数据,攻击者可以轻易通过监听或中间人攻击等手段,获取网站帐户和敏感信息等,而HTTPS可以做到如下几个特性:
- 保密性。 客户端的连接被加密,隐藏了 URL、cookie 和其他敏感元数据。
- **真实性。 ** 确保客户端正在与“真实”的服务端通信,而非中间人。
- 准确性。 客户端与服务端之间发送的数据没有被篡改。
保密性--对称加密、非对称加密
我们说http是明文传输,所以https首要解决的问题就是它的通信加密,达到保密性。
对称加密
对称加密是最简单、最常见的加密方式。
通信双方持有相同的密钥key,加密和解密都是使用同一个密钥。当客户端要发送数据时先用key对数据进行加密生成secret data,接着传输到服务端。服务端接收数据时,通过key将数据解密为data。反之客户端接收数据也是如此。
这样即使数据被截获,由于不知道key数据也无法被解密。常见的对称加密算法有 DES、 AES 等。对称加密速度快、效率高,能够使用较小的计算量完成加密。
对称加密有一个核心问题是如何在互联网上传输密钥?它不能像现实中一样我打个车就过去你家把密钥塞给你,万一密钥被截胡了不就白搭了。所以需要非对称加密来解决这个问题。
非对称加密
非对称加密就是加密和解密使用两个不同的密钥,密钥对包含一个公钥(public key)和一个私钥(private key)。其中公钥只能用于加密,私钥只用于解密。
首先客户端请求服务端,服务端将自己的公钥返回,客户端拿到公钥后就可以用它来加密要传输的数据data ,将加密数据secret data发送到服务端后通过服务端的私钥来解密,以此完成加密传输。
有了非对称加密,只要我们将其中的data换成随机码key,这个key作为对称加密中密钥。密钥传输问题就解决了,同时很好地利用了对称加密的高效率。
如下所示:
这样HTTPS中通信的数据加密已经完成了。
一个http请求:
一个加密的https请求:
只要我们的私钥不被破解,即使通信被监听也得不到其中的敏感加密数据。
真实性、准确性--数字证书、签名
上面我们忽略了一个重要的问题,在通信中如何保证所连接的服务端真实性呢?如下图我们的通信已经被中间人截胡了,client此时通信对象为hacker。
在HTTPS中是如何防止这种中间人攻击的呢?让我们请出数字证书!
数字证书
所谓证书就是第三方(自签证书没有公证效应)颁发的认证,比如我们的学位证是由教育局颁发的一种学历认证,由教育局来认证此人获得了某个学位。同样在HTTPS中存在一种认证机构即CA(Certification Authority),由它来证明你所连接的服务端就是你想要连接的server,即保证服务端真实性。
要获取学位证你需要花钱上学、学习,而获取数字证书你只需要花钱。
- 首先站点的所有者生成一个密钥对,然后掏钱将站点的信息如域名、组织信息等以及公钥提交给CA机构审核,即证书签名请求 (CSR)。
- CA机构审核通过后,用它独有的私钥对CSR信息(其实是CSR信息的hash值,用于加速加、解密)进行加密,即形成数字签名,用于验证证书是否被篡改,经过签名后一个完整的数字证书就成了其中包含站点信息、数字签名。
如下图所示(图源:what-is-a-certificate-authority):
ok,申请到了数字证书,给安装到server中。
当client请求时server返回数字证书,先查看证书认证的域名或所有者是谁?如果与你访问的域名不一致毫无疑问你正遭受中间人攻击,这是一个假站点请停止访问。
如果一致,接着client查看证书的签发CA机构是谁?找到浏览器或操作系统中对应的内置CA公钥,找不到?对不起,这个站点不安全(这其实也是垄断和付费的根源),如果找到则使用公钥解密签名得到hash值和此时证书中CSR信息的hash值做对比,如果一致,则这个证书没有被修改,你访问的站点很安全,取出证书中公钥来做加密通信吧。
如下图所示:
HTTPS不保护的信息?
虽然 HTTPS 对整个 HTTP 请求和响应进行加密,但 DNS 解析和连接监听仍然可以获得一些其他信息,例如完整的域名或子域以及原始 IP 地址。
别有用心者还可能通过分析加密的 HTTPS 流量以获取特殊信息比如在网站上花费的时间,或用户数据包相对大小。
攻击 HTTPS 连接的有多难?
对 HTTPS 连接的攻击通常分为 3 类:
- 通过密码分析或其他协议的弱点破坏 HTTPS 连接的质量。
- 黑掉客户端,将恶意根证书安装到系统或浏览器信任库中。
- 获得浏览器信任的“流氓”证书,即通过操纵或破坏证书颁发机构。
以上是对HTTPS安全及其实现原理的学习,其中没有提到TLS/SSL版本、加密算法相关的内容,有兴趣的可以自行检索。
希望小作文对你有些许帮助,如果内容有误请指正。
您可以随意转载、修改、发布本文,无需经过本人同意。通过博客阅读:iqsing.github.io
参考:
what-is-a-certificate-authority
理解https中的安全及其实现原理的更多相关文章
- 深入理解 Laravel 中 config 配置加载原理
Laravel的配置加载其实就是加载config目录下所有文件配置.如何过使用php artisan config:cache则会把加载的配置合并到一个配置文件中,下次请求就不会再去加载config目 ...
- 深入理解Java中的HashMap的实现原理
HashMap继承自抽象类AbstractMap,抽象类AbstractMap实现了Map接口.关系图例如以下所看到的: Java中的Map<key, value>接口同意我们将一个对象作 ...
- 前端知识体系:JavaScript基础-原型和原型链-理解 es6 中class构造以及继承的底层实现原理
理解 es6 中class构造以及继承的底层实现原理 原文链接:https://blog.csdn.net/qq_34149805/article/details/86105123 1.ES6 cla ...
- 通俗的理解HTTPS以及SSL中的证书验证
一.HTTPS的安全性体现在哪 HTTP(超文本传输协议,Hyper Text Transfer Protocol)是我们浏览网站信息传输最广泛的一种协议.HTTPS(Hyper Text Trans ...
- 深入理解JS中的对象(二):new 的工作原理
目录 序言 不同返回值的构造函数 深入 new 调用函数原理 总结 参考 1.序言 在 深入理解JS中的对象(一):原型.原型链和构造函数 中,我们分析了JS中是否一切皆对象以及对象的原型.原型链和构 ...
- 深入理解JS中的对象(三):class 的工作原理
目录 序言 class 是一个特殊的函数 class 的工作原理 class 继承的原型链关系 参考 1.序言 ECMAScript 2015(ES6) 中引入的 JavaScript 类实质上是 J ...
- ajax和springmvc的请求响应原理——深入理解jQuery中$.get、$.post、$.getJSON和$.ajax的用法
1,四大重要部分: 请求链接 post请求和get请求 请求参数形式 响应内容形式 2,从springmvc的controller角度,controller能接收到请求的前提 请求链接必须对应 pos ...
- 深入理解css中position属性及z-index属性 https://www.cnblogs.com/zhuzhenwei918/p/6112034.html
深入理解css中position属性及z-index属性 请看出处:https://www.cnblogs.com/zhuzhenwei918/p/6112034.html 在网页设计中,positi ...
- 【干货理解】理解javascript中实现MVC的原理
理解javascript中的MVC MVC模式是软件工程中一种软件架构模式,一般把软件模式分为三部分,模型(Model)+视图(View)+控制器(Controller); 模型:模型用于封装与应用程 ...
随机推荐
- BAIRE ONE FUNCTIONS (Baire第一类函数)
目录 定义 导函数 一致收敛性质 的连续点 JOHNNY HU, BAIRE ONE FUNCTIONS. 一些基本的定义(诸如逐点收敛, 一致收敛\(F_{\sigma}\)集合等)就不叙述了. 定 ...
- [高数]高数部分-Part II 导数与微分
Part II 导数与微分 回到总目录 Part II 导数与微分 一元函数微分的定义 一元函数定义注意点 基本求导公式 基本求导方法 复合函数求导 隐函数求导 对数求导法 反函数求导 参数方程求导 ...
- Linux磁盘实用指令
磁盘情况查询 df/du 查询磁盘整体占用情况 df 指令:df -h 查询目录磁盘占用情况 du 基本语法 指令:du [选项] 指定目录 常用选项 指定目录不填则默认当前目录 选项 功能 -s 指 ...
- Java程序设计基础笔记 • 【第4章 条件结构】
全部章节 >>>> 本章目录 4.1 条件结构 4.1.1 程序流程控制 4.1.2 单分支if结构 4.1.3 双分支if结构 4.1.4 实践练习 4.2 多重条件结 ...
- JDBC编程工具类 Dbconnection
JDBC基础:https://blog.csdn.net/weixin_44893902/article/details/106746880 Dbconnection工具类(包含了连接,增删改查,关闭 ...
- 编写Java程序,使用 Java 的 I/O 流将 H:\eclipse.zip 文件拷贝至 E 盘下,重新命名为 eclipse 安装 .zip。
查看本章节 查看作业目录 需求说明: 使用 Java 的 I/O 流将 H:\eclipse.zip 文件拷贝至 E 盘下,重新命名为 eclipse 安装 .zip.在拷贝过程中,每隔2000 毫秒 ...
- Hive安装Version2.1.0
Hive安装,基于版本2.1.0, 使用apache-hive-2.1.0-bin.tar.gz安装包. 1.安装规划 角色规划 IP/机器名 安装软件 运行进程 hive zdh-9 hive Ru ...
- centos6.5-nginx搭建
一.安装nginx 1.安装相关组件 yum -y install pcre-devel zlib-devel 2.创建启动用户 useradd -M -s /sbin/nologin nginx t ...
- git报错 error: cannot stat 'file': Permission denied
切换分支(git checkout xxx)时报错: error: cannot stat 'file': Permission denied 解决方法:退出编辑器.浏览器.资源管理器等,然后再切换就 ...
- SpringMVC拦截器的应用
一.作用 好文章参考:https://www.cnblogs.com/panxuejun/p/7715917.html 对请求进行预处理和后处理: 使用场景: 登录验证,判断用户是否登录 权限验证,判 ...