首先服务器需要向数字认证机构(以下简称CA)申请证书,比如现在服务器想发布一个网站www.abc.com(以下简称abc),服务器生成公开密钥算法的一对密钥,比如RSA密钥。服务器会先生成一个证书签名请求文件CSR,其中包括网站域名、RSA的公钥、营业执照等,然后将这个请求文件发送给CA申请证书。CA拿到CSR文件以后,首先会校验域名abc的拥有者与证书申请者的身份。校验完成以后,CA机构使用哈希函数生成一个哈希值H1,然后用自己的密钥(比如ECDSA密钥)的私钥对这个哈希值进行签名得到数字签名,然后将数字签名放在CSR文件后面,这就是最终的证书文件(也就是说 CA证书=服务器信息+数字签名)。
浏览器向服务器端请求abc网站时,服务器收到请求后,会将证书文件与RSA密钥的公钥一块发给浏览器(注意证书文件里面是包括RSA密钥的公钥的)。浏览器收到证书文件,由于浏览器内置了CA机构的根证书,根证书中包含了ECDSA密钥的公钥,所以浏览器就能用公钥对数字签名进行解密,得到哈希值H1,然后再用同样的哈希方法对服务器信息进行哈希得到哈希值H2,通过比对H1和H2就能发现证书是否被篡改。
HTTPS的连接过程,除了TCP的三次握手以外,还增加了四次通信:
第一次:⾸先,由浏览器向服务器发起加密通信请求,在这⼀步,客户端主要向服务器发送以下信息:1.客户端⽀持的 SSL/TLS 协议版本,如 TLS 1.2 版本。2.客户端⽣产的随机数( Client Random ),后⾯⽤于⽣产「会话秘钥」。3.客户端⽀持的密码套件列表,如 RSA 加密算法。
第二次:服务器收到客户端请求后,向客户端发出响应。服务器回应的内容有如下内容:1.确认 SSL/ TLS 协议版本,如果浏览器不⽀持,则关闭加密通信。2.服务器⽣产的随机数( Server Random ),后⾯⽤于⽣产「会话秘钥」。3.确认的密码套件列表,如 RSA 加密算法。4. 服务器的数字证书。
第三次:客户端收到服务器的证书之后,⾸先经过上述验证过程,确认服务器的数字证书的真实性以及验证证书是不是abc这个网站发来的。如果证书没有问题,客户端会从数字证书中取出服务器的公钥,然后使⽤它加密报⽂,向服务器发送如下信息:1.⼀个随机数( pre-master key ),该随机数会被服务器公钥加密。2.加密通信算法改变通知,表示随后的信息都将⽤「会话秘钥」加密通信。3.客户端握⼿结束通知,表示客户端的握⼿阶段已经结束。这⼀项同时把之前所有内容的发⽣的数据做个摘要,⽤来供服务端校验。
注意: 由于上面的验证机制,证书在传输过程中是无法被中间人进行修改的,如果中间人对证书进行修改,那么浏览器在对数字签名进行解密后就会出现两个哈希值匹配错误的情况。由于随机数用服务器的公钥进行了加密,中间人没有服务器的私钥,也无法对其进行解密。
到这里,服务器和客户端就同时有三个随机数(两个明文传输,一个用服务器公钥加密传输),接着就⽤双⽅协商的加密算法,各⾃⽣成本次通信的「会话秘钥」,由于中间人无法得到最后一个随机数,所以无法生成对应的「会话秘钥」。
第四次:服务器收到客户端加密后的第三个随机数( pre-master key )之后,用私钥解密拿到随机数,服务器通过协商的加密算法,计算出本次通信的「会话秘钥」。然后,向客户端发⽣最后的信息:1.加密通信算法改变通知,表示随后的信息都将⽤「会话秘钥」加密通信。2.服务器握⼿结束通知,表示服务器的握⼿阶段已经结束。同时把之前所有内容发⽣的数据做个摘要,⽤来供客户端校验。
⾄此,整个 SSL/TLS 的握⼿阶段全部结束。接下来,客户端与服务器进⼊加密通信,就完全是使⽤普通的 HTTP协议,只不过⽤「会话秘钥」加密内容。
页面切片间跳转页面间跳转Ability生命周期
网页可以使用很多小图标,React Native 怎么使用图标呢,网上也有人使用过,总结下http://www.cnblogs.com/moxiaoyan33/p/5482024.html 参考这个基本上会成功 ICONS是可以直接使用图片名, 就能加载图片的三方,使用很方便, 你不需要在工程文件夹里塞各种图片, 节省很多空间,下面就来看看怎么使用吧!首先打开terminal进入到我们的工程文
内容导视:以 HotSpot 虚拟机为例,Java 对象在堆中如何分配内存、如何访问此对象?讨论的对象限于普通 Java 对象,不包括数组和 Class 对象等。当 Java 虚拟机遇到一条字节码指令 时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析和初始化过。如果没有,那必须先执行相应的类加载过程。在类加载检查通过后,接下来虚拟机将为新生对象分配内存。对象所需内存的大小在类加载完成后便可完全确定。为对象分配空间的任务实际上便等同于把一块
控制台报错### Error querying database. Cause: java.sql.SQLSyntaxErrorException: Unknown column 'user_name' in 'field list'### The error may exist in panfeng/mapper/StudentMapper.java (best gu...
控制台报错### Error querying database. Cause: java.sql.SQLSyntaxErrorException: Unknown column 'user_name' in 'field list'### The error may exist in panfeng/mapper/StudentMapper.java (best guess)### The e...
ARM STM32 各种缩写和全称
公司如果分工比较明细的话,应该有前端,后端。前端又有负责出psd图的以及将psd图切成html页面,切页面就是把psd图切成我们网站可以直接应用的html页面,然后后端开发人员 可以按照html页面和需求文档直接开发。下边直接将需要的软件和怎么切页面。所需软件为Hbuilder,就是html5开发ide,以及photoshop。切页面需要会html,css,javascript以及photos
__initdata用法例子:static struct init_tags {struct tag_header hdr1;struct tag_core core;struct tag_header hdr2;struct tag_mem32 mem;struct tag_header hdr3;} init_tags __initdata = {{ ta
名词介绍:数据库:数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,它产生 于距今六十多年前,随着信息技术和市场的发展,特别是二十世纪九十年代以 后,数据管理不再仅仅是存储和管理数据,而转变成用户所需要的各种数据管 理的方式。C D B:CDB全称为Container Database,中文翻译为容器数据库。P D B:PDB全称为Pluggable Database,中文...
import java.util.*;class Rect{ double l; double h; double z; public Rect(double l,double h,double z) { this.l=l; this.h=h; this.z=z; } double length() { return 2*(l+h); } double area...
python 的优点之一是交互式解释器;事实上,Ipython集成交互式python的诸多优点。ipython具有卓越的python shell,其性能远远优于标准python 的shell!!! 之前我只知道ipython可以tab 补全、查module的用法、dir、help、使用了这么久,现在终于知道了点皮毛,下面介绍如何使用ipytho...
draw.io快捷键ctrl + shift + L切换图层窗口,弹出图层窗口。ctrl + shift + o切换缩略图窗口ctrl + shift +pP切换格式窗格ctrl + shift + M编辑顶点的大小、位置数据ctrl +光标调整单元格大小(单位:pt)或选择页面。ctrl + shift +光标光标:调整单元格大小(单位:网格大小)。alt + shift +光标光标:克隆并连接。(演示如下:这个方面比PS强太多)