当前位置: 首页 > news >正文

详细了解TLS、HTTPS、SSL原理

详细了解TLS、HTTPS、SSL原理


Requests
data treating
Responses
data
浏览器端/客户端
服务器端
MAC界面
  • 客户端会以一定的方法向服务器端发送请求,例如GET(查)、POST(增)、PUT(改)、DELETE(删)等;
  • 客户端发送给服务器端的信息应当包含那些信息,这些信息应当以何种格式进行传输,如Content-TypeContent-LengthUser-Agent等请求头;
  • 服务器端处理完请求后,返回给客户端的状态码有哪些,如1xx2xx等;
  • 规定上述传输方法、格式和标准的协议,被称为超文本协议Hyper Text Transfer Protocol)或HTTP。世界上所有的web服务都实现了http协议。,可以说,http协议是现代互联网发展的基石,它在整个互联网的发展中起着举足轻重的作用;
  • http协议最大的不足就是所有数据都是以明文的方式进行传递的,这将对信息的隐私性和数据完整性产生重大挑战:

    例如:黑客可以截获明文的http协议数据,恶意篡改后发送给接收人,进而套取更多的信息,即所谓【中间人攻击】。

  • 为了解决http协议的安全问题,人们引入了新的机制,即https协议。这里的ssecure/安全之意。https通过加密来提高http协议的安全性

  • 在OSI 7层网络模型或TCP/IP 4层网络模型中,HTTP协议处于最上层的应用层中
    Server
    Client
    Internet
    Internet
    Network Access
    Transport
    Application
    Transport
    Application
    Internet
    Network Access
  • 针对Application层http协议,人们引入了TLS协议的概念作为补充。TLS专门用于对数据进行加密和解密操作
  • TLS协议全称为Transport Layer Security,即传输加密协议。是目前使用最为广泛的网络传输加密协议。与之相对应的还有SSL协议,最早由美国网景公司设计,后来贡献给IETF组织。最后的SSL3.0版本于1996年11月发布,被重命名为 TLS 1.0。这也是最早的TSL版本。目前TLS的版本已经到了TLS 1.3,原来的1.0不再推荐使用。所以,SSL约等于TLS

    事实上,任何基于TCP/IP协议的上层协议或者应用都可以使用TLS进行加密和解密;

  • TLS协议的初步思想是对称加密,即通讯双方根据协商好的算法生成一个唯一的密钥,该秘钥将同时对数据进行加密和解密操作
    ClientServer客户端所支持的TLS版本和加密算法Client Hello从客户端提供的中选出最优TLS版本和加密算法Server Hello接受服务器反馈并生成一段随机字符串(预主密钥)告诉服务器端算法等信息和预主密钥通过加密函数+算法生成一对密钥(会话密钥)通过加密函数+算法生成一对密钥(会话密钥)通讯双方通过会话密钥进行加密对话通讯双方通过会话密钥进行加密对话ClientServer

    对称加密最大的问题是如何保证加密函数+算法和预主密钥在传输的过程中不会被黑客攻击、窃取。

  • 为了解决上述问题,TLS协议后续引入了非对称加密,即保留两种密钥:公钥 或者 私钥:
    1. 私钥用于解密
    2. 公钥用于加密

    这种区分公私密钥的方式被称为PKIpublic key infrastructure)。

    ClientServer生成公钥和私钥将公钥传输给Server通过公钥对要传输的数据进行加密将加密后的数据传输给Client通过私钥对数据进行解密ClientServer

    在上述过程中,即使传输被黑客所截获,但由于黑客没有对应的私钥对数据进行解密,所以无法获取到真正的内容。

    • 值得注意的是,非对称加密是不可逆的,即无法使用公钥进行解密,私钥进行加密;
  • TlS协议 + 对称加密的过程如下:
    ClientServer客户端有所支持的TLS版本和加密算法在服务器端建站之初就生成了公钥和私钥Client Hello从客户端提供的中选出最优TLS版本和加密算法Server Hello发送服务器端的公钥接受服务器反馈生成一段随机字符串(预主密钥),使用接收到的公钥对预主密钥进行加密告诉服务器端经过加密的预主密钥使用预留的私钥解密信息获得预主密钥通过一定的算法将预主密钥转化成会话密钥通过同样的算法将预主密钥转化成会话密钥通讯双方通过会话密钥进行加密对话通讯双方通过会话密钥进行加密对话ClientServer

    但是上述操作还会面临一个问题,就是在信息传输过程中传递的服务器公钥可能会被调包。此时,黑客可以让你使用他提供给你的公钥形成预主密钥。之后黑客拿着你提供的加密信息用他自己的私钥解密获得预祝密钥后和你进行对话了。你可能自始至终不以为是和服务器端对话,其实你是在和黑客对话,消息都被黑客获取了。

  • 为了解决上述的这个问题,TLS协议引入了证书。在上述对话传输中,客户端获得的不再是公钥,而是服务器端的证书
    • 证书,全称为数字证书,即digital certification
    • 其由证书颁发机构(certificate authority)/CA所颁发;
    • 证书是唯一标识一个站点的身份信息
  • 以下介绍证书是如何查看和申请发放的:
    • 以Chrome为例,点击url栏最左侧的设置/锁头标志,再依次点击connection is securecertificate is valid,便会弹出网站的证书信息。
    • 一个证书通常包含以下内容:
      1. issued to:证书的申请者;
      2. issued by:证书的颁发机构,由哪个CA机构颁发的;
      3. validity period:证书的有效起始日期和结束日期;
      4. fingerprint:证书的指纹信息,用于验证证书的合法性;
    • CA是全球性的权威证书签发机构,分布于各个国家中。常见的CA机构有:
      1. digicert;
      2. Let’s Encrypt免费的);
      3. globalSign;
      4. Entrust;
    • 当我们想为网站开启HTTPS服务时,就需要向CA机构申请证书。整个过程有点像申请护照,需要向CA发送证书申请请求文件/CSR(certificate signing request);
    • 一个CSR文件通常包括:
      1. 网站的域名;
      2. 网站的IP地址;
      3. 公司的名称;
      4. 公司的地理位置;
      5. 公司的邮箱地址;
      6. 公钥
    • CA机构接收到CSR文件后会进行信息核实,必要的时候还会引入人工审查。当核实无误后,CA就会向该站点签发一个证书并返回给申请者。申请者接收到CA签发的证书后,将其部署到网站的外部服务中即可(此时证书是在本地的)。

以下介绍证书的工作原理:

  • 每个证书都有一个唯一识别的指纹码,这是为了确保证书的完整性并唯一标识一个证书;
  • 使用证书需要用到Hash计算

    Hash计算

    • 是一种单向加密算法;
    • 任意长度的字符串输入进过哈希算法后都只能得到一串长度相等的字符串/散列值。散列值有两大特性:
      1. 不可逆,无法对一个散列值做逆向操作来获取其原始数据(鸽巢原理);
      2. 唯一性,一个数据经过哈希算法后得到的结果是唯一的。即使是同一输入计算出的散列值也是唯一的;
  • 在生成证书时,CA会分别对证书的内容和公钥进行Hash计算,并将得到的Hash值分别作为证书的指纹附加到证书中,同时说明使用的Hash算法;
  • 服务端在已知算法的情况下,可以使用算法对证书的内容和公钥进行Hash计算,并和附加在本地证书中的指纹作对比。如果完全一致,则说明证书在网络传输的过程中没有被截获或者篡改。目前最常用的hash算法是Hash256
  • 除此以外,还需要检验证书的真实性,即证书真的是由证书所记载的机构所颁发的。此时,我们引入证书签名,通过PKI/公私钥对证书签名进行加密和解密:
    • 证书签名的操作与TLS-加密对称相反(私钥加密,公钥解密),它是CA用自己的私钥对证书进行加密,并将加密结果附加在证书中传回给服务器端;服务器端获取到证书后,会使用CA对应的公钥对其进行解密
    • 如果解密结果与证书内容一致(a+私钥=A=公钥+a),说明解密成功,服务器端使用的公钥和CA加密时使用的私钥是一对密钥;
    • 但是问题又回到了如何保证CA发送到服务器端的公钥是没有被掉包的呢。这就要用到预安装这项技术。
  • 当CA对证书进行签名(加密)时,不仅用到私钥,还会用到根证书。根证书最主要的作用,就是为其他证书签名。CA机构的公钥也被附加在根证书中。每一个操作系统都预安装好世界各地受信任的CA的根证书,并且都会经常维护。当需要验证证书签名时,则直接从系统中找到根证书取出公钥与发送来的公钥进行对比即可;

一个完整的TLS握手的过程

ClientServer本地系统中存有根证书在服务器端建站之初就生成了公钥和私钥TCP SYNTCP SYN + ACKTCP SYNTCP/IP三次握手Client Hello从客户端提供的中选出最优TLS版本和加密算法Server Hello发送证书验证证书的签名和指纹使用系统中的CA公钥从证书中提取出服务器端的公钥生成预主密钥,通过服务器端公钥进行加密传递加密过的预主密钥传递加密函数和算法等信息通过服务器端的私钥解密加密信息获得预主密钥通过加密函数和算法将预主密钥转化成会话密钥通过相同的加密函数和算法将预主密钥转化成会话密钥通讯双方通过会话密钥进行加密对话通讯双方通过会话密钥进行加密对话ClientServer

  • 在大多数语境中,都喜欢把TLS和SSL混为一谈,因为SSL的简称过于深入人心,实际上现在大家使用的已经不是第一版的TLS或者说SSL协议了,现在都是TLS了。
http://www.dtcms.com/a/556830.html

相关文章:

  • 弹性力学| 应力应变关系
  • 网站建设实习收获多平台网页制作
  • BPE(Byte Pair Encoding)详解:从基础原理到现代NLP应用
  • 【Java学习路线| 最佳食用指南 60days】
  • nfs的运用
  • 【企业架构】TOGAF架构标准规范-迁移计划
  • 做网站用asp还是php亚马逊建站服务
  • 数据结构(15)
  • 《算法闯关指南:优选算法--前缀和》--29.和为k的子数组,30.和可被k整除的子数组
  • 如何在GitHub仓库中添加MIT开源许可证
  • 在Linux(deepin-community-25)下安装MongoDB
  • WebView 最佳封装模板(BaseWebActivity + WebViewHelper)
  • 珲春市建设局网站中国设计网字体
  • 杭州英文网站建设杭州微信小程序外包
  • 顺序表vector--------练习题3题解
  • 触发器(Trigger):灵活控制窗口行为
  • mysql数据库自动备份_脚本_配置自动运行_windows下
  • Linux : 进程概念
  • 510-Spring AI Alibaba Graph Stream Node 示例
  • 【11408学习记录】考研英语长难句通关:2018真题精析,每日一句攻克阅读难点!​
  • 做网站买那种服务器龙港哪里有做阿里巴巴网站
  • TXT文件去重工具,一键快速去重复
  • ModelEngine vs Dify vs Coze:AI开发平台横评
  • 开封建站公司图片生成链接的网站
  • C++ STL:list|了解list|相关接口|相关操作
  • 【Java后端】配置属性BeanCreateException异常,使用默认值语法添加空串
  • 指针深入第二弹--字符指针、数组指针、函数指针、函数指针数组、转移表的理解加运用
  • 用红黑数封装实现map,set
  • PsTools 学习笔记(7.8):远程连接选项——连接性、超时、会话与安全基线
  • Java Se—异常