HTTPS协议概述

news2024/11/20 13:23:53

HTTPS(Hypertext Transfer Protocol over Secure Socket Layer,基于安全套接字层的超文本传输协议),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,通过 SSL证书来验证服务器的身份,并为浏览器和服务器之间的通信进行加密。其所用的端口号是443。

SSL和TLS

SSL:SSL(Secure Socket Layer,安全套接字层),是Netscape公司设计的主要用于web的安全传输协议。这种协议在WEB上获得了广泛的应用。通过证书认证来确保客户端和网站服务器之间的通信数据是加密安全的。
SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持。SSL协议可分为两层: SSL记录协议(SSL Record Protocol):它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。 SSL握手协议(SSL Handshake Protocol):它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。
TLS:TLS(Transport Layer Security,传输层安全协议),用于两个应用程序之间提供保密性和数据完整性。
SSL 发展到 v3 时已经证明了它自身是一个非常好的安全通信协议,于是互联网工程组 IETF 在 1999 年把它改名为 TLS(传输层安全,Transport Layer Security),正式标准化,版本号从 1.0 重新算起,所以 TLS1.0 实际上就是 SSLv3.1。TLS 1.0是IETF(Internet Engineering Task Force,Internet工程任务组)制定的一种新的协议,它建立在SSL 3.0协议规范之上,是SSL 3.0的后续版本,可以理解为SSL 3.1(可简单理解为同一事物不同阶段的不同称呼)。该协议由两层组成: TLS 记录协议(TLS Record)和 TLS 握手协议(TLS Handshake)。较低的层为 TLS 记录协议,位于某个可靠的传输协议(例如 TCP)上面。TLS的主要目标是使SSL更安全,并使协议的规范更精确和完善。
TLS 已经发展出了三个版本,分别是 2006 年的 1.1、2008 年的 1.2 和2018年的 1.3。每个新版本都紧跟密码学的发展和互联网的现状,持续强化安全和性能,已经成为了信息安全领域中的权威标准。
目前应用的最广泛的 TLS 是 1.2,而之前的协议(TLS1.1/1.0、SSLv3/v2)都已经被认为是不安全的。

为什么使用HTTPS

HTTPS协议主要是为了解决HTTP协议存在的安全问题,使用HTTP协议传输,存在以下风险:
(1) 窃听⻛险,⽐如通信链路上可以获取通信内容,从而盗取用户账号。
(2) 篡改⻛险,⽐如强制植⼊垃圾⼴告,带来视觉污染。
(3) 冒充⻛险,⽐如冒充他人身份购物,导致用户金钱损失。

HTTPS原理

HTTPS就是在应用层和网络层补充了SSL/TSL。HTTP 的请求/响应一般可分为六步:(1) 建立TCP连接;(2) 发送HTTP请求;(3) 服务器处理请求;(4) 返回HTTP响应;(5) 释放TCP连接;(6) 浏览器解析返回的资源和数据。而,HTTPS是在完成TCP连接建立后,再补充一个SSL连接建立的过程,建立安全连接后,才是发送HTTP请求等后续事宜。接下来重点介绍下SSL建立连接(这里指TLS 1.2)的过程。
请添加图片描述
(1) 在 TCP 建立连接之后,浏览器会首先发一个"Client Hello"消息,也就是跟服务器“打招呼”。里面有客户端的版本号、支持的密码套件,还有一个随机数(Client Random)明文,用于后续生成会话密钥
(2) 服务器收到"Client Hello"后,会返回一个"Server Hello"消息。把版本号对一下,也给出一个随机数(Server Random)明文,然后从客户端提供的密码套件列表里选一个作为本次通信使用的密码套件(如 ECDHE 算法)。同时,服务器为了证明自己的身份,就把证书(Server Certificate)也发给了客户端。因为服务器已经选择了密码套件,所以它会在证书后发送"Server Key Exchange"消息,里面是公钥(Server Params),用来实现密钥交换算法,再加上自己的私钥签名认证。
之后是“Server Hello Done”消息,表示"打招呼完毕"。这样第一个消息往返就结束了(两个 TCP 包),结果是客户端和服务器通过明文共享了三个信息:Client Random、Server Random 和 Server Params。
(3) 浏览器拿到服务器的证书后,开始确认证书的真实性,用证书公钥验证签名。确认服务器身份后,浏览器根据已选择的密码套件,生成一个公钥(Client Params),然后用"Client Key Exchange"消息发给服务器。现在浏览器和服务器手里都拿到了密钥交换算法的两个参数(Client Params、Server Params),接着就用密码套件算法,算出"Pre-Master"。现在浏览器和服务器手里有了三个随机数:Client Random、Server Random 和 Pre-Master。用这三个作为原始材料,就可以生成用于加密会话的主密钥,叫"Master Secret"。而黑客因为拿不到"Pre-Master",所以也就得不到主密钥。
为什么需要Client Random、Server Random 和 Pre-Master 三个随机数?这主要是因为,TLS 协议不信任浏览器或服务器伪随机数的可靠性,为了保证真正的"完全随机"、“不可预测”,就把三个不可靠的随机数混合起来,那么"随机"的程度就更高了,安全性也就更有保障。
有了主密钥和基于主密钥派生的会话密钥(Session Secret),握手就快结束了。浏览器发送一个"Change Cipher Spec"消息,然后再发送一个"Finished"消息,把之前所有发送的数据做个摘要,再加密一下,让服务器做个验证。
(4) 服务器接收到浏览器的验证请求后,按照相同的步骤,分别发送"Change Cipher Spec"和"Finished"消息。
(5) 完成上述操作后,TSL连接就建立完成了,接下来就是通过加密的方式来发送HTTP请求和响应。

为什么使用证书

简单来说,证书+数字签名的方式,可以保证证书内容不被篡改,防止"中间人攻击",相当于告诉了浏览器验证服务器身份的手段,也即单向认证。

单向认证和双向认证

单向认证就是客户端需要认证服务端。
双向认证和单向认证原理基本差不多,主要区别是除了客户端需要认证服务端以外,服务端对客户端也需要认证。什么场景下需要验证客户端呢?比如一些银行业务,银行会要求客户必须在电脑上插入它们签发的U盾之类的东西,或者安装什么控件,这里就类似客户端证书的概念,没有这个证书的人无法使用银行提供的业务。

每次进行HTTPS请求时都必须在SSL/TLS层进行握手传输密钥吗?

每次请求都经历一次密钥传输过程非常耗时,那怎么达到只传输一次呢?服务器会为每个浏览器维护一个session ID,在TLS握手阶段传给浏览器,浏览器生成好密钥传给服务器后,服务器会把该密钥存到相应的session ID下,之后浏览器每次请求都会携带session ID,服务器会根据session ID找到相应的密钥并进行解密加密操作,这样就不必要每次重新制作、传输密钥了。

HTTPS用的是对称加密还是非对称加密

要回答这个问题,需要再梳理一下HTTPS的原理。HTTPS原理见上文。
介绍完HTTPS的原理,就可以知道,HTTPS使用非对称加密传输一个对称密钥,让服务器和浏览器都得知。然后两边都使用这个对称密钥来加密解密收发数据。因为传输密钥K是用非对称加密方式,很难破解比较安全。而具体传输数据则是用对称加密方式,加快传输速度。两全其美。

云服务如何实现HTTPS

对云服务来说,没有必要在每个微服务里实现HTTPS,网上也有很多面向Spring Boot实现HTTPS的文章。对于云服务来说,只需在服务入口处实现即可,常见的实现场景有两种,一种是面向静态资源的CDN,另一种是面向服务的LB。当然,可能还包括防火墙等其他情况。具体可以参考这两篇WIKI:一文带你搞懂阿里云上HTTPS配置、腾讯云实现全站 HTTPS 方案。
对开发者、架构师来说,只需要了解HTTPS的原理,并在需要实现HTTPS时,根据现有设计,在对应的组件上实现HTTPS配置,而这配置一般都是依赖云平台。

HTTPS缺点

HTTPS协议具有以下缺点:
(1) HTTPS协议多次握手,导致页面的加载时间延长近50%。
(2) HTTPS连接缓存不如HTTP高效,会增加数据开销和功耗。
(3) 申请SSL证书需要钱,功能越强大的证书费用越高。
(4) SSL涉及到的安全算法会消耗 CPU 资源,对服务器资源消耗较大。

HTTP 与 HTTPS 的区别

HTTP 是超⽂本传输协议,信息是明⽂传输,存在安全⻛险的问题。HTTPS 则解决 HTTP 不安全的缺陷,在TCP 和 HTTP ⽹络层之间加⼊了 SSL/TLS 安全协议,使得报⽂能够加密传输。
HTTP 连接建⽴相对简单, TCP 三次握⼿之后便可进⾏ HTTP 的报⽂传输。⽽ HTTPS 在 TCP 三次握⼿之后,还需进⾏ SSL/TLS 的握⼿过程,才可进⼊加密报⽂传输。
HTTP 的端⼝号是 80,HTTPS 的端⼝号是 443。
HTTPS 协议需要向 CA(证书权威机构)申请数字证书,来保证服务器的身份是可信的。

参考

https://blog.csdn.net/hguisu/article/details/8680808 HTTPS实现原理
https://zhuanlan.zhihu.com/p/466239718 面试必备:计算机网络常问的六十二个问题
https://zhuanlan.zhihu.com/p/27395037 HTTPS系列干货(一):HTTPS 原理详解
https://www.zhihu.com/tardis/zm/art/72616216 十分钟搞懂HTTP和HTTPS协议?
https://www.rfc-editor.org/rfc/rfc8446 TLS 1.3
https://developer.mozilla.org/zh-CN/docs/Web/Security/Transport_Layer_Security 传输层安全
https://www.cnblogs.com/huansky/p/13977181.html 深入浅出 HTTPS (详解版)
https://zhuanlan.zhihu.com/p/43789231 彻底搞懂HTTPS的加密原理
https://zhuanlan.zhihu.com/p/96494976 你知道,HTTPS用的是对称加密还是非对称加密?
https://www.jianshu.com/p/918d9f517749 https中的对称加密和非对称加密
https://zhuanlan.zhihu.com/p/162082184 对称还是非对称——https中到底使用了啥?
https://cloud.tencent.com/document/product/400/6813 腾讯云实现全站 HTTPS 方案
https://help.aliyun.com/practice_detail/444367 一文带你搞懂阿里云上HTTPS配置

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1046280.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C语言入门Day_26 结构体

目录 前言: 1.结构体的定义 2.结构体的使用 3.易错点 4.思维导图 前言: 变量只能表示单一的属性,比如用int去表示一个年龄,用float去表示一个身高或一个体重,一个字符串/字符数组去表示一个性别或一个名字。 …

2023年腾讯云服务器优惠活动整理汇总

腾讯云是腾讯集团倾力打造的云计算品牌,为了吸引更多的用户,腾讯云经常会推出各种各样的优惠活动。本文将为大家整理汇总一些腾讯云服务器的优惠活动,希望能够帮助到需要购买腾讯云服务器的用户。 一、腾讯云服务器优惠券 腾讯云优惠券是腾讯…

创建型设计模式——工厂模式

摘要 本博文主要介绍软件设计模式中工厂模式,其中工厂设计模式的扩展为简单工厂(Simple Factory)、工厂方法(Factory Method)、抽象工厂(Abstract Factory)三种。 一、简单工厂(Simple Factory) 主要分析设计模式 - 简单工厂(Simple Factory),它把实例…

腾讯大牛耗时1个月整理的“JVM学习笔记“深入底层,面面俱到!

为什么要学习JVM? 1、 程序调优2、 排查程序运行问题3、 掌握了程序执行的根本和原理4、 规避写代码时候的一些错误5、 应付面试6、 掌握了其他语言的通用机制 怎么有效的学习JVM? 以上了解了学习JVM的种种好处,但是怎么有效的学习JVM呢&a…

029-从零搭建微服务-消息队列(一)

写在最前 如果这个项目让你有所收获,记得 Star 关注哦,这对我是非常不错的鼓励与支持。 源码地址(后端):mingyue: 🎉 基于 Spring Boot、Spring Cloud & Alibaba 的分布式微服务架构基础服务中心 源…

1992-2021年省市县经过矫正的夜间灯光数据(GNLD、VIIRS)

1992-2021年省市县经过矫正的夜间灯光数据(GNLD、VIIRS) 1、时间:1992-2021年3月,其中1992-2013年为年度数据,2013-2021年3月为月度数据 2、来源:1992-2013年来源于DMSP、2013-2021年3月来自VIIRS 3、范…

spring AOP源码阅读分析

理论知识 AOP是面向切面编程(Aspect Oriented Programming)的意思。定义一些切点(pointcut),然后可以在切点织入一些通知(advice),对切点方法进行代理增强,与核心业务逻辑分离开来,以提高系统的可维护性、可扩展性和重…

网工内推 | 网络工程师,软考证书优先,六险一金,包吃

01 科力信息 招聘岗位:网络工程师 职责描述: 1、负责蚌埠项目的设备安装及调试; 2、对边界网络运行中的监控、故障排除、问题处理。 任职要求: 1、2年及以上网络相关工作经验,有交通管理网络运维经验优先&#xff1b…

【移动端测试工具】Appium自动化测试工具安装与配置

文章目录 一、JAVA环境配置检查是否已安装java jdk 二、android SDK安装1.下载android sdk压缩包2.解压压缩包3.安装SDK Manager4.sdk环境变量配置5.验证sdk是否安装成功 三、node JS安装1.下载node.js安装包2.安装node.js3.环境配置4.测试完成验证5.安装淘宝镜像并检验是否安装…

Android MeasureSpec测量规格

文章目录 Android MeasureSpec测量规格概述MeasureSpec组成常用APIMeasureSpec源码分析getChildMeasureSpec源码分析总结 Android MeasureSpec测量规格 概述 MeasureSpec指View的测量规格,MeasureSpec是View的一个静态内部类。 View的MeasureSpec是根据自身的布局…

SoloX:Android和iOS性能数据的实时采集工具

SoloX:Android和iOS性能数据的实时采集工具 github地址:https://github.com/smart-test-ti/SoloX 最新版本:V2.7.6 一、SoloX简介 SoloX是开源的Android/iOS性能数据的实时采集工具,目前主要功能特点: 无需ROOT/越狱…

Java调用操作系统命令的输出乱码问题解决

本篇解决的问题 使用Java 的Runtime调用操作系统的命令,出现异常时使用getErrorStream()获取错误信息的字节流,转换该字节流为字符串显示时,出现乱码。 Java调用操作系统命令 这里以Windows 操作系统为例, 调用cd 命令切换路径…

SAP 销售订单审批状态参数设置

定义权限码 BS52 Spro->控制->内部订单->订单主数据->状态管理->定义状态管理授权码 创建状态参数文件 BS02 SPRO->销售与分销->销售->销售凭证->定义并分配状态参数文件->定义状态参数文件 1)命名,描述 设置对象类型:销…

记录一个iOS UITableView 正在刷新的时候修改数据源导致的崩溃

首先看一下崩溃堆栈信息 由于tableview 调用layoutsubViews 执行到代理方法 -(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{ 由于是崩溃在系统方法里面的,我们无法直接看到是因为调用哪个方法导致的崩溃 后来…

秦时明月沧海手游礼包码,秦时明月沧海兑换码

在玩《秦时明月沧海》手游时,你可能会遭到礼包码的诱惑。如果你还没找到可用的兑换码,这里有一些可供使用的礼包码,赶快领取吧! 关注【娱乐天梯】,获取内部福利号 1. 礼包码:QIN0809 包含:金镒…

面试打底稿⑤ 项目一的第一部分

简历原文 抽查部分 项目描述 该项目旨在服务广州地区的快递物流,实现了下单、快递员取派件、订单转运单、线路规划、网点设置等功能。 责任描述 登录系统优化,双token三验证模式实现设置token状态、提高登录安全性的效果 模拟问答 1.能简单介绍一下…

2023-9-27 JZ18 删除链表的结点

题目链接: 删除链表的结点 import java.util.*;/** public class ListNode {* int val;* ListNode next null;* public ListNode(int val) {* this.val val;* }* }*/public class Solution {/*** 代码中的类名、方法名、参数名已经指定,请…

【C++】友元函数 ( 友元函数简介 | 友元函数声明 | 友元函数语法 | 友元函数声明不受访问控制限制 | 友元函数参数要求 )

文章目录 一、友元函数简介二、友元函数声明1、友元函数语法2、友元函数声明不受访问控制限制3、友元函数参数要求4、友元函数示例 三、完整代码示例 - 友元函数 一、友元函数简介 在 C 语言中 , " 友元函数 " 是 与 类 相关联的函数 , " 友元函数 " 不是…

【Verilog 教程】6.6Verilog 仿真激励

关键词:testbench,仿真,文件读写 Verilog 代码设计完成后,还需要进行重要的步骤,即逻辑功能仿真。仿真激励文件称之为 testbench,放在各设计模块的顶层,以便对模块进行系统性的例化调用进行仿真…

对象存储,从单机到分布式的演进

关于数据存储的相关知识,请大家关注“数据存储张”,各大平台同名。 通过《什么是云存储?从对象存储说起》我们对对象存储的历史、概念和基本使用有了一个大概的认识。而且我们以Minio为例,通过单机部署的模式实际操作了一下对象存储的GUI,感受了一下对象存储的用法。 在上…