
HTTPS
发布日期:2021-11-21 16:35:35
浏览次数:9
分类:技术文章
本文共 2543 字,大约阅读时间需要 8 分钟。
HTTPS:
HTTP协议是明文传输协议,通信过程中被中间人进行劫持、监听、篡改,会造成个人隐私泄露等严重的安全问题,HTTPS在传输层和应用层加了TSL/SSLhttps的优势:
- 通讯过程的hash生成的摘要,保证数据完整性
- 握手过程的非对称加密,传输过程的对称加密,保证数据私密性
- 证书保证双方身份的真实性
https大致过程
- 建立服务器443端口连接
- SSL握手:随机数,证书,密钥,加密算法
- 发送加密请求
- 发送加密响应
- 关闭SSL
- 关闭TCP
SSL握手大致过程:
- 客户端发送随机数1,支持的加密方法(如RSA公钥加密)
- 服务端发送随机数2,和服务器公钥,并确认加密方法
- 客户端发送用服务器公钥加密的随机数3
- 服务器用私钥解密这个随机数3,用加密方法计算生成对称加密的密钥给客户端,
- 接下来的报文都用双方协定好的加密方法和密钥,进行加密
SSL握手详细过程:
一、客户端发出加密通信请求ClientHello
提供:
1,协议版本(如TSL1.0) 2,随机数1(用于生成对话密钥) 3,支持的加密方法(如RSA公钥加密) 4,支持的压缩方法二、服务器回应SeverHello
回应内容:
1,确认使用的加密通信协议版本(TSL1.0) 2,随机数2(用于生成对话密钥) 3,确认加密方法(RSA) 4,服务器证书(包含非对称加密的公钥) 5,(可选)要求客户端提供证书的请求三、客户端验证证书
如果证书不是可信机构颁布,或证书域名与实际域名不符,或者证书已经过期,就会向访问者显示一个警告,是否继续通信
四、客户端回应
证书没有问题,就会取出证书中的服务器公钥
然后发送: 1,随机数3(pre-master key,此随机数用服务器公钥加密,防止被窃听) 2,编码改变通知(表示随后的信息都将用双方商定的方法和密钥发送) 3,客户端握手结束通知五、双方生成会话密钥
双方同时有了三个随机数,接着就用事先商定的加密方法,各自生成同一把“会话密钥”
服务器端用自己的私钥(非对称加密的)获取第三个随机数,会计算生成本次所用的会话密钥(对称加密的密钥),如果前一步要求客户端证书,会在这一步验证六、服务器最后响应
服务器生成会话密钥后,向客户端发送:
1,编码改变通知(后面的信息都用双方的加密方法和密钥来发送) 2,服务器握手结束通知至此,握手阶段全部结束,接下来客户端与服务器进入加密通信,用会话密钥加密内容
目的
为了解决HTTP明文传输带来的信息安全问题。基本原理:
采用非对称加密。客户端:向服务端请求公钥,然后用公钥将信息加密后传输给服务端。
服务端:服务端用私钥将信息解密。 问题: 1. 如何防止中间人攻击?即客服端获取了伪造的公钥,攻击人截获客户端向服务端发送的信息,用自己的私钥解密信息。 数字证书有效解决了公钥的信任问题。2. 如何解决非对称加密性能问题?
解决方法:每一次对话(session),客户端和服务器端都生成一个"对话密钥"(session key),用它来加密信息。由于"对话密钥"是对称加密,所以运算速度非常快,而服务器公钥只用于加密"对话密钥"本身,这样就减少了加密运算的消耗时间。 PS:这就是常见的为了解决非对称加密性能不好的方案,采用对称加密加密正文,非对称仅用于加密 对称加密密钥。实现用对称密钥加密文本,用非对称加密传输密钥。既保证性能也保证安全性。 数字签名 数字签名是为了保证文本不被篡改。 其运作流程如下: 首先,A将撰写的文本利用hash函数压缩,成为摘要(digest)。 A利用私钥将摘要加密产生数字签名。并将数字签名与明文文本一同传输给B。 B将明文文本hash产生h1,将数字签名用公钥解密产生h2,比对两者hash值,从而确定文本是否被篡改。数字证书
数字证书是为了保证客户端获取到可信的公钥。 将网站的相关信息与公钥发送到证书中心"(certificate authority,简称CA),CA会核实身份(验证你对域名的所有权),成功后将网站的相关信息与网站服务端生成的公钥加上用CA的私钥产生的***数字签名***作为证书发给申请者。 中间人劫持 客户端如何获取服务器的公钥? (1)三次握手阶段:Server发送自己的公钥给Client,中间人H拿到Server的公钥,然后发送自己的公钥给client。 (2)Client用H的公钥进行加密,发给Server,中间人H劫持到消息,用自己的私钥进行解密,然后用server的公钥进行加密,发送给Server,Server用自己的私钥进行解密,得到消息。 (3)Client、Server都觉得消息在正常传输,但是已经被中间人劫持了。 HTTPS通信过程: (1)Client发送Client Hello报文给Server开启SSL通信,报文中包含Random_1 (2)服务器支持SSL通信的话,发送Server Hello报文回应,报文中包含Random_2 (3)服务器之后发送Certificate报文,报文中包含数字证书 (4)服务器再发送Server Hello Done通知Client,最初的SSL握手阶段协商部分结束 (5)Client对数字证书校验,正确后,解密得到服务器的公钥。通过RSA算法随机生成Pre-Master Secret,并且用服务器的公钥进行加密,包含在Client Key Exchange报文中,发送给Server (6)客户端继续发送Change Cipher Spec报文,告知Server端,客户端切换协商的加密套件,准备使用协商的加密套件加密数据并传输。 (7)Client发送Finished报文,该报文包含了连接至今全部报文的整体校验值(也就是hash值) (8)Server接收到Client的请求,用私钥解密,把Pre-master secret取出来。Server发送同样的Change Cipher Spec报文 (9)Server同样发送Finished报文,提供Client校验 (10)Server和Client的Finished报文交换完毕,SLL连接建立。开始通信。转载地址:https://blog.csdn.net/yyychocolate/article/details/108076472 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
表示我来过!
[***.240.166.169]2023年09月06日 12时21分25秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
PHP注册登录案例(Bootstrap+PHP+MySQL实现)
2019-03-07
Liunx配置DNS服务器
2019-03-07
Liunx配置主DNS服务操作案例
2019-03-07
css+html鼠标划入hover效果(一)
2019-03-07
常用正则表达式(重要)
2019-03-07
Python3进阶(二) | 正则表达式
2019-03-07
Python绘图 | 初识Turtle绘图~
2019-03-07
Python爬虫从入门到实战教程
2019-03-07
Python小伎俩之实现群发邮件
2019-03-07
Python网络爬虫(一) | urllib包基本使用教程
2019-03-07
Python开发入门(三) | itchat实现微信机器人
2019-03-07
Python网络爬虫| Requests库的基本使用
2019-03-07
SQL Server | 网上购物商城数据库设计报告(专业课设作品)
2019-03-07
关于面试 | 看看前端面试都问什么~
2019-03-07
重构Java基础 | 完整ASCII码对照表
2019-03-07
重构Java基础 (一) | 说说java中的常量与变量
2019-03-07
重构Java基础 (二) | 浅谈java运算符
2019-03-07
重构Java基础 (三) | 程序控制
2019-03-07
Bootstrap实战 | 用Bootstrap布局写一个完整的商城科技网站页面
2019-03-07