计算机网络-HTTPS通信过程

Https 的通信过程

一、基础知识点:

1.1 什么是数字签名?

​ 信息传输的途中,我们的信息很有可能被第三方劫持篡改,所以我们需要保证信息的完整性,通用方法是使用散列算法如SHA1,MD5将传输内容hash一次获得hash值,即摘要

发送方 将自己要发送的内容通过摘要算法生成内容的数字签名附在要发送的内容下方,然后将要发送的内容和通过秘钥加密后的数字签名通过网络传输发送给接收方,接收方 接收到信息后,通过原来协商好的摘要算法对发送方的内容也进行一次hash运算,将自己得到的数字签名和解密后的发送方给的数字签名进行比较,如果数字签名不同,证明内容被第三方修改过,不可信。

1.2 什么是CA机构 ?

​ CA(Certificate Authority)证书颁发机构,即颁发数字证书的机构。是负责发放和管理数字证书的权威机构,并作为电子商务交易中受信任的第三方,承担公钥体系中公钥的合法性检验的责任。【百度百科】

​ CA中心为每个使用公开密钥的用户发放一个数字证书,SSL证书就是CA机构发行的数字证书之一,因为带有CA 机构数字签名的证书无法被攻击者篡改或伪造,所以SSL证书向所有的访问者保证部署了SSL证书的网站是合法可查的(伪造的证书不会在信任链上,所以是不可查的)。

1.3 什么是CA 证书?

​ 顾名思义,CA 证书就是CA 机构颁发的证书。在通信的过程中,我们首先要获得服务端的公钥(后面会解释为什么要获取公钥),但我们要怎么判断这个从对端传过来的公钥是正确可信的呢? 这就要靠一个受得我们浏览器信任的CA 机构认证的证书,那什么是浏览器信任的证书呢?所谓信任,就是浏览器已经内置了受信任的根证书(IE和Chrome是通过内置在Windows系统中的TrustStore来管理根证书,而Firefox则是内置在自己的浏中),访问网站时,浏览器会通过内置证书判断该网站的证书是否受根信任的机构颁发及其有效性,从而判断公钥的正确性。

证书包含的部分内容:

参考自: https://blog.csdn.net/lk2684753/article/details/100160856

  • 版本号(Version Number):规范的版本号,目前为版本3,值为0x2;
  • 序列号(Serial Number):由CA维护的为它所发的每个证书分配的一的列号,用来追踪和撤销证书。只要拥有签发者信息和序列号,就可以唯一标识一个证书,最大不能过20个字节;
  • 签名算法(Signature Algorithm):数字签名所采用的算法
  • 颁发者(Issuer):发证书单位的标识信息,如 ” C=CN,ST=Beijing, L=Beijing, O=org.example.com,CN=ca.org。example.com ”;
  • 有效期(Validity): 证书的有效期很,包括起止时间。
  • 主体(Subject) : 证书拥有者的标识信息(Distinguished Name),如:" C=CN,ST=Beijing, L=Beijing, CN=person.org.example.com”;
  • 主体的公钥信息(SubJect Public Key Info):所保护的公钥相关的信息:
    • 公钥算法 (Public Key Algorithm)公钥采用的算法;
    • 主体公钥(Subject Unique Identifier):公钥的内容。
  • 颁发者唯一号(Issuer Unique Identifier):代表颁发者的唯一信息,仅2、3版本支持,可选;
  • 主体唯一号(Subject Unique Identifier):代表拥有证书实体的唯一信息,仅2,3版本支持,可选:
  • 扩展(Extensions,可选): 可选的一些扩展。

此外,证书的颁发者还需要对证书内容利用自己的私钥添加签名, 以防止别人对证书的内容进行篡改。

1.4 对称加密和非对称加密:

  • 对称加密:

    即加密的密钥和解密的密钥相同,对称加密只有一个秘钥,作为私钥,常见加密算法有DES,AES,3DES等等

  • 非对称加密:

    非对称加密将密钥分为公钥和私钥,公钥可以公开,私钥需要保密,客户端公钥加密的数据,服务端可以通过私钥来解密,常见加密算法有DSA,RSA等等

二、Https具体的通信过程

2.1 Https单向通信过程图:

在这里插入图片描述

2.2 Https单向通信过程阐述:

  1. 客户端发出https请求,请求服务端建立SSL连接,请求包含SSL协议版本号、加密算法种类、随机数等信息;

  2. 服务端收到https请求,给客户端返回SSL协议版本号、加密算法种类、随机数等信息,同时也返回服务器端的证书;

  3. 客户端验证公钥,不通过验证则发出警告,通过验证则产生一个随机的客户端私钥;

    验证内容包括:

    • 发行服务器证书的CA是否可靠;

    • 服务端的证书是否过期;

    • 返回的公钥是否能正确解开返回证书中的数字签名;

    • 服务器证书上的域名是否和当前服务器的域名相匹配;

  4. 客户端发送自己的支持的方案给服务端进行协商;

  5. 服务端在客户端提供的加密方案中选择加密级别比较高的方案

  6. 服务端将自己选择的方案发送给客户端,此处不用加密,即明文信息;

  7. 客户端收到服务端的方案后,产生随机码,用作通信过程中对称加密的密钥,使用服务端的公钥将客户端自己的密钥进行加密,返回给服务端;

  8. 服务端接收到后用自己的私钥进行解密,获取客户端的对称密钥;

  9. 服务端和客户端使用客户端的对称密钥进行加密通信。

注: 此次通信过程中,非对称密钥主要用于加解密客户端的对称密钥,数据通信交互主要用的是客户端的对称密钥。


若文中存在错误,欢迎斧正。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值