​ 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. Spring详解(五)------面向切面编程

    .AOP 什么? AOP(Aspect Oriented Programming),通常称为面向切面编程.它利用一种称为"横切"的技术,剖解开封装的对象内部,并将那些影响了多个类的 ...

  2. Lambda Expressions and Functional Interfaces: Tips and Best Practices

    转载自https://www.baeldung.com/java-8-lambda-expressions-tips 1. Overview   Now that Java 8 has reached ...

  3. Supervisor服务开机自启动

    要解决的问题 在机器上部署自己编写的服务时候,我们可以使用Supervisor作为进程检活工具,用来自动重启服务. 但是当机器重启后,Supervisor却不能自动重启,那么谁来解决这个问题呢? 答案 ...

  4. Python实现GPU加速的基本操作

    技术背景 之前写过一篇讲述如何使用pycuda来在Python上写CUDA程序的博客.这个方案的特点在于完全遵循了CUDA程序的写法,只是支持了一些常用函数的接口,如果你需要自己写CUDA算子,那么就 ...

  5. ES6扩展——函数扩展之默认参数

    1.函数的默认参数 //函数的默认参数 function add(a, b = 999){ console.log(a,b); //1 999 } add(1); 2. 函数的形参可以设置默认值,默认 ...

  6. idea上传项目到github 2019

    记录一下自己查找的从idea上传项目到github的总结 1.默认本地已经安装好git.exe ,idea也已经和git进行匹配 File-setting-versionControl-git-Tes ...

  7. Python3-sqlalchemy-orm

    1 #-*-coding:utf-8-*- 2 #__author__ = "logan.xu" 3 4 5 import sqlalchemy 6 from sqlalchemy ...

  8. Zookeeper:进大厂不得不学的分布式协同利器!

    大家好,我是冰河~~ 最近,有很多小伙伴让我更新一些Zookeeper的文章,正好也趁着清明假期把之前自己工作过程当中总结的Zookeeper知识点梳理了一番,打算写一个[精通Zookeeper系列] ...

  9. K8s配置。--未完成

    配置K8s ##################################################################################### # 配置 --- ...

  10. LeetCode通关:通过排序一次秒杀五道题,舒服!

    刷题路线参考:https://github.com/chefyuan/algorithm-base 大家好,我是拿输出博客督促自己刷题的老三,前面学习了十大排序:万字长文|十大基本排序,一次搞定!,接 ...