聊聊 HTTPS

本文写于 2021 年 6 月 30 日

最近工作也是越来越忙了,不像上学的时候,一天下来闲着没事可以写两篇博客。

今天来聊一下 HTTPS。

HTTP

HTTP 是不安全的协议。

有面试题可能会问你:“HTTP 的 Get 和 Post 方法谁安全?”注意,别上当了,他们都不安全——因为 HTTP 是明文传输的。

关于 HTTP 应该大家都非常的熟悉,就不多介绍了。

如何保证安全

假设我们在古代,有人寄出了一封密信,我们能对这封信做些什么呢?

  1. 我们可以偷看这封信;
  2. 可以掉包这封信。

HTTP 协议就像送信一样,黑客可以通过这两种手段来工具我们的连接。

所以基于这个例子,我们想到了一个简单的方法来防范:加密这封信,只有服务器和客户端能看懂,这样即使中间被人偷看了也无妨。

对称加密

例如我们约定好,都拿新华字典这本书作为对照,我信中写的 22|31 就是第 22 页的第 31 个字。这样我就可以先写一封信,对照着新华字典将其变为加密的形式,等你拿到这封信的时候,再对着新华字典解开这封信。这样,就可以轻松的防范别人偷窥我们了。

这就叫做对称加密,也就是说,加密方和解密方用的密钥是一样的。

但是这种方法存在一个问题。如果是服务器之间的通信,那我可以在两边的程序里事先写好我们的“新华字典”,但是浏览器,或者说客户端怎么办?

我这个加密用的书怎么样才能通知到客户端呢?

通知不到呀,因为这个密钥万一被劫持了怎么?那不就相当于没有加密吗。

非对称加密

这个时候我们就想,那我不如这样:

假设我们要传递 9527141 这串数字,我就将他写成 92741,然后再写一句“第一个是你的银行密码的第 2 位,第二个是你的银行密码的第 7 位”。

诶,这样一来,对于写信人来说,是自己定义的加密,而收信人并不知道怎么加密,只知道怎么解密,但它用来解密的密钥,又不被其他人所知道。

这就叫做非对称加密。

我们把这个密钥分为一对,服务器将公钥发给客户端,并使用私钥加密,客户端通过公钥解密即可。

在第一次交换数据之后,客户端就可以生成一个随机的密钥,传回给服务端,此时就又可以用对称加密来解决问题了。

但这个时候还没有解决第二个送信问题——被人掉包了怎么办?

黑客掉包了服务器下发给你的公钥,你用他的公钥加密完了数据,他能直接用自己的私钥解开,那信息还是会泄露的呀。

证书

所以终极问题出现了:怎么证明你爸是你爸?

我们需要一个拥有公信力的机构,例如街道办事处、公安局……等等,他们会给你开一个证明,证明你爸是你爸。

这个证明在 HTTPS 中,就叫做数字证书(Digital Certificate)。颁发这个证书的机构就叫做 Certificate Authority(证书授权中心),简称 CA。

通常 CA 都是一个国际组织,我们在浏览器输入一个网址并访问,如果域名的左边出现一个锁,点击它我们就可以看到颁布证书的机构名称和证书的到期时间等信息了。

我们也可以自己申请证书。

先提交域名信息、公司信息、联系人、公钥等等信息给第三方机构,机构审核通过后就会将证书(就是一个文件)颁发给你,其中包含颁发者、域名、公钥、有效期等等信息。这些都可以在浏览器中看到。

当然,申请证书是要交钱的,一般几千到上万不等。(也有免费的)

证书就 100% 安全了吗?

要知道,证书是一个公开的信息,如果人家把你的证书的公钥换成他自己的怎么办呢?

所以我们需要验证。

这就又用到了我们非常熟悉的哈希算法。

  1. 首先服务器用哈希算法计算公钥,生成一个 Digest(哈希值);
  2. 然后加密这个 Digest,放到证书里面,叫做“指纹”,我们也可以在别人的证书里查到这个;
  3. 客户端拿到证书之后,我们就可以在客户端计算公钥的摘要,然后解密指纹,对比这两个 Digest,我们不就能知道公钥是否被篡改了。

加密和加签

但这里又双叒叕出现了一个问题:怎么加密解密 Digest?感觉开始套娃了呀!

所以,又需要 CA 出马了。

CA 是使用自己的私钥加密 Digest,然后在客户端用 CA 的公钥解密。这就解决了问题。

但是为什么这里需要私钥加密,公钥解密呢?

我们一直使用的都是公钥加密,私钥解密呀。

这是两种不同的说法:

  • 公钥加密/私钥解密
  • 私钥加签/公钥解签

他们的作用是不一样的。

加密,是保证只有私钥持有者可以读取消息,保证消息的私密性;加签,是保证只有私钥的持有人才能发出消息,保证身份不可伪造

套娃

此时我们正在逃避一个问题。

引入 CA 的关键原因,就是因为公钥不可信任,需要一个公信机构,结果你现在跟我说公信机构的文件还可能被篡改,还需要他的公钥来保证不被篡改。

那这个公钥怎么办?谁来公信?就算有人证明了,又怎么保证这个证明的合法性?

其实早就有些东西安装在了操作系统中——那就是根证书,根证书是为了证明证书的合法性而存在的。

所以,安装根证书是一件非常危险的事情,大家千万不要随便安装根证书。

SSL/TLS

以上我们说了这么多,其实就可以总结为一种协议,这正是 SSL 协议(Secure Socket Layer)。

在 SSL3.0 的基础上,网景公司又设计了 TLS 协议(Transport Layer Security)

HTTPS = HTTP + SSL/TLS

聊聊 HTTPS的更多相关文章

  1. 也来聊聊 HTTPS.

    前言: 网上聊 HTTPS 的文章已经数都数不过来了吧,厚着脸皮,整理下读书笔记,结合平常项目的实践,也来聊聊 HTTPS. 一.为什么需要 HTTPS? 众所周知,HTTP 协议具有无连接.不可靠. ...

  2. 聊聊HTTPS和SSL/TLS协议

    要说清楚 HTTPS 协议的实现原理,至少需要如下几个背景知识.1. 大致了解几个基本术语(HTTPS.SSL.TLS)的含义2. 大致了解 HTTP 和 TCP 的关系(尤其是“短连接”VS“长连接 ...

  3. 聊聊HTTPS和SSL_TLS协议

    要说清楚 HTTPS 协议的实现原理,至少需要如下几个背景知识. 1. 大致了解几个基本术语(HTTPS.SSL.TLS)的含义 2. 大致了解 HTTP 和 TCP 的关系(尤其是“短连接”VS“长 ...

  4. 聊聊HTTPS和SSL/TLS协议 分类: 计算机网络 2015-07-11 21:41 4人阅读 评论(0) 收藏

    要说清楚 HTTPS 协议的实现原理,至少需要如下几个背景知识. 1. 大致了解几个基本术语(HTTPS.SSL.TLS)的含义 2. 大致了解 HTTP 和 TCP 的关系(尤其是"短连接 ...

  5. 【转】聊聊HTTPS和SSL/TLS协议

    要说清楚 HTTPS 协议的实现原理,至少需要如下几个背景知识.1. 大致了解几个基本术语(HTTPS.SSL.TLS)的含义2. 大致了解 HTTP 和 TCP 的关系(尤其是“短连接”VS“长连接 ...

  6. 从让 HTTPS 更安全出发,聊聊 HTTPS

    随着公众对网络安全的日益关注,各种网络安全防护手段层出不穷.HTTPS Everywhere作为提升HTTPS安全性的有效手段,日前安全性与实用性再次得到了加强. HTTPS虽然可以有效提升用户浏览网 ...

  7. 聊聊HTTPS和SSL/TLS协议 【基础入门】

    要说清楚 HTTPS 协议的实现原理,至少需要如下几个背景知识.1. 大致了解几个基本术语(HTTPS.SSL.TLS)的含义2. 大致了解 HTTP 和 TCP 的关系(尤其是“短连接”VS“长连接 ...

  8. 聊聊HTTPS和SSL协议

    本文为转载,原文链接http://www.techug.com/https-ssl-tls,作者不详. 要说清楚 HTTPS 协议的实现原理,至少需要如下几个背景知识. 1. 大致了解几个基本术语(H ...

  9. 浅谈HTTPS安全性

    各位可曾有过使用智能手机App在网络商店购物的经验,想必是有的,那你/妳会不会担心不够安全呢?有人会说放心吧,购物网站有使用SSL/TLS加密传输,我们就来聊聊HTTPS好了. 客户端与服务器端的交握 ...

随机推荐

  1. input 输入框只能输入数字,一行代码解决,兼容谷歌 火狐

    <input id="mobile" name="mobile" type="text" onkeyup="this.val ...

  2. SQL语句中关于日期的操作(非常的有用)

    在SQL Server 里的日期数据,我们经常可以用 字段<='2008-5-20'这样的表达式,但在oracle却不可以,因为数据类型不一样 字段是date型,'2008-5-20'是字符型, ...

  3. html dom 转化成图片踩坑记(canvas toDataURL)

    需求 在开发过程中遇到这么一个需求,h5页面需要将一个html dom转化成图片,便于用户保存. 面向百度搜索第三方得 html2canvas 和 dom-to-image 两者在写这篇笔记之前在gi ...

  4. 网络安全—xss

    1.xss的攻击原理 需要了解 Http cookie ajax,Xss(cross-site scripting)攻击指的是攻击者往Web页面里插入恶意html标签或者javascript代码.比如 ...

  5. 如何使用vue-cli搭建好的项目

    本人是一枚前端小白,也是从零开始学习vue.js.由于闲着蛋疼,写一点自己的经验,可能有点low.是新手想上道的话,可以看看,如果有大神,也可以给我指导一下,小生感激不尽. 关于如何使用vue-cli ...

  6. PAT B1014 福尔摩斯约会

    大侦探福尔摩斯接到一张奇怪的字条:我们约会吧! 3485djDkxh4hhGE 2984akDfkkkkggEdsb s&hgsfdk d&Hyscvnm.大侦探很快就明白了,字条上奇 ...

  7. add jars、add external jars、add library、add class folder的区别

    add external jars = 增加工程外部的包add jars = 增加工程内包add library = 增加一个库add class folder = 增加一个类文件夹add jar是表 ...

  8. CentOS系统Tomcat 8.5或9部署SSL证书

    本文档介绍了CentOS系统下Tomcat 8.5或9部署SSL证书的操作说明. 环境准备 操作系统:CentOS 7.6 64位 Web服务器:Tomcat 8.5或9 前提条件 已从阿里云SSL证 ...

  9. LC-141andLC-142

    142. 环形链表 II 思路: 设链表共有 a+b 个节点,其中 链表头部到链表入口 有 a 个节点(不计链表入口节点), 链表环 有 b 个节点. 再设两指针分别走了 f,s 步,则有: f = ...

  10. print,printf,println的区别,以及\r,\n,\r\n的区别

    1.常用的是println,就是换行输出 2.print,不换行输出 3.printf常使用于格式转化 public class Print { public static void main(Str ...