首页 > 其他分享 >图解HTTPS建立过程

图解HTTPS建立过程

时间:2022-12-19 10:32:15浏览次数:64  
标签:CA pub 图中 HTTPS hack 服务器 图解 过程 客户端

阅读目录

  • ​​准备工作(对应图中prepare1234)​​
  • ​​发起链接​​
  • ​​最后​​

关于网络安全加密的介绍可以看之前文章:

​1. 网络安全——数据的加密与签名,RSA介绍​​​​2. Base64编码、MD5、SHA1-SHA512、HMAC(SHA1-SHA512)​​​​3. When I see you again(DES、AES、RSA、Base64、MD5加密原理介绍,代码实现)​

HTTPS建立过程相当复杂,下图为示意图,可以有整体认识,一般我们编程知道这些已足够。

图解HTTPS建立过程_服务器

 

 

 

如果你想仿照HTTPS实现类似加密,可以阅读下具体过程,作为参照

 

准备工作(对应图中prepare1234)

可以看到,在客户端向服务器发起请求前,还有一些准备工作要做,或者说是有一些工作已经做好了。

  • 从CA证书颁发机构,获取数字证书。
  • 服务器:生成一对公私钥S.pub,S.pri,私钥自己保留,用于解密和签名,不能外泄。将公钥S.pub,身份信息,传给CA(Certificate Authority)机构;
  • CA机构:也有公私钥C.pub,C.pri;由S.pub,身份信息另外附加CA签名生成数字证书(签名使用C.pri进行签名)
  • 将数字证书颁发给申请者(服务器)
  • 客户端(比如我们经常使用的浏览器),为了安全性,会内置一份CA根证书,它包含C.pri,用于对数字证书验证

发起链接

https使用的是443端口,而http使用的是80端口

TCP端口号是一个2字节的整型,处于TCP报文段的前四个字节(2字节源端口号,2字节目的端口号)。

很明显范围是0~65535。其中0~1023具有特殊意义,已经被绑定,比如上面说的443,80,还有ftp的21端口。从1024~49151也具有特殊含义,但是还没有被用完,比如8080端口重定向。剩下的我们就可以随便使用,自定义了。

其实之前在嵌入式开发中,没有连接外网,也没有使用浏览器等等这些。所以端口完全自定义随便用,不用担心冲突:)。

下面的过程为具体详细一点的过程,如果不想看,可以完全只看示意图即可,对我们平时开发用处并不大。或者你在用wireshark类似的抓包工具时看的抓狂不认识,可以看看(反正我用Charles抓包):

1 客户端发起请求(对应图中1)

同样需要三次握手,建立TCP连接(毫无疑问HTTPS也是基于TCP的)

2 客户端发送Client Hello包(对应图中2)

  • 随机数

里面有1970年1月1日到现在的秒数,后面还有一个客户端发来的随机数Client.random

  • Session ID

如果客户端与服务器费尽周折建立了一个HTTPS链接,刚建完就断了,也太可惜,所以用Session ID将其保存,如果下次再来可以直接使用之前的链接进行对话(对称密钥)。

  • 密文族

告诉服务器,自己支持的加密算法种类

  • Server_name

3 Server Hello(对应图中2)

  • 随机数:对应服务器时间,服务器sever.random
  • Seesion ID,如果客户端发给服务器的session ID在服务端有缓存,服务端会尝试使用这个session;否则服务器会启用新的并返回给客户端;
  • 服务器挑选一个密文族

4 Certificate(对应图中2)

服务器终于发来我们想要的数字证书,包含了:签发机构、过期时间、主题名称、公共密钥信息、指纹信息等等

图解HTTPS建立过程_客户端_02

 

 

5 Server Hello Done(对应图中2)

服务器发送结束

6 客户端验证(对应图中3)

客户端从内置的CA根证书获取C.pub,对服务器发送来的数字证书进行验签,如果一致,说明证书是CA颁发的(前提是C.pub是真实的,确实是CA机构的公钥)。然后看看证书是否过期,域名是否匹配

7 生成对称密钥(对应图中4、5、6)

客户端根据之前的:​​Client.random + sever.random + pre-master​​生成对称密钥

经过S.pub加密发送给服务器,之后即可通过对称密钥进行通讯。(就是之前我们熟悉的http)

最后

在整个过程中,一共涉及2对公私密钥对,一对由服务器产生,主要用于加密,一对由CA产生,主要用于签名。

为什么要多一个CA呢?

假设没有CA,那么如果服务器返回的包含公钥的包被hack截取,然后hack也生成一对公私钥,他将自己的公钥发给客户端。hack得到客户端数据后,解密,然后再通过服务器的公钥加密发给服务器,这样数据就被hack获取。

有了CA后,客户端根据内置的CA根证书,很容易识别出hack的公钥不合法,或者说hack的证书不合法。


标题中的新版指:版本 56.0.2924.87 (64-bit)

图解HTTPS建立过程_服务器_03

原来的版本可以点击绿色的小锁进入查看页面,新版的已经改了

新版的进入方式为F12-->Security选项卡(找不到的点右箭头>>),然后点击View certificate

图解HTTPS建立过程_数字证书_04

 

 



标签:CA,pub,图中,HTTPS,hack,服务器,图解,过程,客户端
From: https://blog.51cto.com/u_15147537/5951481

相关文章

  • (原创亲测终极解决方法)场景报错Error -27492: "HttpSendRequest" failed, Windows erro
    网上的解决方法,总是千篇一律,能解决还好,就怕不找原因,转来转去还解决不了问题,我也对这个网友很无奈,即然不能解决,你转载他干嘛?不想看罗说的直接去下面看我的解决方法。网上解决......
  • 一些有用的SQL Server语句和存储过程
    --======================================================23--列出SQLSERVER所有表,字段名,主键,类型,长度,小数位数等信息45--在查询分析器里运......
  • SQL Server 存储过程的分页方案比拼
    SQLServer存储过程的分页,这个问题已经讨论过几年了,很多朋友在问我,所以在此发表一下我的观点2建立表:34CREATETABLE[TestTable](5[ID][......
  • [过程]《关于我对宝可梦很感兴趣,作为新手想写一个宝可梦检索这件事》2
    这次是在上次的基础上又新写的两个类,能力有限就直接放代码了这串代码就是一个简单的运算,他的作用就像名字一样“level”是用来计算你的宝可梦升级所需经验的经验importj......
  • 服务器集群使用过程中遇到的一些问题
    自己参与开发的项目,在测试环境只有一台服务器,每次部署的时候只需要部署单台服务器。可是生产环境则不一样,生产环境部署了10台左右的应用服务,跑起来的效果和单台服务......
  • 字节码加载过程
    Loading->Linking->Initialization加载-->链接-->初始化1.加载通过一个类的全限定名获取定义此类的二进制字节流将这个字节流所代表的静态存储结构转化成方......
  • Verilog的过程赋值
    1、关键词:阻塞赋值,非阻塞赋值,并行过程性赋值是在initial或always语句块里的赋值,赋值对象是寄存器、整数、实数等类型。这些变量在被赋值后,其值将保持不变,直到重新被赋予......
  • 网站打算使用 https 协议
    Https协议加密更安全,我打算让网站支持https。不过当前使用的PortableAllegroServe好像对https支持得不太好,而另一个LispWeb服务器软件Hunchentoot也是支持htt......
  • CitectVBA定制过程分析器3:删除特定的板
    这是我在新浪博客发表过的一篇学习笔记,在这里也发一次CitectVBA定制过程分析器3:删除特定的板_来自金沙江的小鱼_新浪博客(sina.com.cn)如果想使用CitectVBA删除特定序号......
  • CitectVBA定制过程分析器4:清空特定板下的趋势笔,但不删除板
    这是我在新浪博客发表过的一篇学习笔记,在这里也发一次CitectVBA定制过程分析器4:清空特定板下的趋势笔,但不删除板_来自金沙江的小鱼_新浪博客(sina.com.cn)接着学习练习......