​ HTTPS自诞生以来,我们总是对它充满着很多的疑问,HTTPS到底是啥?HTTPS多出来的S指的是什么?HTTPS安全可靠吗?访问一个HTTPS的网站的流程等等,带着这些疑问,我们一起来揭开HTTPS的面纱。

HTTPS到底是啥?多出来的S指的是什么?

​ 要想知道HTTPS是啥,首先我们得先知道HTTP是啥,英文全称:Hyper Text Transfer Protocol,翻译过来就是超文本传输协议,那HTTPS多出的S指的其实就是SSL的简写,英文全称:Secure Socket Layer,翻译为安全套接字层,主要是支持网络传输数据的加密工作。SSL协议工作于传输层与应用层之间,为应用提供数据的加密传输。所以,HTTPS的英文全称为 HTTP over SSL,其实就是在之前的HTTP协议传输过程中增加了SSL协议这么一个角色。

HTTPS安全可靠吗?

​ 想要确认是否HTTPS安全可靠,就要从SSL的加密算法进行分析。那么SSL加密能力具体是体现在哪些方面呢?接下来一一进行解析。

​ 我们可以通过对称加密算法对我们传输的数据进行加解密,例如DES对称加密算法,就是相当于每一个网站都与用户之间采用相同的密钥对传输的数据内容进行加解密。但是这种密钥是不能够保证信息安全的,很容易被黑客给窃取,唯一能够提升安全性的就是在加密的基础上再不断进行加密。

​ 但是换个角度想想,如果我们不能阻止黑客来窃取我们的报文,那能不能够保证就算黑客他们成功窃取,也无法查看报文里面的数据。既然DES算法对数据进行对称加密,还是容易被黑客窃取篡改,那不对称加密算法是否达到目的呢?答案是可以的,比如RSA算法,该算法将加密的报文数据分成公钥密钥,由于两个密钥并不会一模一样,所以又称非对称加密私钥是用来对公钥加密的数据进行解密的,这个密钥是需要严格保密的,防止窃取的。公钥是对数据信息进行加密,任何人都可以够得到它,也包括黑客。

非对称加密算法的安全性原理其实就是基于大质数分解的困难性,比如说在非对称加密算法中公钥和私钥是一对大质数函数。计算这两个大质数的乘积相对来说是比较简单的,但是要将这两个大质数的乘积从而分解成两个质数(即逆运算)是比较困难的。RSA算法解密的过程就等同如此。所以,在网络信息传输时,首先将自己的公钥互相发送给对方。这样,一方在发送信息时,先将对方的公钥进行加密生成密文。对方收到密文之后,再用私钥进行解密,这样一来,信息安全就自然地提高了。

​ 但是呢,非对称加密并不是没有缺点的,它有一个很大的痛点就体现在加密和解密耗时过长,比较适合于对少量数据进行处理。实际上,HTTPS也正是通过这样一种非对称加密方式来建立安全的SSL连接的。下面以A和B为例子,讲解下非对称加密传输的过程:

  1. A 和B约定好网络数据传输采用的加密算法是RSA算法。
  2. 然后A和B分别根据RSA生成一对密钥(公钥私钥),然后再彼此交换了公钥
  3. A使用B的密钥(公钥)加密报文信息生成了密文发送给B
  4. B收到了密文之后,采用自己的密钥(私钥)进行密文解密。
  5. B也一样,通过同种方式给A发送报文信息,当然解密方式跟B一样。

看起来是一套十分完美的方案,但是还是会存在一定的风险。万一在步骤2过程中,黑客截断了A的信息,既然它无法对密钥进行解密,但是黑客可以自己定义一个密钥再发送给B,这样,B是没有办法得知这个密钥是A还是黑客发送的,这样信息还是会被黑客给窃取掉了。

​ 那么能不能对发送方的密钥进行身份校验或者找一个权威的中介来担保呢?答案肯定是可以的。CA(Certificate Authority)数字证书横空出世,就是给HTTPS颁发证书的组织机构。作为当前互联网主流的超文本传输协议,在安全地进行HTTPS连接时,就必须需要数字证书来证明自己的身份。

​ CA证书的工作原理其实就是在用户生成的密钥之中公钥信息中额外添加了用户信息CA签名。这样,接受数据的一方只要对发送方的公钥进行签名校验,就可以确认发送方的身份了。

​ 那这样的话,HTTPS安全可靠的问题就得以解决了。

访问一个HTTPS的网站的流程

​ 那么结合上面描述的,访问一个HTTPS的网站的大致流程如下:

  1. 浏览器向服务器发送请求,请求中包括浏览器支持的协议,并附带一个随机数。
  2. 服务器收到请求后,选择某种非对称加密算法(SHA等其他非对称加密算法),把CA数字证书签名公钥、身份信息发送给浏览器,同时也附带一个随机数。
  3. 浏览器收到后,验证证书的真实性,用服务器的公钥发送握手信息给服务器。
  4. 服务器解密后,使用之前的随机数计算出一个对称加密的密钥,以此作为加密信息并发送。
  5. 后续所有的信息发送都是以对称加密方式进行的。

初探计算机网络之HTTPS请求的更多相关文章

  1. 美图App的移动端DNS优化实践:HTTPS请求耗时减小近半

    本文引用了颜向群发表于高可用架构公众号上的文章<聊聊HTTPS环境DNS优化:美图App请求耗时节约近半案例>的部分内容,感谢原作者. 1.引言 移动互联网时代,APP 厂商之间的竞争非常 ...

  2. 走进JavaWeb技术世界5:初探Tomcat的HTTP请求过程

    初探Tomcat的HTTP请求过程 前言:1.作为Java开发人员,大多都对Tomcat不陌生,由Apache基金会提供技术支持与维护,因为其免费开源且易用,作为Web服务器深受市场欢迎,所以有必要对 ...

  3. Http、Https请求工具类

    最近在做微信开发,使用http调用第三方服务API,有些是需要https协议,通过资料和自己编码,写了个支持http和https的工具类,经验证可用,现贴出来保留,也供需要的人使用(有不足的地方,也请 ...

  4. charles4抓https请求的注意事项

    最近升级charles4.0后发现抓不了https请求了,但很奇怪ssl证书一样,记得以前用3.0就可以,今天仔细研究了一下,发现4.0的ssl代理设置中有一段说明(可能3.0也有但没注意): 直接上 ...

  5. 使用curl进行https请求

    简单示例: /** * @param $url * @return array * 进行https请求,并且遇到location进行跳转 */ function https($url){ $resul ...

  6. 在C#用HttpWebRequest中发送GET/HTTP/HTTPS请求

    通用辅助类  下面是我编写的一个辅助类,在这个类中采用了HttpWebRequest中发送GET/HTTP/HTTPS请求,因为有的时候需 要获取认证信息(如Cookie),所以返回的是HttpWeb ...

  7. 【转载】JMeter学习(三十六)发送HTTPS请求

    Jmeter一般来说是压力测试的利器,最近想尝试jmeter和BeanShell进行接口测试.由于在云阅读接口测试的过程中需要进行登录操作,而登录请求是HTTPS协议.这就需要对jmeter进行设置. ...

  8. 如何使用查尔斯代理抓取https请求

    首先 查尔斯代理是一个很不错的抓包工具 有适合各种系统的版本 最近http的请求几乎铺天盖地的已经变为了https了  其中的好处有很多  更加安全(http://www.cnblogs.com/lo ...

  9. C# HttpWebRequest GET HTTP HTTPS 请求

    下面是我编写的一个辅助类,在这个类中采用了HttpWebRequest中发送GET/HTTP/HTTPS请求,因为有的时候需要获取认证信息(如Cookie),所以返回的是HttpWebResponse ...

随机推荐

  1. Flink中的算子操作

    一.Connect DataStream,DataStream ->  ConnectedStream,连接两个保持他们类型的数据流,两个数据流被Connect之后,只是被放在了同一个流中,内部 ...

  2. unity优化 — 纹理(优化)通道分离

    unity针对Android平台还提供了通道分离的方式:将图片(sprite)压缩成ETC1,提取Alpha生成一张通道图.unity将通道图保存的格式为a8格式,目的为了让混合起来的Alpha效果很 ...

  3. webpack编译后的代码如何在浏览器执行

    浏览器是无法直接使用模块之间的commonjs或es6,webpack在打包时做了什么处理,才能让浏览器能够执行呢,往下看吧. 使用commonjs语法 先看下写的代码, app.js minus.j ...

  4. python实现两台不同主机之间进行通信(客户端和服务端)——Socket

    大家好,我是辰哥~ 今天教大家通过Python进行Socket网络编程 (做一个聊天程序) 可以实现在不同的主机(电脑)之间进行通话. 具体效果如何,接着往下看 可以看到客户端(上方)向服务器端(下方 ...

  5. Promise.resolve( data)与Promise.reject( data )

    Promise.resolve( data)与Promise.reject( data ) 常用来生成已经决议失败或成功的promise实例: 1.Promise.reject(data)不管传递的是 ...

  6. Packing问题

    问题描述:如何把任意数量任意尺寸矩形集无重复的放到一个面积最小的封闭矩形中. 算法思想:(为了便于描述,把要找的封闭矩形记为a,封闭矩形的集合记为as,把矩形集合记为rs,n为rs中矩形的个数,把可以 ...

  7. Servlet学习笔记(二)之Servlet路径映射配置、Servlet接口、ServletConfig、ServletContext

    Servlet路径映射配置 要使Servlet对象正常的运行,需要进行适当的配置,以告诉Web容器哪个请求调用哪个Servlet对象处理,对Servlet起到一个注册的作用.Servlet的配置信息包 ...

  8. Python - 导入的位置

    导入的是什么 导入是将 Python 的一些功能函数放到当前的脚本中使用 不导入的功能无法直接在当前脚本使用(除了 python 自带的内置函数) Python 有很多第三方功能,假设想要使用,都必须 ...

  9. openswan中out_sa()函数报文封装思想

    out_sa()函数报文封装思想讲解 1. out_sa前言 我已经在上一篇文章中将in_struct函数的基本原理进行了阐述,而out_struct()的实现基本是相同的,如果能理解in_struc ...

  10. ubantu虚拟机搭建xl2tp服务

    在编译成功源码,安装完毕xl2tpd后,便可以配置xl2tpd服务.基本配置过程主要涉及两个配置文件:一个用来配置xl2tpd, 一个用来配置ppp协议.下面分别对这两个文件进行说明,最后添加xl2t ...