草庐IT

HTTPS协议

熬夜磕代码丶 2023-07-24 原文

文章目录

一、HTTPS是什么?

HTTPS:HTTP + 安全层(SSL),HTTPS也是应用层协议,在HTTP协议的基础上引入了一个加密层,因为HTTP协议内容都是按照文本的方式明文传输的,这就导致在传输过程中出现一些被篡改的情况

运营商劫持

不知道大家有没有这种现象,想要下载一款软件的时候,在网页点击下载的时候并不是直接下载的该软件,而是某一款应用商城。
我们点击下载按钮,给服务器发送一个HTTP请求,获取到的HTTP响应其实就包含该软件的下载链接,运营商劫持之后,就发现这个请求是要下载该软件,那么就自己的把要交该用户的响应给篡改成"应用商城"的下载地址了

为什么运营商会劫持?
最主要的原因还是HTTP在互联网上是明文传输,让运营商有了可乘之机

HTTPS就是为了避免这种情况的发生,在HTTP的基础上进行了加密,进一步的来保证用户的信息安全

加密是是什么?

加密:加密就是将铭文进行一系列变换,生成密文
解密:解密就是把密文在进行一系列变换,还原成明文

在这个加密和解密的过程中,往往需要一个或多个中间的数据,辅助进行这个过程,这样的数据称之为密钥

二、HTTPS工作过程

HTTPS在网络传输中不再直接传输明文了,而是加密之后的密文,HTTPS主要涉及到SSL部分,但SSL部分并不是只在HTTPS中使用,加密方式有很多种,但整体可以分为两大类:对称加密非对称加密

对称加密

加密:明文 + key => 密文
解密:密文 + key => 明文
这里的key是同一把密钥,既可以用来加密,也可也用来解密,我们称之为对称密钥

既然是对称加密,那么客户端和服务器都需要密钥,那么是由客户端生成密钥还是由服务器生成密钥呢?
因为每个服务器对应很多客户端,每个客户端都有不同的密钥,所以我们这里是由客户端生成密钥,但是客户端虽然生成了,服务器还不知道该密钥,于是在传输数据之前需要先将密钥发送给服务器

当客户端生成密钥后,将密钥发送给服务器,但由于服务器并不知道密钥,于是这里的密钥只能进行明文传输,一明文这里的密钥就有可能被黑客给截获,那么后续的加密操作就形如虚设了。
因此,我们这里的密钥的传输必须进行加密传输
都拿手我们想要对密钥进行加密传输,我们就需要协商一个"密钥的密钥",以此循环都会面临该问题,此时的密钥使用对称加密的方式就行不通了。
因此我们就需要引入非对称加密

非对称加密

非对称加密需要用到两个密钥,一个叫公钥,一个叫私钥,公钥和私钥是配对的,最大的缺点是运算速度非常慢,比非对称加密要慢很多。
明文 + 公钥 => 密文 使用公钥加密
密文 + 私钥 => 明文 使用私钥解密
这里的公钥和私钥可以交换位置,公钥是可以进行公开的。

服务器生成一对公钥私钥,客户端持有公钥,服务器持有私钥,此时客户端的公钥从服务器拿,黑客也能够知道公钥,但黑客不知道私钥,因为私钥是服务器私有的。
客户端使用私钥,来对对称密钥加密,传输给服务器,服务器就可以拿着自己的私钥对给密文进行解密获取到对称密钥,此时客户端就可以使用对称密钥对后续数据进行加密传输了。
为什么有了非对称加密,还要继续使用对称加密?
因为对称加密速度快,非对称加密速度慢,为了尽可能提高整体的速度,所以必须使用对称加密

但是即使这样加密之后还是会出现问题,会出现中间人攻击,因为黑客也可以获取到公钥

中间人攻击的主要是要让客户端能够辨别出来响应中的公钥是否是服务器真实的公钥,这里我们实际是引入一个证书,本质上是引入一个第三方的公证机构

证书

网站设立之初时,就需要取专门的认证机构去申请证书(提供网站的一些资质证明),如果审核通过之后,就会颁布一个证书,服务器生成的公钥也会在这个证书之中。
客户端在向服务器发送请求获取公钥的时候,就不是单单的获取一个公钥了,而是将整个证书都请求过来,客户端拿到证书之后,就可以对证书进行校验(这里可以通过验证,来判断证书是不是被篡改过的),如果发现证书是无效的,浏览器会直接弹窗警告。

客户端拿到证书就会对证书进行校验,证书上面有一个特殊的字段叫做证书的签名。
检验过程:
1.判断证书的有效期是否过期
2.判定证书的发布机构是否受信任(操作系统已经内置了受信任的证书发布机构)
3.验证证书是否被篡改: 从系统中拿到该证书发布机构的公钥, 对签名解密, 得到一个 hash 值(称为数据摘要), 设为 hash1. 然后计算整个证书的 hash 值, 设为 hash2. 对比 hash1 和 hash2 是否相等. 如果相等, 则说明证书是没有被篡改过的.

有关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. CAN协议的学习与理解 - 2

    最近在学习CAN,记录一下,也供大家参考交流。推荐几个我觉得很好的CAN学习,本文也是在看了他们的好文之后做的笔记首先是瑞萨的CAN入门,真的通透;秀!靠这篇我竟然2天理解了CAN协议!实战STM32F4CAN!原文链接:https://blog.csdn.net/XiaoXiaoPengBo/article/details/116206252CAN详解(小白教程)原文链接:https://blog.csdn.net/xwwwj/article/details/105372234一篇易懂的CAN通讯协议指南1一篇易懂的CAN通讯协议指南1-知乎(zhihu.com)视频推荐CAN总线个人知识总

  3. ruby - HTTP POST 上的 SSL 错误(未知协议(protocol)) - 2

    尝试通过SSL连接到ImgurAPI时出现错误。这是代码和错误:API_URI=URI.parse('https://api.imgur.com')API_PUBLIC_KEY='Client-ID--'ENDPOINTS={:image=>'/3/image',:gallery=>'/3/gallery'}#Public:Uploadanimage##args-Theimagepathfortheimagetoupload#defupload(image_path)http=Net::HTTP.new(API_URI.host)http.use_ssl=truehttp.verify

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

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

  5. 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/

  6. 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

  7. 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

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

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

  9. 网络实验之RIPV2协议(一) - 2

    一、RIPV2协议简介  RIP(RoutingInformationProtocol)路由协议是一种相对古老,在小型以及同介质网络中得到了广泛应用的一种路由协议。RIP采用距离向量算法,是一种距离向量协议。RIP-1是有类别路由协议(ClassfulRoutingProtocol),它只支持以广播方式发布协议报文。RIP-1的协议报文无法携带掩码信息,它只能识别A、B、C类这样的自然网段的路由,因此RIP-1不支持非连续子网(DiscontiguousSubnet)。RIP-2是一种无类别路由协议(ClasslessRoutingProtocol),支持路由标记,在路由策略中可根据路由标记对

  10. ruby - 具有 HTTPS、SSL 客户端证书和 Keep-Alive 支持的 Ruby HTTP 库? - 2

    我正在尝试用Ruby编写一个HTTPS客户端。它将使用HTTPS连接到服务器,传递身份验证token(通过单独的登录过程获得)和SSL客户端证书。我正在使用rest-client执行以下操作:client=RestClient::Resource.new(url,:ssl_client_cert=>OpenSSL::X509::Certificate.new(File.read('./certificate/client-2048.pem')),:ssl_client_key=>OpenSSL::PKey::RSA.new(File.read('./certificate/client

随机推荐