当前位置: 首页 > 编程日记 > 正文

http和https的区别 与 SSL/TLS协议运行机制的概述

http和https的区别 与 SSL/TLS协议运行机制的概述

参考1

1 http 是不使用的SSL/TSL的通信通道

  • 窃听风险:第三方获取通信内容
  • 篡改风险:修改通信内容
  • 冒充风险:冒充他人身份参与通信

2 SSL/TSL 协议应运而生

客户端先向服务器端索要公钥,然后用公钥加密信息,服务器收到密文后,用自己的私钥解密。

  • 如何保证公钥不被篡改 ?

    解决方法:将公钥放在数字证书中。只要证书是可信的,公钥就是可信的。

  • 公钥加密计算量太大,减少消耗时间

    每一次对话(session),客户端和服务器端都生成一个"对话密钥"(session key),用它来加密信息。由于"对话密钥"是对称加密,所以运算速度非常快,而服务器公钥只用于加密"对话密钥"本身,这样就减少了加密运算的消耗时间。

3 https 握手的流程

3.1 客户端发出请求,向服务端提供以下信息

  • 1 支持协议版本 比如TLS 1.0版。
  • 2 客户端生成的随机数,用于生成对话秘钥
  • 3 支持的加密方法
  • 4 支持的压缩方法

3.2 服务器的回应

  • 1 确认使用的加密通信协议版本,比如TLS 1.0版本
  • 2 一个服务器生成的随机数,稍后用于生成"对话密钥"
  • 3 确认使用的加密方法,比如RSA公钥加密
  • 4 服务器证书

3.3 客户端收到服务端之后的响应 。

首先验证服务器证书。如果证书不是可信机构颁布、或者证书中的域名与实际域名不一致、或者证书已经过期,就会向访问者显示一个警告,由其选择是否还要继续通信。

如果证书没有问题,客户端就会从证书中取出服务器的公钥。然后,向服务器发送下面三项信息。

  • 1 一个随机数。该随机数用服务器公钥加密,防止被窃听。
  • 2 编码改变通知,表示随后的信息都将用双方商定的加密方法和密钥发送。
  • 3 客户端握手结束通知,表示客户端的握手阶段已经结束。这一项同时也是前面发送的所有内容的hash值,用来供服务器校验。

3.4 服务器最后的响应

  • 1 编码改变通知,表示随后的信息都将用双方商定的加密方法和密钥发送。
  • 2 服务器握手结束通知,表示服务器的握手阶段已经结束。这一项同时也是前面发送的所有内容的hash值,用来供客户端校验。

4 为什么要三个秘钥?

不管是客户端还是服务器,都需要随机数,这样生成的密钥才不会每次都一样。由于SSL协议中证书是静态的,因此十分有必要引入一种随机因素来保证协商出来的密钥的随机性,如果随机数不随机,那么秘钥可能被猜出来,可是是三个伪随机就十分接近随机了。

5 所以归纳来说就是三个步骤,整个过程是采用对称+非对称的加密算法

1 客户端向服务器端索要并验证公钥。

2 双方协商生成"对话密钥"

3 双方采用"对话密钥"进行加密通信。

6 关于CA证书

该证书包含了公钥等信息,一般是由服务器发给客户端,接收方通过验证这个证书是不是由信赖的CA签发,或者与本地的证书相对比,来判断证书是否可信;假如需要双向验证,则服务器和客户端都需要发送数字证书给对方验证。

相关文章:

Babel 相关资料

Babel online editorBabel Plugin Handbookbabeljs usage options转载于:https://www.cnblogs.com/skating/p/6125227.html

php中this,self,parent三个关键字

phpfunctionclass语言cthis,self,parent三个关键字从字面上比较好理解,分别是指这、自己、父亲。this是指向当前对象的指针(姑且用C里面的指针来看吧) self是指向当前类的指针 parent是指向父类的指针(我 们这里频繁使用指针来描述,是因为没有更好的语言来表达)根据…

大量数据转移_大量数据

大量数据转移by BerkeleyTrue由BerkeleyTrue 大量数据 (A Flood of Data) Free Code Camp’s data has been doubling each month, thanks to a flood of highly-active campers. This rising tide of data has exposed several weaknesses in our codebase.由于大量活跃的露营…

约瑟夫问题总结

题解在代码里~ #include <iostream> #include <iomanip> #include <list> using namespace std;int main() {int n, k, f[100];n 12; cin>>k;//链表做法,复杂度O(n*k)list <int> L;for(int i 1; i < n; i) f[i] i, L.push_back(i);list<…

iOS中的死循环

关于死循环 自己方法里面调用自己 在 vc 中的 viewDidLoad 方法中调用 [self viewDidLoad] 会导致程序崩溃。 原因是&#xff1a; 内存溢出。 函数调用栈&#xff0c; 函数调用的时候&#xff0c;sp 栈顶指针寄存器减对应的内存空间&#xff0c;栈内存开启对应的内存空间&…

机器学习算法基础知识

在我们了解了需要解决的机器学习问题的类型之后&#xff0c;我们可以开始考虑搜集来的数据的类型以及我们可以尝试的机器学习算法。在这个帖子里&#xff0c;我们会介绍一遍最流行的机器学习算法。通过浏览主要的算法来大致了解可以利用的方法是很有帮助的。 可利用的算法非常之…

javascript_JavaScript疲劳疲劳

javascript“The Universe is under no obligation to make sense to you.” — Neil deGrasse Tyson“宇宙没有义务对您有意义。” —尼尔德格拉斯泰森 Yes, JavaScript development is complicated.是的&#xff0c;JavaScript开发很复杂。 Yes, it will continue to get mo…

TCP/IP基础概念及通信过程举例

TCP/IP基础概念及通信过程举例 出现 上个世纪60年代&#xff0c;由于中央集中式网络的容灾性较弱&#xff0c;以美国国防部为中心的一家组织研究出分组交换网络。后来为了验证分组交换技术的实用性&#xff0c;ARPANET出现了&#xff0c;并且在3年内逐渐发展&#xff0c;由4个节…

iOS 利用dSYM定位crash

What is dSYM &#xff1f; xCode 的每一次编译都会生成一个dsym文件&#xff0c;在其内部存储了16进制函数地址的映射。 在App实际执行的二进制文件中&#xff0c;是通过地址来调用方法&#xff0c;所以在App Crash 的时候&#xff0c;第三方工具会抓到函数崩溃调用栈。 通过…

OCP-052 053部分答案解析

OCP~052 9. GRANT ANY OBJECT PRIVILEGE(授予任何对象权限)&#xff1a;允许被授权人将其本身不拥有的对象的对象权限授予他人&#xff0c;但不能授予自己。 10. ENABLE VALIDATE 无法输入违反约束的行&#xff0c;而且表中的所有行都符合约束 DISABLE NOVALIDATE 可以输入任何…

您的用户界面是您产品不会因心灵感应而谦卑的补偿

by Morten Just由Morten Just 您的用户界面是您产品不会因心灵感应而谦卑的补偿 (Your UI is your product’s humble compensation for not being telepathic) 拿一些产品&#xff0c;然后继续问“这是要补偿什么&#xff1f;” 最终您将得到相同的答案。 这个答案可能就是为…

9、 Struts2验证(声明式验证、自定义验证器)

1. 什么是Struts2 验证器 一个健壮的 web 应用程序必须确保用户输入是合法、有效的.Struts2 的输入验证 基于 XWork Validation Framework 的声明式验证&#xff1a;Struts2 提供了一些基于 XWork Validation Framework 的内建验证程序. 使用这些验证程序不需要编程, 只要在一个…

java中使用队列:java.util.Queue

在java5中新添加了java.util.Queue接口&#xff0c;用以支持队列的常见操作。该接口扩展了java.util.Collection接口。Queue使用时要尽量避免Collection的add()和remove()方法&#xff0c;而是要使用offer()来添加元素&#xff0c;使用poll()来获取并移出元素。它们的优点是通过…

xCode BuildSetting 设置

一 编译选项设置 1 Optimization Level 编译器的优化级别 编译策略是对代码编译过程的优化,优化后的代码效率比较高&#xff0c;但是可读性比较差&#xff0c;且编译时间更长。 release模式设置为Fastest, Smallest[-Os] Debug模式设置为None 设置参数None编译器不会尝试优…

react绑定this_React绑定模式:处理“ this”的5种方法

react绑定thisJavaScript’s this keyword behavior has confused developers for ages.JavaScript的this关键字行为使开发人员困惑了很长时间。 There are at least five ways to handle the this context in React. Let’s consider the merits of each approach.在React中至…

php 文件限速下载代码

<?php include("DBDA.class.php"); $db new DBDA(); $bs $_SERVER["QUERY_STRING"]; //获取由提交界面传过来的参数 $bss substr($bs,3); //截取 后面的值$sql "select video from shangpin where id{$bss}"; //获取视频文件路径 $s…

【Java】Linux下安装配置Oracle JDK 1.7版本

1 环境 Vmware虚拟机中的Ubuntu 12.04 32位系统 2具体安装步骤 ①下载最新的jdk包 注意jdk区分32位版本和64位版本&#xff0c;要与Ubuntu兼容才行 下载地址 http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html ②创建一个目录&#xff0c;…

Swift 换肤方案的实现使用SwiftTheme框架

SwiftTheme 框架进行换肤 本地创建多个plist文件 设置不同图片颜色数组 飞机票 demo Foundationimport SwiftTheme// 创建一个枚举类型进行换肤 enum ChangeTheme:Int {case theme1 0;case theme2 1;case theme3 2;// 创建一个静态方法去换肤 去加载本地的plist文件stati…

linux生日_代码简介:让我们用25个Linux事实来庆祝Linux的25岁生日。

linux生日Here are three stories we published this week that are worth your time:这是我们本周发布的三个值得您关注的故事&#xff1a; Linux is 25. Yay! Let’s celebrate with 25 stunning facts about Linux: 6 minute read Linux是25。是的&#xff01; 让我们用有关…

网页中;window.onerror=function(){return!0};

在浏览网页的时候发现一段&#xff1a;window.οnerrοrfunction(){return!0}; 于是就顺手点了搜索&#xff0c;发现是被 adsafe关闭了 。 把adsafe退出就能显示了。 转载于:https://www.cnblogs.com/Tiramisu001/p/6136931.html

xib 拖关联控件的时候报Could not insert new outlet connection错误

~/Library/Developer/XCode/DerivedData 目录中删除对应的项目文件 重新打开工程即可

hdu 4901

计数dp 做不出来真是惭愧。。。 #include <cstdio> #include <cstdlib> #include <cmath> #include <stack> #include <vector> #include <sstream> #include <cstring> #include <string> #include <map> #include <…

初创企业股权架构_初创企业如何以每月不到200美元的价格利用生产级基础架构...

初创企业股权架构Before you can launch a new service, you need infrastructure. You want reliability, scalability, and many other -ilities. But you don’t want to break the bank.在启动新服务之前&#xff0c;您需要基础架构。 您需要可靠性&#xff0c;可伸缩性和许…

git review devops过程

自己搭建的devops环境是gitlab/gerrit/jenkins 1. 首先自己checkout一个自己的代码分支&#xff0c;一般不要在master上做直接修改 2. 修改后git add file, git commit 3. git review 4. jenkins自动部署测试 5. 人工review代码&#xff0c;如果可以就提交并merge&#xff0c;…

swift判断iPhone 各种型号

// iPhoneXR let iPhoneXR:Bool __CGSizeEqualToSize(CGSize(width: 828, height: 1792), UIScreen.main.currentMode?.size ?? CGSize(width: 0, height: 0)); // iPhoneX let iPhoneX:Bool __CGSizeEqualToSize(CGSize(width: 1125, height: 2436), UIScreen.main.curr…

轻有力读后感ppt_如果您希望招聘人员认真对待您,请建立强有力的个人叙述。...

轻有力读后感pptby Garreth Dottin通过Garreth Dottin 如果您希望招聘人员认真对待您&#xff0c;请建立强有力的个人叙述。 (If you want recruiters to take you seriously, build a strong personal narrative.) We’ve all been there. Hunched over a desk. Scrolling th…

每天一个linux命令(10):cat 命令

cat命令的用途是连接文件或标准输入并打印。这个命令常用来显示文件内容&#xff0c;或者将几个文件连接起来显示&#xff0c;或者从标准输入读取内容并显示&#xff0c;它常与重定向符号配合使用。 1&#xff0e;命令格式&#xff1a; cat [选项] [文件]... 2&#xff0e;命令…

Swift 中使用Alamofire 免证书的设置

let manager SessionManager.defaultmanager.delegate.sessionDidReceiveChallenge {session,challenge inreturn (URLSession.AuthChallengeDisposition.useCredential,URLCredential(trust:challenge.protectionSpace.serverTrust!))}

“System.Data.OracleClient.OracleConnection”已过时

处理办法&#xff1a; 在oracle 安装目录下 找到 Oracle.DataAccess.dll添加引用&#xff0c;然后 using Oracle.DataAccess.Client;其他的都不用动&#xff0c;即可。连接字符串中 如有 用的是 userxxx 就改成user idxxx把原来 Using 的System.Data.OracleClient去掉即可。 --…

我开发的代码,如何申请版权_代码简介:我花了3个月时间申请开发人员职位。 这是我学到的。...

我开发的代码,如何申请版权Here are three stories we published this week that are worth your time:这是我们本周发布的三个值得您关注的故事&#xff1a; I spent 3 months applying to jobs after a coding bootcamp. Here’s what I learned: 5 minute read 编码训练营结…