目录

HTTPS = HTTP+ 加密 + 认证 + 完整性保护

混合加密机制

通信过程 (包含SSL的四次握手)

1. SSL四次握手建立连接

2. SSL连接完成后,建立TCP连接,发送HTTP请求

3. 通信完成后断开连接

SSL会变慢吗?

1. 通信慢

2. 处理速度慢

HTTPS 安全又可靠, 为何不一直使用?

1.与纯文本通信相比, 加密通信会消耗更多的CPU 及内存资源

2. 节约购买证书的开销


HTTPS = HTTP+ 加密 + 认证 + 完整性保护

  • HTTPS 并非是应用层的一种新协议。 只是 HTTP 通信接口部分用SSL(Secure Socket Layer) 和 TLS(Transport Layer Security) 协议代替而已;

  • 通常, HTTP 直接和 TCP 通信。 当使用 SSL时, 则演变成先和 SSL通信, 再由 SSL和 TCP 通信了。

  • 简言之, 所谓HTTPS, 其实就是身披SSL协议这层外壳的 HTTP。在采用 SSL后, HTTP 就拥有了 HTTPS 的加密、 证书和完整性保护这些功能。

混合加密机制

  • HTTPS 采用共享密钥加密和公开密钥加密两者并用的混合加密机制。 若密钥能够实现安全交换, 那么有可能会考虑仅使用公开密钥加密来通信。 但是公开密钥加密与共享密钥加密相比, 其处理速度要慢。
  • 所以应充分利用两者各自的优势, 将多种方法组合起来用于通信:在交换密钥环节使用公开密钥加密方式, 之后的建立通信交换报文阶段则使用共享密钥加密方式。
  • 详细流程可以看下郭神的这篇博客: blog.csdn.net/guolin_blog/article/details/104546558

通信过程 (包含SSL的四次握手)

先看一下HTTPS的通信步骤,如下图:

1. SSL四次握手建立连接

一次握手:

  • 步骤 1: 客户端通过发送 Client Hello 报文开始 SSL通信。 报文中包含客户端支持的 SSL的指定版本、 加密组件(Cipher Suite) 列表(所使用的加密算法及密钥长度等) 。

二次握手:

  • 步骤 2: 服务器可进行 SSL通信时, 会以 Server Hello 报文作为应答。 和客户端一样, 在报文中包含 SSL版本以及加密组件。 服务器的加密组件内容是从接收到的客户端加密组件内筛选出来的。
  • 步骤 3: 之后服务器发送 Certificate 报文。 报文中包含公开密钥证书。
  • 步骤 4: 最后服务器发送 Server Hello Done 报文通知客户端, 最初阶段的 SSL握手协商部分结束。

三次握手:

  • 步骤 5: 客户端以 Client Key Exchange 报文作为回应。 报文中包含通信加密中使用的一种被称为 Pre-mastersecret 的随机密码串。 该报文已用步骤 3 中的公开密钥进行加密。
  • 步骤 6: 接着客户端继续发送 Change Cipher Spec 报文。 该报文会提示服务器, 在此报文之后的通信会采用Pre-master secret 密钥加密。
  • 步骤 7: 客户端发送 Finished 报文。 该报文包含连接至今全部报文的整体校验值。 这次握手协商是否能够成功, 要以服务器是否能够正确解密该报文作为判定标准。

四次握手:

  • 步骤 8: 服务器同样发送 Change Cipher Spec 报文。
  • 步骤 9: 服务器同样发送 Finished 报文。

总的来说,SSL会话的建立完成了以下几个工作:

  • 交换协议版本号,选择一个通信双方都支持的加密方式;对两端实现身份验证;密钥交换。

2. SSL连接完成后,建立TCP连接,发送HTTP请求

  • 步骤 10: 服务器和客户端的 Finished 报文交换完毕之后, SSL连接就算建立完成,通信会受到 SSL的保护。 从此处开始进行应用层协议的通信, 即发送 HTTP 请求。
  • 步骤 11: 应用层协议通信, 即发送 HTTP 响应。

3. 通信完成后断开连接

  • 步骤 12: 最后由客户端断开连接。 断开连接时, 发送 close_notify 报文。 上图做了一些省略, 这步之后再发送 TCP FIN 报文来关闭与 TCP的通信。

在以上流程中, 应用层发送数据时会附加一种叫做 MAC(Message Authentication Code) 的报文摘要。 MAC 能够查知报文是否遭到篡改, 从而保护报文的完整性。

SSL会变慢吗?

通过上面的SSL四次握手我们可以知道,答案是肯定的,SSL的慢分两种:

1. 通信慢

  • 和使用 HTTP 相比, 网络负载可能会变慢 2 到 100 倍。 除去和TCP 连接、 发送 HTTP 请求 • 响应以外, 还必须进行 SSL通信,因此整体上处理通信量不可避免会增加;

2. 处理速度慢

  • 由于SSL必须进行加密处理,要大量消耗CPU 及内存等资源, 导致处理速度变慢。在服务器和客户端都需要进行加密和解密的运算处理。 因此从结果上讲, 比起 HTTP 会更多地消耗服务器和客户端的硬件资源, 导致负载增强。

HTTPS 安全又可靠, 为何不一直使用?

1.与纯文本通信相比, 加密通信会消耗更多的CPU 及内存资源

  • 如果每次通信都加密, 会消耗相当多的资源, 平摊到一台计算机上时, 能够处理的请求数量必定也会随之减少。因此, 如果是非敏感信息则使用 HTTP 通信, 只有在包含个人信息等敏感数据时, 才利用 HTTPS 加密通信。特别是每当那些访问量较多的 Web 网站在进行加密处理时, 它们所承担着的负载不容小觑。 在进行加密处理时, 并非对所有内容都进行加密处理, 而是仅在那些需要信息隐藏时才会加密, 以节约资源。

2. 节约购买证书的开销

  • 要进行 HTTPS 通信, 证书是必不可少的。 而使用的证书必须向认证机构(CA) 购买。 那些购买证书并不合算的服务以及一些个人网站,可能只会选择采用 HTTP 的通信方式。

HTTPS 与 SSL相关推荐

  1. https、SSL与数字证书介绍

    在互联网安全通信方式上,目前用的最多的就是https配合ssl和数字证书来保证传输和认证安全了.本文追本溯源围绕这个模式谈一谈. 名词解释 首先解释一下上面的几个名词: https:在http(超文本 ...

  2. HTTP、HTTPS、SSL总结

    HTTPS(Secure Hypertext Transfer Protocol)安全超文本传输协议: 它是一个安全通信通道,它基于HTTP开发,用于在客户计算机和服务器之间交换信息,它使用安全套接字 ...

  3. 聊聊HTTPS和SSL/TLS协议

    要说清楚 HTTPS 协议的实现原理,至少需要如下几个背景知识. 1. 大致了解几个基本术语(HTTPS.SSL.TLS)的含义 2. 大致了解 HTTP 和 TCP 的关系(尤其是"短连接 ...

  4. 聊聊 HTTPS 和 SSL/TLS 协议

    原文:http://www.techug.com/post/https-ssl-tls.html 要说清楚 HTTPS 协议的实现原理,至少需要如下几个背景知识. 大致了解几个基本术语(HTTPS.S ...

  5. 给自己的网址加上https,添加ssl证书(springboot项目)

    给自己的网址加上https,添加ssl证书 1.先去阿里云官网首页,登录,找到 *SSL证书* 2.点击 *立即购买* 3.选择好点击确定就可以 4.输入自己的域名和手机号,等待即可,成功他就叫给你发 ...

  6. 浅谈 HTTPS 和 SSL/TLS 协议的背景与基础

    来自:编程随想   >> 相关背景知识 要说清楚 HTTPS 协议的实现原理,至少需要如下几个背景知识. 大致了解几个基本术语(HTTPS.SSL.TLS)的含义 大致了解 HTTP 和 ...

  7. Nginx学习总结(6)——Nginx + https + 免费SSL证书配置指南

    操作环境 操作系统:centos5.5 前段静态内容处理:nginx 后端JSP处理:tomcat 6 一.Nginx + https + 免费SSL证书配置指南 生成证书 $ cd /usr/loc ...

  8. 【转】聊聊HTTPS和SSL/TLS协议

    要说清楚 HTTPS 协议的实现原理,至少需要如下几个背景知识. 1. 大致了解几个基本术语(HTTPS.SSL.TLS)的含义 2. 大致了解 HTTP 和 TCP 的关系(尤其是"短连接 ...

  9. HTTPS的SSL单向验证和双向验证

    HTTPS的SSL单向验证和双向验证 ​ HTTPs利用SSL/TLS建立安全信道,加密数据包,主要目的是提供对网站服务器的身份认证,同时保护交换数据的安全性与完整性 SSL/TLS ​ TLS在传输 ...

  10. 【拜读】HTTPS和SSL/TLS 协议

    声明:原文实在写得太棒了,本人情不自禁对其转载并作了相应整理,原文链接见文末. HTTPS.SSL.TLS术语: HTTP的用途: 首先,HTTP 是一个网络协议,是专门用来帮你传输 Web 内容滴. ...

最新文章

  1. NodeJS+Mongodb+Express做CMS博客系统
  2. HTML 表单(form) 使用详解
  3. 怎么往integer型数组添加数据_用户日活月活怎么统计 - Redis HyperLogLog 详解
  4. java new java.text.SimpleDateFormat(yyyyMM01).format(date)
  5. Executors.newFixedThreadPool和ArrayBlockingQueue一点使用心得
  6. 出国?上研?工作?回家种田?(二) 专业与上研相关问题
  7. 主题:ioctl函数详细说明
  8. c#位数不够0补充完_Java与C#比较,哪个语言更是适合你?
  9. thinkphp group count连用
  10. ES6 将数组根据某个属性进行分组的方法
  11. keil安装及mdk
  12. 2022年最新《小鹿线web前端课程+项目实践课程》
  13. Ragel State Machine Compiler 的速度测试
  14. System.Exception: 操作必须使用一个可更新的查询
  15. 给Jetson Nano更换eMMC闪存(扩容)
  16. 有域名和服务器怎么建设网站新手,新手如何快速搭建一个新的网站【零基础】...
  17. html的excel表格自动换行,Excel单元格内换行实现同时设置多单元格自动换、避免输入短横线...
  18. 无线网络性能测试 软件,WiFi性能测试
  19. 三十岁的男人应该有多少存款?
  20. ansys添加力矩_Ansys加力矩.doc

热门文章

  1. 通过Windows10管理AD域控
  2. Android实现打开手机淘宝并自动识别淘宝口令弹出商品信息功能
  3. Python负数除法取余操作
  4. Lightning Network模拟器
  5. Java编程语言学习:Java语言编程的基础知识之Java的变量与数据类型、符号、运算符、数组Array总结之详细攻略
  6. Log4cpp: log4cpp快速使用指南
  7. java.lang.IllegalArgumentException: An operation with name [{X}count] already exists in this service
  8. 云服务器 文件管理,云服务器如何管理文件
  9. webrtc 之 sip trickle ice
  10. 【前端性能优化】长列表优化