前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >https和ssl的区别_ssl认证

https和ssl的区别_ssl认证

作者头像
全栈程序员站长
发布2022-11-11 15:15:33
2K0
发布2022-11-11 15:15:33
举报
文章被收录于专栏:全栈程序员必看

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

https加密、解密、及验证过程如下图:

HTTPS怎么实现安全传输的?

建立安全传输

HTTPS中, 客户端首先打开一条到WEB服务器443端口的连接。 一旦建立了TCP连接 ,客户端和服务器就会初始化SSL层,对加密参数进行沟通,并交换密钥。 握手完成后,SSL初始化就完成了,客户端就可以将请求报文发送给安全层了。

重点 SSL握手

发送已加密的HTTP报文之前,客户端和服务器要进行一次SSL握手,这个握手过程中,他们完成:

  1. 客户端发送列出客户端密码能力的客户端信息,比如SSL的版本,客户端支持的密钥对和客户端支持的hash方法(压缩方法)。 client_hello
  2. 服务器响应,服务器选择一个两端都了解的密钥。和服务器的hash方法。 server_hello
  3. 服务器发送SSL数字证书 X.509,等待客户端响应
  4. 一旦接受到,客户端将验证服务器的SSL数字证书的有效性。 服务器也可以请求客户端的SSL证书(SSL支持双向)
  5. 一旦校验通过,客户端就回随机生成一个用于后面通信的“对称密码”pre_master_secret,用服务器的公钥加密。然后发送给服务器。
  6. 服务端用私有密钥解密加密后的随机数据并协商暗号 得到pre_master_secret,然后双方利用这个协商得到master_secret。 这个是为了保证数据的安全。
  7. 服务端跟客户端利用mastersecret产生真正的sessionkey,这是一个对称加密的key。 然后握手结束。

选择一个两端都了解的密码 对两端的身份进行认证。 生成临时的会话密钥,加密信道

其实还有SSL双向握手,这里就不阐述了。

那么SSL/TLS协议的基本原理就是,客户端获取服务器的公钥,加密信息以后传送给服务器,然后服务器使用私钥解密。这个方案有两个问题。

服务器传输公钥的时候,是明文的,第三方可以篡改。 RSA加密的计算量较大,如果每次通信都使用RSA加密的话,会对性能产生负担。 针对第一个问题,我们需要一个办法来保证服务器传输的公钥确实是服务器的,而不是第三方的。这个时候,我们需要使用数字证书。数字证书由权威机构(CA, Certificate Authority)颁发,里面包含有服务器的公钥,证书文件使用CA私钥进行加密。当客户端与服务器建立加密通信的时候,服务器不再返回公钥,而是返回他的数字证书。客户端拿到证书,使用对应的CA的公钥解密,然后获取到服务器的公钥。这里有一个问题,客户端怎么拿到CA的公钥呢?如果还是去CA服务器获取的话,那么我们又会回到问题的原点即怎样保证CA公钥不被人篡改。因此,大部分浏览器中,权威CA的公钥都是内置的,不需要去获取。这就保证了CA公钥的正确性。第三方没有办法伪造证书,因为第三方没有CA的私钥(当然,CA被入侵的例子的也是有的,技术永远解决不了人的问题)。

针对第二个问题,SSL/TLS协议在通信过程中,并不是使用RSA加密,而是使用对称加密,对称加密的密钥(对话密钥)由双方协商生成。

因此,SSL/TLS协议的基本流程如下:

客户端索取服务器的数字证书,从而获得服务器公钥 双方协商生成对话密钥 使用对话密钥进行加密通信 具体流程

根据上面的论述,SSL/TLS协议的核心便是怎样安全的生成一个对话密钥来加密之后的通信。这个过程称之为握手。

握手一共有四次请求,注意,这些请求都是明文的(也没法加密)。

客户端请求(ClientHello)

首先,客户端(通常是浏览器)先向服务器发送加密请求,这一步叫做ClientHello。 请求携带以下信息:

代码语言:markdown
复制
1. 客户端支持的协议版本(这是为了和服务器协商使用什么版本的SSL/TLS进行通信) 2. 客户端生成的一个随机数n1 3. 客户端支持的加密方法,比如RSA(这是为了和服务器协商使用什么加密方法)

服务器响应(ServerHello)

服务器收到客户端请求之后,向客户端发送响应,这一步叫做ServerHello。 响应携带以下信息:

代码语言:markdown
复制
1. 确认通信使用的SSL/TLS版本 2. 服务器生成的一个随机数n2 3. 服务器的数字证书 4. 确认加密方法,比如RSA

客户端回应

客户端收到浏览器的响应后,首先验证服务器的证书时候有效。如果证书不是由权威结构颁发(比如12306),证书包含的域名和实际域名不一致或者证书已经过期,那么浏览器会警告用户,由用户决定是否继续访问。

如果证书没有问题,客户端便会从证书中取出服务器的公钥,然后发送一个请求,携带以下信息。

代码语言:markdown
复制
1. 一个随机数n3,这个随机数用服务器公钥加密,防止被窃听 2. 编码改变通知,表示之后所有的信息都将会使用双方商定的加密方法和密钥发送 3. 客户端握手结束通知,表示客户端的握手阶段已经结束

客户端此时有三个随机数,n1,n2,n3,根据这个三个随机数,客户端使用一定的算法生成通信所需的对话密钥。

服务器最后响应

服务器收到客户端的随机数之后,使用私钥将其解密,这时,服务器也拥有了n1,n2,n3这三个随机数,服务器便可以生成和客户端一致的对话密钥。然后向客户端发送最后的响应。信息如下:

  1. 编码改变通知,表示随后的信息都将用双方商定的加密方法和密钥发送   2. 服务器握手结束通知,表示服务器端的握手阶段已经结束

到了这里,客户端和服务器就可以使用对话密钥加密之后所有的通信过程。第三方无法窃听,都是乱码看不懂。也无法篡改,SSL使用MAC(Message authentication code)来校验信息。更无法冒充,因为没有对话密钥。

转载于:https://www.cnblogs.com/jiangzhaowei/p/9122034.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

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

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • HTTPS怎么实现安全传输的?
    • 建立安全传输
      • 重点 SSL握手
      相关产品与服务
      SSL 证书
      腾讯云 SSL 证书(SSL Certificates)为您提供 SSL 证书的申请、管理、部署等服务,为您提供一站式 HTTPS 解决方案。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档