前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >SSL及其加密通信过程「建议收藏」

SSL及其加密通信过程「建议收藏」

作者头像
全栈程序员站长
发布于 2022-09-07 06:50:09
发布于 2022-09-07 06:50:09
3.9K10
代码可运行
举报
运行总次数:0
代码可运行

大家好,又见面了,我是你们的朋友全栈君。

SSL及其加密通信过程

一、什么是SSL

SSL英文全称Secure Socket Layer,安全套接层,是一种为网络通信提供安全以及数据完整性的安全协议,它在传输层对网络进行加密。它主要是分为两层:

  • SSL记录协议:为高层协议提供安全封装、压缩、加密等基本功能
  • SSL握手协议:用于在数据传输开始前进行通信双方的身份验证、加密算法的协商、交换密钥 OpenSSL是SSL的开源实现,它是作为密码学的安全开发包,提供相当强大全面的功能,囊括了主要的密码算法、常用的密钥和证书封装管理功能以及SSL协议,并提供了丰富的应用程序供测试或其它目的使用。它一共提供了8中对称加密算法和4中非对称加密算法。

二、HTTPS和SSL

HTTP(Hyper TEXT Transfer Protocol超文本传输协议)是目前互联网上应用最为广泛的一种网络协议,用于在Web浏览器和网站服务器之间传递信息,但是HTTP协议以明文的方式发送内容,不提供任何数据加密,攻击者能够很轻易通过抓包的方式截取传输内容并读懂其中的信息,所以HTTP不适合传输一些比较私密的信息,为了解决HTTP这一缺陷,HTTPS(Hyper TEXT Transfer Protocol over Secure Socket Layer)协议出现。HTTPS是在HTTP的基础上加入SSL协议。传输以密文传输,保证数据传输的安全以及确认网站的真实性(数字证书)。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
HTTPS=HTTP+SSL

三、SSL加密方式

3.1 对称加密与非对称加密

在开始之前首先得对理解对称加密与非对称加密这两种加密方式。其中加密过程是

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
信息+密钥+算法=密文

3.1.1对称加密

对称加密实质加密和解密都使用同一个密钥,对称加密只有一个密钥,作为私钥。这就好比现实生活中的钥匙和锁,我将想要传达的信息通过对称加密算法用私钥进行加密,形成密文,然后将这密文传送给同样拥有这把锁的“钥匙”的人,对方就用同样的算法和私钥将密文解密出来。 常用的对称加密算法有DES和AES等 但是在现实中,这种传输方式并不是特别方便,密钥怎么给对方是一个很关键的问题,而且密钥交给了其他人自己也不是很放心。于是非对称加密出现

3.1.2非对称加密

非对称加密是指加密和解密用的是不同密钥,并且是成对存在的。一把称为公钥,能够放心的交给别人,一把是私钥,只能自己保存。其中用公钥加密的信息只能用私钥解密,用私钥加密的信息只能用公钥解密。

需要注意的是这里的私钥和密钥都是对应的,就是说我的私钥可以解密用我的公钥加密的信息,但是他人的私钥不能解密用我的公钥加密的信息。 常用的非对称加密算法有:RSA,DH,DSA三种

3.2 具体的加密过程

我通过一段具体的通信过程来模拟这一加密过程。假设主人公是客户端A和服务端B

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
AB,你好,我想向你发一段消息,请你把你的公钥给我
B:好的,我的公钥是:xxxxxxx。
A:好的,我收到了你的公钥,我给你发送的消息经过你的公钥加密后是:yyyyyyy。
B:收到,我现在用我的密钥来解密看看。

这就是非对称加密的具体过程,这种方式看上去很安全,但是仔细想想信息真的可靠吗? 想一想客户端A的公钥是假的怎么办?如果有一个黑客C也给客户端A发送了一个自己的公钥,而客户端A不知道公钥的正确性,用了C的公钥加密发送,这样一来,信息被C截取的化,信息不久泄露了吗。 所以我们得想个办法证明我用的公钥确实是服务端B的公钥。 于是数字证书出现! 我先抛一段官方的数字证书的概念

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
数字证书就是互联网通讯中标志通讯各方身份信息的一串数字,提供了一种在Internet上验证通信实体身份的方式,数字证书不是数字身份证,而是身份认证机构盖在数字身份证上的一个章或印(或者说加在数字身份证上的一个签名)。

简单来说数字证书就是一段信息,他内部的信息包括:

  • 签发证书的机构
  • 加密算法
  • Hash算法
  • 公钥
  • 证书到期时间等

贴一段实际的数字证书 我通过查看CSDN的数字证书来帮助理解这一概念,chrome的网页栏一般有“安全”的字样,说明该网站的有数字证书的,数据传输的安全性是可以保证的。

再来看看数字证书的内容

它里面包含了一系列安全相关信息,在下面我会讲这些信息的用途。 另外提一点,数字证书是由权威机构——CA机构发行,我们是绝对信任这个机构的。

为了防止证书颁发的过程中被人修改,又出现了一个数字签名的概念,所谓数字签名就是把证书内容做了一个hash操作生成固定长度的数据发送给服务端B,服务端就能通过自己hash一遍对比发过来的hash来判断内容是否被修改。然而这还是可能被人截取修改内容重新生成hash再发给服务端B,这怎么办呢?出于这个考虑,CA机构在颁发时又会用一个私钥将这个hash加密,这样就防止了证书被修改了。 我将该过程图示

这里再说一下数字签名,通俗来说就是将要传输的信息通过hash加密后将这个hash用私钥加密,最后得到的东西称之为数字签名。用来验证传输的信息是否被更改,注意的是这个私钥是CA官方私钥。 所以最终传送的内容有

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
正文+数字签名+数字证书

我们梳理一下

  1. 第一步 :客户端A开启一个新的浏览器访问客户端时,会先让A安装一个数字证书,这个证书主要包含的是CA机构的公钥。
  2. 第二步:服务端B发来CA机构给自己的证书,通过CA公钥解密被CA私钥加密的hash1,然后再用B的证书里面的hash算法将信息生成一个hash2,通过比较两个hash,若相等,确认这个数字证书是服务端B的。

由于非对称加密算法复杂度和计算量大,对称加密效率高,SSL就将这两种加密算法混合着用,这样安全和效率就都能保证了。其中具体的过程如下:

  1. 第一步 客户端A给出 支持的SSL版本+一个随机数+自己支持的加密方式
  2. 第二步 服务端B接收到这些信息后确认加密方式+自己的安全证书+一个随机数发给A
  3. 第三步 客户端A确认数字证书有效性(验证方法上面已经说明),然后生成一个随机数,并将这个随机数用B的数字证书公钥加密后发送给A。
  4. 第四步 服务端B使用自己的私钥解密这个随机数
  5. 第五步 A和B通过第二步确定的加密方法将前三个随机数生成一个对话密钥 用来接下来的通信(个人感觉不需要三个随机数,只用最后一个就够了,这样做可能是为了更安全)

于是A和B救恩那个用对称加密的方式快速有效安全的通信了。 这就是SSL协议的握手过程,图示如下。

四、总结


本文由https引出SSL,并探讨对称和非对称加密以及数字签名和数字证书的原理,最后介绍SSL具体加密通信过程。若有错误或者改进之处欢迎指正,不胜感激。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/136432.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年6月3,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
1 条评论
热度
最新
SSL英文全称Secure Socket Layer,安全套接层,是一种为网络通信提供安全以及数据完整性的安全协议,它在传输层对网络进行加密
SSL英文全称Secure Socket Layer,安全套接层,是一种为网络通信提供安全以及数据完整性的安全协议,它在传输层对网络进行加密
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
经得住拷问的HTTPS原理解析
HTTPS 是在 HTTP 和 TCP 之间建立了一个安全层,HTTP 与 TCP 通信的时候,必须先进过一个安全层,对数据包进行加密,然后将加密后的数据包传送给 TCP,相应的 TCP 必须将数据包解密,才能传给上面的 HTTP。
用户4456933
2021/06/01
6410
经得住拷问的HTTPS原理解析
理解HTTPS
HTTPS其实是有两部分组成:HTTP + SSL / TLS,也就是在HTTP上又加了一层处理加密信息的模块。也就是说使用HTTPS协议之后在网络上传输的数据是加密的密文,即便进行拦截后没有密钥进行解密的话也就是一串乱码。端口号是443
见得乐
2022/07/20
3120
详解Https是如何确保安全的?
HTTPS(全称:Hypertext Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL
哲洛不闹
2018/09/18
8870
详解Https是如何确保安全的?
对称加密、非对称加密、RSA、消息摘要、数字签名、数字证书与HTTPS简介
对称加密算法使用的加密和解密的密钥一样,比如用秘钥123加密就需要用123解密。实际中秘钥都是普通数据在互联网传输的,这样秘钥可能会被中间人截取,导致加密被破解。其过程如下:
恋喵大鲤鱼
2019/03/11
12.3K3
对称加密、非对称加密、RSA、消息摘要、数字签名、数字证书与HTTPS简介
HTTPS加密原理HeaderBodyFooterReferences
Header HTTP、HTTPS在我们日常开发中是经常会接触到的。 我们也都知道,一般 Android 应用开发,在请求 API 网络接口的时候,很多使用的都是 HTTP 协议;使用浏览器打开网页,也是利用 HTTP 协议。看来 HTTP 真是使用广泛啊,但是,HTTP 是不安全的。利用网络抓包工具就可以知道传输中的内容,一览无余。比如我经常会使用 Fiddler 来抓包,搜集一些有趣的 API 接口。 那么问题来了,如何保证 HTTP 的安全性呢?基本上所有的人都会脱口而出:使用 HTTPS 协议。9
俞其荣
2018/05/21
1.1K0
海绵宝宝也懂的HTTPS
https是建立在SSL(Secure Sockets Layer 安全套接层)上的网络安全协议,最初由NetScape公司提出,之后由IETF标准化为TLS(Transport Layer Security 安全传输层协议),其端口为443。 本文全长1900字左右,全文阅读大概需要10分钟,之后你将收获:
我就是马云飞
2019/03/08
7640
海绵宝宝也懂的HTTPS
HTTPS是如何保证加密可靠
HTTP与HTTPS是开发人员最常接触的网络协议,通常在进行API请求的时候,我们会用到HTTP协议。但是众所周知HTTP是明文传输,所以是不够安全的,我们可以通过各种各样的网络抓包工具(如whistle/Fiddler)去“捕获”其中的具体内容,所以就引出了基于HTTP更加安全的HTTPS协议。
腾讯IVWEB团队
2020/06/29
9340
假如让你来设计SSL/TLS协议
说起网络通信协议,相信大家对 TCP 和 HTTP 都很熟悉,它们可以说是当今互联网通信的基石。但是,在网络安全方面,它们却是有着很大安全风险:
元闰子
2022/03/05
5530
假如让你来设计SSL/TLS协议
https的原理「建议收藏」
  上过网的朋友都知道,网络是非常不安全的。尤其是公共场所很多免费的wifi,或许只是攻击者的一个诱饵。还有大家平时喜欢用的万能钥匙,等等。那我们平时上网可能会存在哪些风险呢?   1. 泄密,个人隐私、账户密码等信息可能会被盗取。   2. 篡改,收到的数据可能被第三方修改过,或被植入广告等。   3. 假冒,访问的站点非目标服务器站点。如域名欺骗、域名劫持、钓鱼网站等。
全栈程序员站长
2022/10/04
4710
https的原理「建议收藏」
如何用 wireshark 抓包 TLS 封包
此前一篇文章用 wireshark 这个抓包工具调试了一下 HTTP 请求和响应。详细阐述了 TCP 连接和断开的整个过程。这篇文章尝试使用 wireshark 来抓取 TLS 封包,了解一下 HTT
JS菌
2019/04/23
7.7K0
如何用 wireshark 抓包 TLS 封包
简述https的几种加密方式
加密方式 常见的加密方式:对称加密和非对称加密。 对称加密算法和非对称加密算法只不过是密码学中的两种加密算法罢了,所谓的算法就是一种可以将信息从一种形式转变为另一种形式的规则。 对称加密 概念:对称密钥加密,又称为对称加密、私钥加密、共享秘钥加密,是密码学中的一类加密算法。这类算法在加密和解密时使用相同的密钥,或是使用两个可以简单地相互推算的密钥。 对称加密也可以理解为一方通过密钥将信息加密之后,把密文传给另一方,另一方通过这个相同的密钥将密文解密,转换成可以理解的明文。它们之间的关系如下: 明文<->密钥
田维常
2019/07/16
5.2K0
即时通讯安全篇(九):为什么要用HTTPS?深入浅出,探密短连接的安全性
对于IM开发者来说,IM里最常用的通信技术就是Socket长连接和HTTP短连接(通常一个主流im会是这两种通信手段的结合)。从通信安全的角度来说,Socket长连接的安全性,就是基于SSL/TLS加密的TCP协议来实现的(比如微信的mmtls,见《微信新一代通信安全解决方案:基于TLS1.3的MMTLS详解》);而对于HTTP短连接的安全性,也就是HTTPS了。
JackJiang
2022/05/13
7400
即时通讯安全篇(九):为什么要用HTTPS?深入浅出,探密短连接的安全性
浅谈密码学
密码学是研究如何隐密地传递信息的学科。那怎样才能隐密地传递信息呢?密码学里的答案就是对原文进行加密。主流的加密主要分成两大类:对称加密和非对称加密。
小蜜蜂
2019/07/14
7190
计网 - 深入理解HTTPS:加密技术的背后
综上所述,HTTPS相比于HTTP在安全性方面更可靠,但在性能方面可能稍有损耗,因为加密解密过程需要消耗额外的计算资源。
小小工匠
2024/05/26
1720
计网 - 深入理解HTTPS:加密技术的背后
Retrofit/Okhttp API接口加固技术实践(下)
上篇加固介绍了APi单纯Post用对称加密(文中用Base64 为简单列子)加密方式,这种加密方式还是存在一定的风险,加密效率虽高,但易破解,本节将介绍怎么用非对称加密 来加解密okhttp的数据,本文采用RSA加密算法为栗子。
开发者技术前线
2020/11/23
7370
Retrofit/Okhttp API接口加固技术实践(下)
【在Linux世界中追寻伟大的One Piece】HTTPS协议原理
HTTPS(Hypertext Transfer Protocol Secure)是一种安全的网络通信协议,它在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性。HTTPS的安全基础是SSL/TLS协议,它存在不同于HTTP的默认端口及一个加密/身份验证层(在HTTP与TCP之间)。这个系统提供了身份验证与加密通讯方法,被广泛用于万维网上安全敏感的通讯,例如交易支付等方面。由于HTTPS协议内容都是按照文本的方式明文传输的,就导致在传输过程中出现一些被篡改的情况。
枫叶丹
2024/07/12
1540
【在Linux世界中追寻伟大的One Piece】HTTPS协议原理
Nginx(3)-创建 https 站点
使用对称加密,交易双方都使用同样钥匙,安全性得不到保证;每对用户每次使用对称加密算法时,都需要使用其他人不知道的惟一钥匙,这会使得发收信双方所拥有的钥匙数量呈几何级数增长,密钥管理成为用户的负担。对称加密算法在分布式网络系统上使用较为困难,主要是因为密钥管理困难,使用成本较高。
懒人的小脑
2019/03/19
1.1K0
Nginx(3)-创建 https 站点
HTTPS终于搞懂了
近些年来,越来越多的网站使用 HTTPS 协议进行数据传输,原因在于 HTTPS 相较于 HTTP 能够提供更加安全的服务。
捡田螺的小男孩
2023/02/22
9470
HTTPS终于搞懂了
Https之秘钥交换过程分析
A <------M------> B 场景:A、B两个人之间通讯,A传输信息M给B,假定是在不安全的通路上传输。
翎野君
2023/05/12
5620
HTTP原理与通信流程
HTTP是不会对请求的双方进行身份验证的,服务器不会校验客户端的身份,谁都可以向服务器发送请求,任何人都的请求都会进行响应; 客户端也不会验证响应的数据是否是由自己请求的目标服务器所发出。
vimsudoers
2020/02/29
1.1K0
相关推荐
经得住拷问的HTTPS原理解析
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验