文章目录

  • 一、加密方式
  • 二、用非对称加密传递对称加密的秘钥
  • 三、中间人攻击
  • 四、CA校验

一、加密方式

HTTPS用到的加密方式有对称加密和非对称加密两种:

  • 对称加密:只需要一个秘钥,加密和解密都是用该秘钥。
  • 非对称加密:需要两把钥匙,一把公钥一把私钥,公钥对外暴露,私钥自己保存,公钥加密的信息只能用私钥解密,私钥加密的信息可以用公钥解密。

二、用非对称加密传递对称加密的秘钥

假设客服端向服务端请求连接:

  1. 客户端向服务端发送信息请求连接;
  2. 服务端向客服端发送自己的公钥;
  3. 客服端收到公钥,然后生成用于对称加密的秘钥A,使用收到的公钥对秘钥A进行加密,并将加密过的秘钥发给服务器;
  4. 服务器收到客户端发送的加密过的秘钥,使用自己的私钥进行解密,得到秘钥A;

此时客服端和服务端通过非对称加密进行传输得到了用于对称加密的秘钥。
注:为什么客户端和服务端不使用非对称加密进行信息传输?
因为非对称加密生成和加密的消耗时间比较长,为了节省双方的计算时间,通常只用它来传输对称加密的秘钥,然后使用对称加密进行通话。

三、中间人攻击

上述的加密方式看起来安全,但是有一种攻击方式其无法防范,即“中间人攻击”。下面采用一个例子讲述何为中间人攻击:
假设客服端向服务端请求连接,中间人小黑采用“中间人攻击”窃听通话:

  1. 客服端向服务端发送信息请求连接;
  2. 小黑截获该请求,伪装客服端向服务端发送请求连接;
  3. 服务端收到请求,向客户端发送自己的公钥;
  4. 小黑截获该公钥,伪装服务端向客户端发送自己伪造的公钥;
  5. 客户端收到小黑的公钥,生成对称加密的秘钥A,使用收到的公钥加密后发给服务端;
  6. 小黑截获加密的秘钥,使用自己私钥进行解密,得到秘钥A,使用服务端的公钥进行加密后伪装成客户端将其发给服务端;
  7. 服务端使用自己的私钥解密得到秘钥A;

后续客户端和服务端使用秘钥A,通过对称加密进行通话,但是此时小黑也拥有秘钥A,因此小黑可以窃听全部的通话内容。

四、CA校验

“中间人攻击”之所以能生效就是因为客户端无法确定自己收到的公钥是否是未被篡改过的服务端的公钥,因为引入了CA校验用于确保来自服务端的公钥不会被篡改。

CA 是一些非常权威的专门用于认证一个网站合法性的组织。服务端可以向他们申请一个证书,使得服务端与客户端在建立安全连接时可以带上 CA 的签名。 CA 的安全性由操作系统或浏览器来认证,浏览器会在安装时带上一个其认为安全的 CA 证书列表。如果和客户端建立安全连接的服务端带着这些CA组织的签名,那么认为这个安全连接是安全的,没有遭到中间人攻击。

  • CA颁发给网站的证书 = 公钥+申请者与颁发者信息+签名 (公钥即服务端的公钥)
  • 签名 = 使用CA的私钥加密过的数字摘要
  • 数字摘要 = 公钥的md5

证书在网站申请的时候便由CA生成,因为生成证书会用到CA私钥。
同时网站申请时,需要提供自己的公钥, 因为正式描述信息里包含了网站的公钥。

HTTPS如何建立安全连接相关推荐

  1. 【Nginx】如何建立新连接

    处理新连接事件的回调函数是ngx_event_accept,原型如下: void ngx_event_accept(ngx_event_t *ev) 具体流程如下: 1)首先调用accept方法试图建 ...

  2. vc socket api建立TCP连接(包括域名解析)并收发数据的代码模板

    VC和服务器建立TCP连接不像VB的winsock那样两三行代码就能搞定.虽然VC得MFC类库中也有CSocket.CAsyncSocket这样的类,但是这些类的毛病太多,还是返璞归真用socket ...

  3. corefx 源码学习:SqlClient 是如何同步建立 Socket 连接的

    在昨天的技术周会上发现 EnyimMemcached 中建立 Socket 连接的代码有问题,今天坐车的时候在手机上阅读 .net core 2.2 的 SqlClient 中同步建立 Socket ...

  4. 用apache commons-pool2建立thrift连接池

    Apache Thrift 是 Facebook 实现的一种高效的.支持多种编程语言的远程服务调用的框架.具体的介绍可以看Apache的官方网站:http://thrift.apache.org/ . ...

  5. 使用selenium 驱动最新火狐浏览器出错:ConnectionAbortedError: [WinError 10053] 你的主机中的软件中止了一个已建立的连接。...

    今天改selenium的脚本希望他兼容火狐浏览器,但是一直报一个错 ConnectionAbortedError: [WinError 10053] 你的主机中的软件中止了一个已建立的连接. sele ...

  6. 浏览器显示“您与此网站之间建立的连接不安全”的解决方案

    现在很多网站打开的时候发现浏览器地址栏多了一个小的信息提示,点开看,谷歌的Chrome浏览器会提示"您与此网站之间建立的连接不安全",火狐的firefox浏览器会提示"您 ...

  7. 如何解决浏览器提示“您与此网站之间建立的连接不安全”

    当您用360浏览器访问某些网站时,发现在这些网站上只要输入任何信息,360浏览器马上在网页顶端弹出一行警告:"该页面采用不加密的http传输协议,与你建立的连接不安全,请勿在页面内输入任何敏 ...

  8. 如何解决您与此网站之间建立的连接不安全,该页面采用不加密的http传输协议?

    当您用360浏览器访问某些网站时,发现在这些网站上只要输入任何信息,360浏览器马上在网页顶端弹出一行警告:"该页面采用不加密的http传输协议,与你建立的连接不安全,请勿在页面内输入任何敏 ...

  9. TP-LINK路由器与pfSense建立IPsec连接

    同一品牌路由器之间进行IPsec连接设置较为简单,但如何与pfSense建立正确的IPsec连接,网上相关的教程却不多见,本文结合自己的实际,对这两种设备之间建立IPsec连接所需的设置进行详细说明. ...

最新文章

  1. 【CV】吴恩达机器学习课程笔记 | 第1-2章
  2. 《Servlet和JSP学习指南》一第2章 Session管理 2.1 网址重写
  3. 在幕后看看Swift中的Map,Filter和Reduce的实现
  4. 查看linux糸统dns是否运行,探查Linux系统DNS服务器运行状况
  5. VLAN是什么?VLAN交换机端口类型有哪些?—Vecloud微云
  6. JIRA7.10迁移
  7. HBase性能优化方法总结(一):表的设计
  8. BootStrap笔记-表格方面的配置
  9. c语言 字符串 正序再倒序_python字符串
  10. Tomcat logs 目录下各日志文件的含义
  11. 力扣—— 295. 数据流的中位数(困难)
  12. Singleton(单件)
  13. 最大流(Max Flow)
  14. Docker下载安装
  15. 手机计算机16进制,16进制计算器安装方法 16进制计算器使用技巧
  16. 关于网站建设的主要流程和步骤(小白指南)
  17. tibco往服务器发消息,Tibco EMS 初级使用方法小结
  18. 业务流程优化的三点思考
  19. java画好看坦克_坦克大战第一节——画出自己的坦克(新手篇)
  20. 通过PC控制、操作andriod 手机-androidscreencast

热门文章

  1. MEMS运动传感器:三轴数字输出陀螺仪——L3GD20
  2. 介质天线的设计原理_等离子体天线原理与设计.PDF
  3. 解决:SQLSTATE[HY000]: General error: 2006 MySQL server has gone away
  4. ZBrush主要干什么工作?ZBrush的发展方向,我现在开始学习还能赶上好时候吗?
  5. CRM系统优化企业内控建设
  6. ORACLE动态SQL 存储过程
  7. 关于EL/jstl表达式的使用
  8. html增删改后让table自动刷新,vue如何实现表格增删改查效果
  9. Android App常规测试内容
  10. 使用python3实现一个算法,确定一个字符串 s 的所有字符是否全都不同的多种解法?