​ 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. PE分析

    1 #include<windows.h> 2 #include<RichEdit.h> 3 #include "resource.h" 4 5 6 7 B ...

  2. mysql基础操作(二):简单查询DQL

    -- 1.查询所有字段 select * from student; -- 2.查询指定的字段 select id from student; select id, name from student ...

  3. Vue.JS快速上手(Vue-router 实现SPA 开发)

    一.什么是路由 URL -> 映射 -> 组件 Hash+onhashchange History.pushstate+replaceState+onpopstate 二.准备工作 组件 ...

  4. 在ES5中模拟类

    1.Object.create()方法创建一个新对象,使用现有的对象来提供新创建的对象的__proto__. var _this = Object.create(fn.prototype);这句代码的 ...

  5. 理解Java中对象基础Object类

    一.Object简述 源码注释:Object类是所有类层级关系的Root节点,作为所有类的超类,包括数组也实现了该类的方法,注意这里说的很明确,指类层面. 所以在Java中有一句常说的话,一切皆对象, ...

  6. ubuntu 16.04 & 18.04 远程桌面使用

    其自带的远程桌面: Server端,被访问端,    Desktop Sharing Client端,访问者的电脑端. Remmina Remote Desktop Client, VNC -> ...

  7. MySQL-存储引擎-Myisam

    mysql> create table myisam_char(name char(10)) engine=myisam; Query OK, 0 rows affected (0.01 sec ...

  8. docker run命令指定GPU多个显卡不生效的问题解决和代码示例

    问题描述:我有一个程序(app),需要用到显卡来跑.原本的部署方式 是直接修改程序的配置文件来指定要用到的显卡. 这是我服务器的显卡信息:总共3卡 分别是 0卡 ,1卡和2卡. [root@k8s-r ...

  9. Linux下cat命令的使用

    1.普通用法-->查看文件内容 cat file_name 查看文件时的相关参数: 1.cat f1.txt,查看f1.txt文件的内容. 2.cat -n f1.txt,查看f1.txt文件的 ...

  10. Linux查看英伟达GPU信息

    命令: nvidia-smi 结果: