zl程序教程

您现在的位置是:首页 >  Javascript

当前栏目

Https 原理与工作流程及证书链校验

2023-04-18 13:14:34 时间

本文为博主原创,未经允许不得转载: 

  目录  
  

http传输三大风险

  

安全通信原则

   https就是为了解析http上面的三个风险诞生的, 一般我们认为安全的通信需要包括以下四个原则: 机密性完整性身份认证不可否认

 

HTTPS定义

  HTTPS 是以安全为目标的 HTTP 通道,在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性。

HTTPS 在HTTP 的基础下加入SSL,HTTPS 的安全基础是 SSL,因此加密的详细内容就需要 SSL。这个系统提供了身份验证与加密通讯方法。

 

 

TLS/SSL 协议及加密算法

  HTTPS 协议的主要功能基本都依赖于 TLS/SSL 协议,SSL 全称为安全套接层(Secure Sockets Layer),

  TLS/SSL 的功能实现主要依赖于三类基本算法:散列函数 、对称加密和非对称加密,

其利用非对称加密实现身份认证和密钥协商,对称加密算法采用协商的密钥对数据加密,基于散列函数验证信息的完整性

  使用对称密钥的好处是解密的效率比较快,使用非对称密钥的好处是可以使得传输的内容不能被破解,因为就算你拦截到了数据,

但是没有对应的私钥,也是不能破解内容的。就比如说你抢到了一个保险柜,但是没有保险柜的钥匙也不能打开保险柜。

那我们就将对称加密与非对称加密结合起来,充分利用两者各自的优势,在交换密钥环节使用非对称加密方式,之后的建立通信交换报文阶段则使用对称加密方式

  具体做法是:发送密文的一方使用对方的公钥进行加密处理“对称的密钥”,然后对方用自己的私钥解密拿到“对称的密钥”,

这样可以确保交换的密钥是安全的前提下,使用对称加密方式进行通信。所以,HTTPS采用对称加密和非对称加密两者并用的混合加密机制。 

  常用算法

  • 非对称加密算法:RSA,DSA/DSS

  • 对称加密算法:AES,RC4,3DES

  • HASH算法:MD5,SHA1,SHA256

 

https 工作流程

  https流程图如下:
  
  1. client向server发送请求https://baidu.com,然后连接到server的443端口。

  2. 服务端必须要有一套数字证书,可以自己制作,也可以向组织申请。区别就是自己颁发的证书需要客户端验证通过,才可以继续访问,而使用受信任的公司申请的证书则不会弹出提示页面,这套证书其实就是一对公钥和私钥。

  3. 传送证书 这个证书其实就是公钥,只是包含了很多信息,如证书的颁发机构,过期时间、服务端的公钥,第三方证书认证机构(CA)的签名,服务端的域名信息等内容。

  4. 客户端解析证书 这部分工作是由客户端的TLS来完成的,首先会验证公钥是否有效,比如颁发机构,过期时间等等,如果发现异常,则会弹出一个警告框,提示证书存在问题。如果证书没有问题,那么就生成一个随机值(密钥)。然后用证书对该随机值进行加密。

  5. 传送加密信息 这部分传送的是用证书加密后的密钥(随机值),目的就是让服务端得到这个密钥(随机值),以后客户端和服务端的通信就可以通过这个随机值来进行加密解密了。

  6. 服务端加密信息 服务端用私钥解密,得到了客户端传过来的密钥(随机值),然后把内容通过该值进行对称加密

  7. 传输加密后的信息 这部分信息是服务端用密钥(随机值)对称加密后的信息,可以在客户端被还原。

  8. 客户端解密信息 客户端用之前生成的密钥(随机值)解密服务端传过来的信息,于是获取了解密后的内容。

    上述流程中的3,4,5即为 密钥协商交换算法 的过程。密钥交换协商机制是在身份认证的前提下,规避偷窥的风险。通俗的说,即使有攻击这在偷窥客户端与服务器的网络传输,

  客户端依然可以利用密钥协商机制与服务器端协商出一个只有二者可知的用来对于应用层数据进行加密的密钥(也称“会话密钥”)。密钥协商交换算法具体可看这篇文章:

  https://blog.csdn.net/CHYabc123456hh/article/details/108788580

    https 请求的过程中,还可以使用hash算法或签名算法,校验请求或响应的参数是否被篡改。client 端和server约定好的hash算法,对请求体或响应体进行摘要计算,

  在收到请求时,通过以上流程解密得到请求体,再使用hash算法对请求体进行hash计算,如果计算的值与另一端传过来的值相同时,则证明请求体没有被篡改。反之,请求被篡改。

 

HTTPS协议和HTTP协议的区别

  • https协议需要到ca申请证书,一般免费证书很少,需要交费。

  • http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议。

  • http和https使用的是完全不同的连接方式用的端口也不一样,前者是80,后者是443。

  • http的连接很简单,是无状态的 。

  • HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议, 要比http协议安全。

  

CA机构

  CA(Certificate Authority)机构 为证书颁发机构,其颁布的均为首认证可信的证书,在使用过程中浏览器不会弹出不可信错误。

SSL证书可以向CA机构通过付费的方式申请,也可以自己制作。
CA机构颁发的证书价格非常昂贵,而且有效期一般只有一年到三年不等(年数不同,价格也不同),

过期之后还要再次交钱申请,因此一般只有企业才会申请证书。

证书中主要包含:

  • 证书颁发机构:用于寻找链中的下一个验证节点

  • 证书的有效期:比如浏览器要根据这个值来判断证书是否已过期

  • 证书申请信息:比如浏览器要判断改证书是否可用于当前访问的域名

  • 公钥:用于后续和服务端通信的秘钥,这个公钥和当初生成 CSR 时的公钥是一个东西,因为只有它是和服务器的私钥是一对的

  • 签名:用于验证证书内容没有被篡改

在浏览器查看 www.baidu.com 域名的 证书:

 

 通过这种方式可以查看域名对应的证书的版本,签名算法,有效期,颁发者,使用者等等。

 

证书链

  我们使用的证书都是由专门的CA机构颁发,根证书有统一的CA机构颁发,在根证书基础上颁发二级或三级证书具有CA的二级机构进行签发。

 

   csdn 博客用的证书如上,其中DigiCert为顶端根证书,GeoTrust CN RSA CA G1为中间证书, *.csdn.net 为服务器证书,

当你点击对应的证书,会显示颁发者之间的关系,这种关系便形成证书链。如下图所示:

 

   在证书链中,通常分三级结构,根证书,中间证书和服务器实体证书,正确的证书链顺序中服务器实体证书处在最底端,里面包含了些服务器域名,

服务器公钥和签名值等。服务器证书上一级是中间证书,中间证书就是上面提到的由权威CA机构授权的二级机构,可以由它来签发服务器证书。

中间证书可以是由多张证书组合在一起,最上级的是根证书,也就是CA机构,对服务器身份进行校验时,需要验证一整个证书链,

由于浏览器中集成了权威CA机构的根证书,因此主要是校验中间证书和服务器实体证书的签名值是否正确。

  校验服务器身份需要验证整个证书链,从服务器实体证书开始,服务器实体证书的签发者是上一级中间证书的使用者,中间证书的签发者是上一级根证书的使用者。

每一级证书都有签名值,根证书使用自己的根CA公钥验证自己的签名,也用来验证中间证书的签名值,中间证书的公钥用来验证下一级的服务器实体证书签名值,以此构成一条信任链。