当前位置: 首页 > news >正文

SSL/TLS 握手过程详解

SSL握手过程详解

  • 1、SSL/TLS 历史发展
  • 2、SSL/TLS握手过程概览
    • 2.1、协商交换密码套件和参数
    • 2.2、验证一方或双方的身份
    • 2.3、创建/交换对称会话密钥
  • 3、TLS 1.2 握手过程详解
  • 4、TLS 1.3 握手过程详解
  • 5、The TLS 1.2 handshake – Diffie-Hellman Edition

1、SSL/TLS 历史发展

可以理解TLS是SSL的升级版本。

SSL 的第一个可用版本——SSL 2.0——由 Netscape 设计并于 1995 年发布。然而,SSL 2.0 中发现了漏洞,要求 Netscape 设计一个更好、更安全的版本。 一年后SSL 3.0问世。 SSL 3.0 仍然被广泛使用,直到 2014 年秋天,Google 安全团队发现了一个重大安全漏洞。

TLS 1.0 于 1999 年首次被设计为 SSL 3.0 的另一个协议升级。虽然差异并不显着,但它们足够重要,以至于 SSL 3.0 和 TLS 1.0 无法互操作。 SSL 3.0 被认为不如 TLS 安全。

TLS 1.1 创建于 2006 年,TLS 1.2 于 2008 年发布。TLS 1.2 是目前使用的版本,TLS 1.3 在2018年8月发布。 与任何其他协议升级一样,TLS 被认为比 SSL 3.0 更安全,因为每个版本都增加了阻止利用和缓解漏洞的措施。

正如您所看到的,SSL 3.0 多年来一直存在安全问题,这需要更安全的解决方案。 与任何其他技术更新一样,每个版本都存在差异,但最终用户的最终产品是相同的。 当人们提到 SSL 或 TLS 时,他们通常谈论的是同一件事,除非他们指的是协议的不同版本。

SSL 和 TLS 这两个术语可以互换使用,因为这些协议以相同的方式加密信息,并且在最基本的层面上执行相同的操作。 TLS 是 SSL 的简单升级且更安全的版本。 TLS 现已在整个网络中广泛使用,并且是交易安全的首选。 可以在服务器上同时启用所有版本的 SSL 和 TLS。

所有数字证书均与 SSL 和 TLS 协议兼容。 但是,由于 SSL 3.0 中存在显着漏洞,DigiCert 建议您在服务器上完全禁用 SSL 3.0(如果您尚未这样做)。 通过禁用 SSL 3.0 并启用 TLS,管理员将获得相同级别的加密且不会出现漏洞。 如果您不确定启用了哪些 SSL/TLS 版本,您可以使用证书检查器进行漏洞扫描、分析等。

2、SSL/TLS握手过程概览

https连接有两个方面组成:客户单和服务器端。
客户端负责发起连接,服务端接受连接。客户端和服务端即是握手的两方。
SSL/TLS 握手的目的是执行安全连接所需的所有加密工作。 这包括验证正在使用的 SSL 证书并生成加密密钥。

SSL/TLS 握手的目的是执行安全连接所需的所有加密工作

TLS 握手完成了 3 个主要任务:

  1. 协商交换密码套件和参数
  2. 验证一方或双方的身份
  3. 创建/交换对称会话密钥

2.1、协商交换密码套件和参数

每个软件都是不同的。 Web 浏览器是最常见的客户端,Google Chrome、Mozilla Firefox 和 Microsoft Internet Explorer 等流行浏览器的功能可能有所不同。 同样,在服务器端,Windows Server、Apache 和 NGINX 等流行操作系统都有非常不同的功能支持。 当您添加自定义配置时,所有这一切都变得更加复杂。 因此,TLS 握手的第一步要求客户端和服务器共享其功能,以便它们能够找到相互支持的加密功能。

一旦客户端和服务器就他们将使用的确切加密方法达成一致(称为密码套件),服务器就会向客户端发送其 SSL 证书。

2.2、验证一方或双方的身份

收到证书后,客户会检查以确保证书是“真实的”。 这是极其重要的一步。 要真正拥有安全的连接,您不能只是加密数据,您还需要知道数据被发送到正确的网站/组织。 SSL/TLS 证书提供该身份验证。 但他们的做法取决于所使用的密码套件。

所有受信任的 SSL 证书均由证书颁发机构 (CA) 颁发,该机构是已获批准颁发数字证书的公司。 这些组织必须遵循严格的颁发和验证准则,以便他们颁发的证书继续受到信任。 这主要是为了确保您只能获得您真正拥有的网站或公司的证书。 在这种情况下,您可以将 CA 视为公证人 - 它的签名表明证书上的实体就是它所说的那个实体。

在 TLS 握手的身份验证部分期间,客户端执行多项加密安全检查,以确保服务器提供的证书是真实的。 这包括检查数字签名并确保证书来自受信任的 CA。

在此阶段,客户端还会验证服务器是否拥有与证书关联的私钥。 所有 SSL 证书都包含由公钥和私钥组成的密钥对。 公钥用于加密数据,私钥用于解密。 这被称为“非对称”公钥加密,因为这两个功能是由不同的密钥执行的。 加密实际上是单向的。

使用最常见的公钥密码系统 RSA,客户端将使用需要用于生成会话密钥的公钥来加密随机数据。 服务器只有拥有提供所有权证明的私钥才能解密和使用该数据。

如果使用另一种类型的密码系统(例如 ECC),则此过程会发生变化,但始终会检查所有权证明。

2.3、创建/交换对称会话密钥

TLS 握手的最后一部分涉及创建“会话密钥”,这是实际用于安全通信的密钥。

会话密钥是“对称的”,这意味着相同的密钥用于加密和解密。 这些密钥可以比非对称密钥更有效地实现强加密,从而适合在 HTTPS 连接中来回发送数据。

生成密钥的确切方法根据所选的密码套件而有所不同,其中两种最常见的方案是 RSA 和 Diffie-Hellman。

为了结束握手,各方让对方知道他们已经完成了所有必要的工作,然后双方都运行校验和以确保握手发生时没有任何恶意篡改或损坏。

整个 SSL 握手发生在几百毫秒内,并且全部在幕后进行。 这是 HTTPS 连接中必须发生的第一件事,甚至在网页加载之前。

SSL 握手完成后,加密且经过身份验证的 HTTPS 连接就会开始,您和服务器之间发送和接收的所有数据都会受到保护。

在 TLS 1.3 之前,每次重新访问站点时,握手都会再次发生。 TLS 1.3握手支持0 RTT,即零往返时间恢复,大大提高了回访者的速度。 此前,许多服务器为了效率和速度而实施了“恢复”过程,但 0 RTT 将其提高到 11。

3、TLS 1.2 握手过程详解

TLS 1.2 在 2008年发布,TLS 1.2 是目前使用广泛的版本。

每次 TLS 握手都涉及一系列步骤,这些步骤完成我们上面总结的三个主要任务:交换加密功能、验证 SSL 证书以及交换/生成会话密钥。

对于那些希望了解确切过程的人,以下是 TLS 1.2 握手涉及的步骤(使用 RSA - 我们在本文后面有一个 Diffie-Hellman TLS 1.2 握手的示例)。

这些步骤如下图所示,左侧是客户端,右侧是服务器。

在这里插入图片描述

1、第一条消息称为“ClientHello”。 此消息列出了客户端的功能,以便服务器可以选择两者用于通信的密码套件。 它还包括一个随机挑选的大素数,称为“客户端随机数”

2、服务器礼貌地回复“SeverHello”消息。 在此消息中,它告诉客户端它从提供的列表中选择了哪些连接参数,并返回自己随机选择的质数(称为“服务器随机数”)。 如果客户端和服务器不共享任何共同功能,则连接将无法成功终止。

3、在“Certificate”消息中,服务器将其 SSL 证书链(包括其叶证书和中间证书)发送给客户端。 为了向连接提供身份验证,SSL 证书由 CA 签名,这允许客户端验证证书是否合法。 收到证书后,客户端会执行多项检查来验证证书。 这包括检查证书的数字签名、验证证书链以及检查证书数据是否存在任何其他潜在问题(证书过期、域名错误等)。 客户端还将确保服务器拥有证书的私钥。 这是在密钥交换/生成过程中完成的。

4、这是一条可选消息,仅对于需要服务器提供附加数据的某些密钥交换方法 (Diffie-Hellman) 才需要。

5、“Server Hello Done”消息告诉客户端它已经发送了所有消息。

6、然后,客户端提供其对会话密钥的贡献。 此步骤的细节取决于在初始“Hello”消息中决定的密钥交换方法。 在此示例中,我们将研究 RSA,因此客户端将生成称为预主密钥的随机字节字符串,然后使用服务器的公钥对其进行加密并传输。

7、“Change Cipher Spec”消息让对方知道它已经生成了会话密钥并将切换到加密通信。

8、然后发送“Finished”消息以表明客户端的握手已完成。 Finished 消息已加密,并且是受会话密钥保护的第一个数据。 该消息包含允许各方确保握手未被篡改的数据 (MAC)。
9、现在轮到服务器做同样的事情了。 它解密预主密钥并计算会话密钥。 然后,它发送“更改密码规范”消息以指示它正在切换到加密通信。

10、服务器使用刚刚生成的对称会话密钥发送“完成”消息,它还执行相同的校验和来验证握手的完整性。

经过以上这些步骤后,SSL 握手就完成了。 双方现在都拥有会话密钥,并将开始通过加密且经过身份验证的连接进行通信(数据传输)。

此时,可以发送“应用程序”数据的第一个字节(属于双方将通信的实际服务的数据,即网站的 HTML、Javascript 等)。

通过实际抓包看TLS 1.2 的握手过程
在这里插入图片描述

4、TLS 1.3 握手过程详解

让我们首先看一下正在运行的 TLS 1.3 握手,然后我们将深入研究已做出的改进。 如您所见,TLS 1.3 握手时间明显短于其前身。

在这里插入图片描述

1、与 TLS 1.2 握手一样,客户端 Hello 消息会启动握手,但这次它包含了更多信息。 TLS 1.3 将支持的密码数量从 37 个减少到 5 个。我们稍后会详细了解这意味着什么,但在握手的上下文中,这意味着客户端可以猜测将使用什么密钥协商/交换协议 除了从它猜测的任何协议发送其密钥共享之外。

2、服务器将用自己的 Server Hello 消息进行响应,同样,服务器非常有礼貌。 与 1.2 握手一样,此时它也会发送证书。 并且,如果客户端猜对了并且两者已就相同的 AEAD 协议达成一致,则服务器会发送自己的密钥共享部分,计算会话密钥并以服务器完成消息结束。

3、现在已经拥有所有相关信息,客户端将验证 SSL 证书并使用两个密钥共享来计算自己的会话密钥副本。 完成后,它会发送自己的 Finished 消息。

5、The TLS 1.2 handshake – Diffie-Hellman Edition

之前我们介绍了 TLS 1.2 握手的 RSA 版本。 但现在我们已经了解了 DH 与 RSA 的不同之处,让我们看看基于 DH 的 TLS 1.2 握手是什么样子的。

同样,这两种方法之间有很多相似之处,但不是用一种算法来处理身份验证和密钥交换,而是对任务进行了划分。 相反,我们将使用 ECDHE 进行密钥交换,使用 ECDSA 进行身份验证。

在这里插入图片描述

1、与 RSA 一样,客户端以“ClientHello”消息开始,其中包含密码套件列表以及客户端随机数。

2、服务器用自己的“ServerHello”消息进行响应,其中包括其选择的密码套件和服务器随机数。

3、服务器发送其 SSL 证书,就像 RSA TLS 握手一样,客户端将运行一系列检查来验证证书是否有效,但由于 DH 本身无法验证服务器,因此需要额外的机制。

4、为了提供身份验证,服务器获取客户端和服务器的随机数以及将用于计算会话密钥的 DH 参数,并使用其私钥对其进行加密。 这起到了数字签名的作用,客户端将使用公钥来验证签名——并且服务器是密钥对的合法所有者——并用自己的 DH 参数进行响应。

5、服务器以“Server Hello Done”消息结束此往返。

6、与 RSA 不同,客户端无需使用非对称加密将预主密钥发送到服务器,而是客户端和服务器使用之前交换的 DH 参数来获得预主密钥。 然后双方使用刚刚计算出的预主密钥来相互得出会话密钥。

7、客户端发送“Change Cipher Spec”消息,通知对方切换到加密。

8、客户端发送最终的“完成”消息,表明它已经完成了握手的部分。

9、同样,服务器发送“更改密码规范”消息。

10、握手以服务器“完成”消息结束。

参考链接: https://www.thesslstore.com/blog/explaining-ssl-handshake/#comments

相关文章:

SSL/TLS 握手过程详解

SSL握手过程详解 1、SSL/TLS 历史发展2、SSL/TLS握手过程概览2.1、协商交换密码套件和参数2.2、验证一方或双方的身份2.3、创建/交换对称会话密钥 3、TLS 1.2 握手过程详解4、TLS 1.3 握手过程详解5、The TLS 1.2 handshake – Diffie-Hellman Edition 1、SSL/TLS 历史发展 可…...

B端产品经理学习-对用户进行需求挖掘

目录: 用户需求挖掘的方法 举例:汽车销售系统的用户访谈-前期准备 用户调研提纲 预约用户做访谈 用户访谈注意点 我们对于干系人做完调研之后需要对用户进行调研;在C端产品常见的用户调研方式外,对B端产品仍然适用的 用户需…...

高清网络视频监控平台的应用-城市大交通系统视联网

目 录 一、应用需求 二、系统架构设计 三、功能介绍 1.实时视频监控 2.云台控制 3.语音功能 4. 录像管理与回放 5.告警联动 6.多种显示终端呈现 (1)CS客户端 (2)web客户端 (3&#xf…...

java设计小分队01

1.开发流程: 编辑:生成.java文件编译:javac命令,生成.class文件运行:java命令 2.标识符下列那个(不)合法: 除了第一个词小写,其他词首字母大写;java标识符为…...

instant ngp win11 安装笔记

目录 训练保姆级教程: instant ngp安装参考: 编译步骤1 编译步骤2 我把编译成功的库分享到百度网盘了 训练保姆级教程: 英伟达NeRF项目Instant-ngp在Windows下的部署,以及数据集的制作(适合小白的保姆级教学)_colmap2nerf.p…...

Microsoft Word去除页面多余的换行符

大家写论文的时候或者排版的时候可能遇到换行符多出来了导致页面的不美观。像下面这张图一样,虽然latex不会出现这种问题。 处理方式 点击插入然后点击分页 结果展示...

[Javaweb/LayUI/上机考试作业/开源]学生/图书/课程/仓库等管理系统六合一基础功能通用模板

展示 考试要求 给定用户表和六张图书/教师/顾客/仓库....的表(随机给每人抽选),要求实现用户登录注册,异步更新,对物品增删改查,精确/模糊查询等。 环境 tomcat 9 mysql 8 java 17 项目结构 项目类图 写前…...

完善 Golang Gin 框架的静态中间件:Gin-Static

Gin 是 Golang 生态中目前最受用户欢迎和关注的 Web 框架,但是生态中的 Static 中间件使用起来却一直很不顺手。 所以,我顺手改了它,然后把这个改良版开源了。 写在前面 Gin-static 的改良版,我开源在了 soulteary/gin-static&a…...

html websocket的基本使用

html websocket的基本使用 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta http-equiv"X-UA-Compatible" content"IEedge" /><meta name"viewport" content"w…...

大数据 MapReduce是什么?

在Hadoop问世之前&#xff0c;其实已经有了分布式计算&#xff0c;只是那个时候的分布式计算都是专用的系统&#xff0c;只能专门处理某一类计算&#xff0c;比如进行大规模数据的排序。 很显然&#xff0c;这样的系统无法复用到其他的大数据计算场景&#xff0c;每一种应用都…...

ubuntu 如何放开防火墙端口,ubuntu 防火墙操作命令,ubuntu 防火墙全面操作说明

本文介绍了Ubuntu操作系统有关防火墙操作的命令。为了便于说明&#xff0c;请使用 root 用户或具有超级管理员权限的用户登录到 Ubuntu 系统&#xff0c;这样操作命令前就不需要加 sudo了。 一、安装防火墙 如果没有安装防火墙&#xff0c;请用如下命令安装&#xff1a; apt …...

计算机视觉入门与调优

大家好啊&#xff0c;我是董董灿。 在 CSDN 上写文章写了有一段时间了&#xff0c;期间不少小伙伴私信我&#xff0c;咨询如何自学入门AI&#xff0c;或者咨询一些AI算法。 90%的问题我都回复了&#xff0c;但有时确实因为太忙&#xff0c;没顾得过来。 在这个过程中&#x…...

Ndk编译hevc静态库

源码下载: https://hg.videolan.org/x265 然后执行以下脚本: #!/bin/bash# 设置NDK路径&#xff0c;根据你的实际安装路径修改 NDK_PATH/mnt/c/Users/Administrator/ubuntu_dev/ndk/android-ndk-r21e# 设置目标平台和ABI版本&#xff0c;可以根据实际情况修改 aarch64-linux-…...

Linux系统安装MySQL

Linux系统安装MySQL 第一步&#xff1a;下载YUM wget http://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm第二步&#xff1a;安装MySQL的YUM 仓库 rpm -ivh mysql57-community-release-el7-11.noarch.rpm第三步&#xff1a;查看MySQL版本 yum repolist …...

linux go环境安装 swag

下载依赖包 go get -u github.com/swaggo/swag编译 移动到下载的swag包目录,一般在$GOPATH/pkg/mod下 查看 GOPATH echo $GOPATHcd /root/GolangProjects/pkg/mod/github.com/swaggo/swagv1.16.2go install ./cmd/swag/不出意外&#xff0c;$GOPATH/bin下 已经有了swag 初…...

高效分割视频:批量剪辑,轻松提取m3u8视频技巧

在数字媒体时代&#xff0c;视频分割是一项常见的需求。无论是为了编辑、分享还是其他要求&#xff0c;经常要将长视频分割成多个短片。传统的视频分割方法往往需要手动操作&#xff0c;既耗时又容易出错。现在来看云炫AI智剪高效分割视频的方法&#xff0c;批量剪辑并轻松提取…...

自由DIY预约小程序源码系统:适用于任何行业+自由DIY你的界面布局+全新升级的UI+多用户系统 带安装部署教程

随着移动互联网的普及&#xff0c;预约服务逐渐成为人们日常生活的一部分。从家政服务、医疗挂号到汽车保养&#xff0c;预约已经渗透到各个行业。然而&#xff0c;市面上的预约小程序大多功能单一&#xff0c;界面老旧&#xff0c;无法满足商家和用户的个性化需求。今天来给大…...

el-select 多选,选有一个未选择的选项

多选有未选择这个选项后。会出现一个情况&#xff0c;绑定的数据为[‘未选择’,‘cpu1’,‘cpu2’] 进行一个处理&#xff0c;选择&#xff08;未选择&#xff09;就清除&#xff08;其它的选择&#xff09;&#xff0c;选择&#xff08;cpu&#xff09;就清除&#xff08;未选…...

CISSP 第6章: 密码学与对称加密算法

第六章 密码学与对称加密算法 6.1 密码学历史上的里程碑 6.1.1 凯撒密码 简单的将字母表中的每个字母替换成其后的三个字母&#xff0c;是单一字母的替代置换密码 6.1.2 美国内战 美国内战使用词汇替代和置换的复杂组合&#xff0c;从而试图破坏敌人的破译企图 6.1.3 Ultra与…...

《深入理解C++11:C++11新特性解析与应用》笔记八

第八章 融入实际应用 8.1 对齐支持 8.1.1 数据对齐 c可以通过sizeof查询数据的长度&#xff0c;但是没有对对齐方式有关的查询或者设定进行标准化。c11标准定义的alignof函数可以查看数据的对齐方式。 现在的计算机通常会支持许多向量指令&#xff0c;4组8字节的浮点数据&a…...

算法——BFS解决FloodFill算法

什么是FloodFill算法 中文&#xff1a;洪水灌溉。假设这一块4*4的方格是一块土地&#xff0c;有凸起的地方&#xff0c;也有凹陷的地方&#xff08;凹陷的地方用负数表示&#xff09;。此时下大雨发洪水&#xff0c;会把凹陷的地方填满。绿色圈起来的属于一块区域&#xff08;…...

【Linux】常用的基本命令指令②

前言&#xff1a;前面我们学习了Linux的部分指令&#xff0c;今天我们将接着上次的部分继续将Linux剩余的基本指令. &#x1f496; 博主CSDN主页:卫卫卫的个人主页 &#x1f49e; &#x1f449; 专栏分类:Linux的学习 &#x1f448; &#x1f4af;代码仓库:卫卫周大胖的学习日记…...

52、全连接 - 特征与样本空间的对应关系

上一节说到经过全连接层之后,神经网络学习到的特征,会从隐层特征空间逐步映射到样本空间,这主要是由于全连接层可以融合全局的特征。 在经过全连接层之后,在 ResNet50 这个神经网络中会输出1000个特征的得分值,这1000个特征的得分值,便可以对应到图像的分类。 怎么对应…...

Go语言中的包管理工具之Go Vendor的使用

GoLang 中常用的包管理的方式 常用的有三种 Go PathGo VendorGo Modules 关于 Go Vender 1 &#xff09;概述 在2015年的时候&#xff0c;我们的另一个包管理工具Go Vendor就诞生了它诞生于 2015.8.19 &#xff0c;是在Go的 1.5 版本当中引入的&#xff0c;它默认是关闭的我…...

QString设置小数点精度位数

QString设置小数点精度位数 Chapter1 QString设置小数点精度位数Chapter2 Qt中QString.toDouble有效位数6位问题以及数据小数点有效位数的处理问题一&#xff1a;QString.toDouble有效位只有6位问题二:小数点有效位数的问题 Chapter3 qt QString转Double只显示6位数字的问题(精…...

基于Java驾校预约管理系统

基于Java的驾校预约管理系统是一个为驾校提供在线预约服务的系统。该系统利用Java编程语言&#xff0c;采用SSM框架&#xff0c;并使用MySQL数据库进行开发。 这个系统主要有三个角色&#xff1a;用户、教练和管理员。 用户可以注册和登录系统&#xff0c;查看驾校的公告信息…...

C++面向对象高级编程(侯捷)笔记2

侯捷C面向对象高级编程 本文是学习笔记&#xff0c;仅供个人学习使用&#xff0c;如有侵权&#xff0c;请联系删除。 如果你对C面向对象的组合、继承和委托不了解&#xff0c;对什么是拷贝构造、什么是拷贝赋值和析构不清楚&#xff0c;对类设计中的Adapter、pImpl、Template…...

双曲正弦函数(*) 优化麦克劳林公式

#include<stdio.h> #include<math.h> int main() {double x,eps,i3,y,item;scanf("%lf%lf",&x,&eps);yx;itemx;while(fabs(item)>eps){itemitem*x*x/i/(i-1);i2;yitem;}printf("%.6f\n",y);return 0; }...

无监督关键词提取算法:TF-IDF、TextRank、RAKE、YAKE、 keyBERT

TF-IDF TF-IDF是一种经典的基于统计的方法&#xff0c;TF(Term frequency)是指一个单词在一个文档中出现的次数&#xff0c;通常一个单词在一个文档中出现的次数越多说明该词越重要。IDF(Inverse document frequency)是所有文档数比上出现某单词的个数&#xff0c;通常一个单词…...

web3 : blockscout剖析

Blockscout 是第一个功能齐全的开源区块链浏览器,可供任何以太坊虚拟机 (EVM) 链使用。项目方可以下载并使用Blockscout作为其链的浏览器,用户可以轻松验证交易、余额、区块确认、智能合约和其他记录。 目录 Blockscout可以做什么主要特征blockscoutDocker容器组件Postgres 1…...

公司网站是做的谷歌的/百度关键词搜索工具

这次我想分享一下车的话题&#xff0c;非专业汽车评测人员&#xff0c;完全个人喜好。 这次想分享的主题是关于车——十代思域&#xff0c;想必在我朋友圈的朋友已经看过我晒过我的小黑思了&#xff0c;直接上图&#xff1a; 简直帅爆了有木有&#xff0c;自从去年我拿到驾照之…...

ps网站设计素材/黄页网络的推广网站有哪些软件

如何在Android中使用Alarm Manager启动服务&#xff1f;在我的应用程序中&#xff0c;我正在尝试使用警报管理器启动服务。当我点击按钮时&#xff0c;服务应该在我给出的特定时间开始。我的警报管理器代码如下&#xff1a;public void onClick(View view) {if(view m_btnActi…...

网站成功上线报道/公司企业网站建设

作者&#xff1a;朱金灿 来源&#xff1a;blog.csdn.net/clever101 谈一下元旦经历的一次诈骗&#xff0c;我想这还算是一个有趣的故事。 1月2日我到住在怀柔的好友李哥处玩。晚上我和好友肖哥、李哥一块吃饭。我刚喝下一杯啤酒&#xff0c;突然接到一个陌生的电话。我问&…...

php网站开发ppt/百度域名收录提交入口

本来可以很欢乐的&#xff0c;结果由于参与人数众多&#xff0c;服务器过于土豆&#xff0c;硬是把手速场变成网速场。难度cf div3左右。 赛后中了抽奖23333然而只能选T恤&#xff0c;不能选日系短裙&#xff0c;不然就送hry裙子好了 (此处呲牙笑 大模拟我就不补了&#xff0c;…...

怎样建设卡盟网站/网页优化方案

今日通过&#xff1a;13 通过题目编号&#xff1a;1107/1112/1114/1115/1116/1120/1123/1127/1128/1009/1035/1045/1089 任务完成率&#xff1a;75% 预计完成需要时间&#xff1a;2天 预计达到第二名时间&#xff1a;1-2天转载于:https://www.cnblogs.com/wangximing/p/1105562…...

产业互联网平台/南京seo全网营销

Spring对缓存的支持&#xff0c;可以参考这篇文章。 本例基于Spring Boot 2.1.0.RELEASE 整合 Redis&#xff0c;在此基础上增加使用Redis缓存数据。 修改RedisConfig配置类&#xff0c;增加CacheManager的配置&#xff0c;修改后的RedisConfig如下&#xff1a; package com…...