草庐IT

Https详解

Node_Hao 2024-05-09 原文

文章目录

一. 什么是 Https

https 就是 http + 安全层(SSL)–> 用来加密的协议 SSL/TLS

SSL(security scoket layer) 加密套接字协议层.

至于为什么会推出安全层 , 是因为臭名昭著的"运营商劫持"

可以看到 天天动听 的下载链接被替换为 QQ浏览器.

如果避免这种情况呢?

出现这种情况的主要原因是在互联网上明文传输非常危险, 不光是运营商劫持 , 黑客窃取支付密码也是常见的事 , 因此需要加密.

1. "加密"是什么?

  • 加密就是把 明文 (要传输的信息)进行一系列的变换 , 生成密文.

  • 解密就是将 密文 进行一系列变换 , 还原成明文.

在这个过程中 , 往往需要一个或多个中间数据 , 辅助这个过程 , 这样的数据称为密钥.

2. 对称加密

进行安全传输的核心就是加密 , 最简单高效的一种加密方法叫做"对称加密"

同一个密钥 , 既可以用来加密 , 也可以用来解密–>对称密钥

但使用的前提是 , 密钥不能被黑客知道.

客户端生成密钥发送给服务器 , 此时密钥刚刚生成 , 服务器还不知道 , 此处的密钥只能明文传输 , 密钥可能被黑客劫持.

因此 , 就需要引入非对称加密,

3. 非对称加密

类似于邮差送信 , 邮差手中的锁相当于公钥 , 客户手中的钥匙相当于私钥. 邮差用公钥加密 , 客户用私钥解密.

服务器生成一对 公钥私钥 , 客户群持有公钥 , 服务器持有私钥.

虽然客户端的公钥从服务器拿 , 黑客也能知道公钥 , 但黑客不知道私钥 , 私钥是服务器自己才有的.

客户端使用公钥 , 来对对称密文加密 , 传输给服务器 , 服务器就可以拿着私钥解密获取对称密文.

本质就是对称加密和非对称加密结合使用 , 非对称加密传递密钥. 对称加密传输信息 , 这时因为非对称加密需要大量计算 , 比对称加密慢很多 , 结合使用就能提高整体速度.

上述理论看似天衣无缝 , 但还是存在瑕疵 :

  • 如果黑客模拟客户端给服务器发送请求 , 那么整个体系就暴露了 , 这就是"中间人攻击".
  • 客户端如何获取公钥?

4. “中间人攻击”


二. 引入证书

为了解决"中间人攻击" , 我们需要引入证书这个概念.

解决"中间人攻击"的关键 , 就是让客户端能够辨别 , 当前这个响应(公钥)是服务器真实的公钥. 引入"证书"本质上就是引入第三方的公正机构.

eg: 我们去网吧/宾馆 , 需要刷身份证 , 那么网吧/旅馆为什么会信任你的身份 , 因为就公安局这样的第三方机构给你背书.

服务器(网站) 在设立之初 , 就需要去专门的认证机构 , 申请证书 , 审核通过就会给你颁发证书. 服务器生成的公钥 , 也包含在这个证书中. 客户端向服务器请求公钥的时候 , 此时就不是单单请求一个公钥 , 而是把整个证书申请过来.

客户端拿到证书之后 , 就可以对证书进行校验 , 如果发现证书是无效的 , 浏览器会直接弹窗警告.

理解签名

客户端拿到证书后 , 就可以对证书进行校验 , 证书上带有一个特定的字段 , 叫做证书签名.

签名就是被认证机构用私钥加密的公钥(服务器发给认证机构的) , 客户端可以使用服务器提供的 公钥 进行解密 , 解密之后 , 得到的结果相当于是一个 hash 值. 不同的数据生成的"签名"差别很大. 使用这样的签名就可以一定程度上区分不同的数据.

  1. 服务器将公钥给 CA 认证机构
  2. CA 用自己的私钥 给公钥 加密 , 生成数字签名
  3. CA 把 公钥 , 数字签名 , 附加一些服务信息整合在一起 , 生成证书 , 发给服务器.

常见生成签名的算法有: MD5 和 SHA 系列

以 MD5 为例:

  • 定长: 无论多长的字符串 , 计算出的 MD5 值都是固定的(16 字节版本 或 32 字节版本)
  • 分散: 源字符串只要改变一点点 , 最终得到的 MD5 值都会差别很大.
  • 不可逆性: 通过源字符串生成 MD5 很容易 , 但通过 MD5 还原成源字符串理论上是不可能的.

正是因为 MD5 有这样的特性 , 我们可以认为如果两个字符串的 MD5 值相同 , 则认为这两个字符串相同.

黑客能否伪造证书?

假如我们的签名就是一个简单的字符串 hello , 服务器把字符串 hello 和 hello 的 hash值(MD5) BC4B2A76B9719D91 返回给客户端 , 客户端只需要使用相同的 hash 算法 , 看看签名是不是 BC4B2A76B9719D91 即可.

如果黑客把 hello 篡改了 , 那么客户端解析出的 hash 值会和服务器传输过来的差别很大. 但还有个问题 , 如果黑客把字符串 hello 和 hash 值都改了该怎么办?

因此传输的 hash 值不能明文传输 , 需要传输密文 , 该 hash 值在服务器通过另一个私钥加密(这个私钥是申请证书的时候 , 证书发给服务器的 , 不是客户端和服务器之间传输的对称密钥的私钥). 然后客户端通过证书发布机构的公钥进行解密 , 还原出原始的 hash 值 , 再进行校验. 黑客虽然能获取到认证机构发布的公钥 , 解密出 hash 值 , 但黑客没有认证机构的私钥 , 没法对篡改后的内容加密.

黑客能否替换公钥?

如果黑客把证书中的公钥替换了 , 意味着客户端算的 hash2 和签名解出的 hash1 对不上 , 客户端就知道无效.

黑客能否篡改签名?

由于黑客不知道认证机构的私钥 , 即使黑客用 hash 算法将签名解析出来 , 并生成一个新的 hash 值 , 也无法加密生成签名.

如何查看证书?

Chrom 浏览器 , 点击右上角 : 选择"设置" , 搜索"证书管理" , 即可查看到以下界面.

有关Https详解的更多相关文章

  1. Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting - 2

    1.错误信息:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:requestcanceledwhilewaitingforconnection(Client.Timeoutexceededwhileawaitingheaders)或者:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:TLShandshaketimeout2.报错原因:docker使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里

  2. 物联网MQTT协议详解 - 2

    一、什么是MQTT协议MessageQueuingTelemetryTransport:消息队列遥测传输协议。是一种基于客户端-服务端的发布/订阅模式。与HTTP一样,基于TCP/IP协议之上的通讯协议,提供有序、无损、双向连接,由IBM(蓝色巨人)发布。原理:(1)MQTT协议身份和消息格式有三种身份:发布者(Publish)、代理(Broker)(服务器)、订阅者(Subscribe)。其中,消息的发布者和订阅者都是客户端,消息代理是服务器,消息发布者可以同时是订阅者。MQTT传输的消息分为:主题(Topic)和负载(payload)两部分Topic,可以理解为消息的类型,订阅者订阅(Su

  3. Tcl脚本入门笔记详解(一) - 2

    TCL脚本语言简介•TCL(ToolCommandLanguage)是一种解释执行的脚本语言(ScriptingLanguage),它提供了通用的编程能力:支持变量、过程和控制结构;同时TCL还拥有一个功能强大的固有的核心命令集。TCL经常被用于快速原型开发,脚本编程,GUI和测试等方面。•实际上包含了两个部分:一个语言和一个库。首先,Tcl是一种简单的脚本语言,主要使用于发布命令给一些互交程序如文本编辑器、调试器和shell。由于TCL的解释器是用C\C++语言的过程库实现的,因此在某种意义上我们又可以把TCL看作C库,这个库中有丰富的用于扩展TCL命令的C\C++过程和函数,所以,Tcl是

  4. ruby - 警告 : PATH set to RVM ruby but GEM_HOME and/or GEM_PATH not set, 请参阅 : https://github. com/wayneeseguin/rvm/issues/3212 - 2

    我每次打开终端时都会收到这个错误:警告:PATH设置为RVMruby​​但未设置GEM_HOME和/或GEM_PATH,请参阅:https://github.com/wayneeseguin/rvm/issues/3212这是在我最近安装zsh(oh-my-zsh)后开始发生的我不知道如何设置GEM_HOME和/或GEM_PATH的路径。 最佳答案 我也面临同样的问题,更改.zshrc中的以下行,exportPATH="/usr/local/heroku/bin:.........."到exportPATH="$PATH:/usr/

  5. ruby - 如何获得带有 SSL 客户端证书的 HTTPS 请求以与 Ruby EventMachine 一起使用? - 2

    我正在尝试使用RubyEventMachine访问使用SSL证书身份验证的HTTPSWeb服务,但我没有让它工作。我编写了以下简单代码块来对其进行端到端测试:require'rubygems'require'em-http'EventMachine.rundourl='https://foobar.com/'ssl_opts={:private_key_file=>'/tmp/private.key',:cert_chain_file=>'/tmp/ca.pem',:verify_peer=>false}http=EventMachine::HttpRequest.new(url).g

  6. ruby - Net::HTTP 对 HTTPS 请求的响应极其缓慢 - 2

    出于某种原因,在我的开发机器上,我对通过Net::HTTP执行的HTTPS请求的响应非常非常慢。我试过RestClient和HTTParty,它们都有同样的问题。它似乎是凭空冒出来的。我已毫无问题地提出这些请求数百次,但今天它们的速度慢得令人难以忍受。pry(main)>putsTime.now;HTTParty.get('https://api.easypost.com/v2/addresses');putsTime.now;2015-04-2908:07:08-05002015-04-2908:09:39-0500如您所见,响应耗时2.5分钟。不仅仅是这个EasyPostAPIUR

  7. ruby - 如何在 Ruby 中编写一个简单的 HTTPS 代理服务器? - 2

    我看过几个用Ruby编写HTTP代理的例子,例如thisgistbyTorstenBecker,但我如何扩展它来处理HTTPS,又名“中间人”SSL代理?我正在寻找一个简单的源代码框架,我可以扩展它以满足我自己的日志记录和测试需求。更新我已经在使用Charles,aniftyHTTPSproxyapp类似于Fiddler,它本质上是我想要的,只是它被打包在一个应用程序中。我想自己写一个,因为我对过滤和展示有特定的需求。更新二四处浏览后,我对术语的理解有所好转。我不是在寻找完整的“中间人”SSL代理。相反,它将在我的机器上本地运行,因此我可以接受它提供的任何SSL证书。但是,我需要查看我

  8. 【详解】Docker安装Elasticsearch7.16.1集群 - 2

    开门见山|拉取镜像dockerpullelasticsearch:7.16.1|配置存放的目录#存放配置文件的文件夹mkdir-p/opt/docker/elasticsearch/node-1/config#存放数据的文件夹mkdir-p/opt/docker/elasticsearch/node-1/data#存放运行日志的文件夹mkdir-p/opt/docker/elasticsearch/node-1/log#存放IK分词插件的文件夹mkdir-p/opt/docker/elasticsearch/node-1/plugins若你使用了moba,直接右键新建即可如上图所示依次类推创建

  9. 【Elasticsearch基础】Elasticsearch索引、文档以及映射操作详解 - 2

    文章目录概念索引相关操作创建索引更新副本查看索引删除索引索引的打开与关闭收缩索引索引别名查询索引别名文档相关操作新建文档查询文档更新文档删除文档映射相关操作查询文档映射创建静态映射创建索引并添加映射概念es中有三个概念要清楚,分别为索引、映射和文档(不用死记硬背,大概有个印象就可以)索引可理解为MySQL数据库;映射可理解为MySQL的表结构;文档可理解为MySQL表中的每行数据静态映射和动态映射上面已经介绍了,映射可理解为MySQL的表结构,在MySQL中,向表中插入数据是需要先创建表结构的;但在es中不必这样,可以直接插入文档,es可以根据插入的文档(数据),动态的创建映射(表结构),这就

  10. 最强Http缓存策略之强缓存和协商缓存的详解与应用实例 - 2

    HTTP缓存是指浏览器或者代理服务器将已经请求过的资源保存到本地,以便下次请求时能够直接从缓存中获取资源,从而减少网络请求次数,提高网页的加载速度和用户体验。缓存分为强缓存和协商缓存两种模式。一.强缓存强缓存是指浏览器直接从本地缓存中获取资源,而不需要向web服务器发出网络请求。这是因为浏览器在第一次请求资源时,服务器会在响应头中添加相关缓存的响应头,以表明该资源的缓存策略。常见的强缓存响应头如下所述:Cache-ControlCache-Control响应头是用于控制强制缓存和协商缓存的缓存策略。该响应头中的指令如下:max-age:指定该资源在本地缓存的最长有效时间,以秒为单位。例如:Ca

随机推荐