首页 > 其他分享 >一文搞懂HTTPS的握手方法

一文搞懂HTTPS的握手方法

时间:2022-12-23 10:59:04浏览次数:38  
标签:公钥 加密 证书 CA 秘钥 HTTPS hash 搞懂 握手

HTTPS握手方法

加密

加密的大致种类:

  1. 不可逆加密。 比如 MD5、SHA、HMAC

小明将文件加密得到一串密码a,并把文件和密码a给小红,小红拿到文件之后使用同样的算法得到密码b,这样小红就可以直接对比密码a和密码b是否一致确认文件在传输过程中是否被串改。

  1. 可逆加密

1)  对称加密。比如:AES、DES、3DES、IDEA、RC4、RC5、RC6

用同一个密码加密和解密

2)  非对称加密(就是公私钥)。比如:RSA、DSA、ECC

和对称加密相反不使用同一秘钥。1. 加密(保证数据安全性)使用公钥加密,需使用私钥解密。 2.认证(用于身份判断)使用私钥签名,需使用公钥验证签名。

证书

CA(Certificate Authority)机构颁发的证书(公证人)

去CA机构申请证书需要的大致信息?

1)  网站域名

2)  证书持有者

3) 证书有效期

4) 证书颁发机构

5) 服务器公钥(最主要,浏览器需要公钥加密通信使用的秘钥)

6) 签名时用的hash算法

签名

什么是数字签名?签名的过程是什么

1)  CA机构拥有非对称加密的私钥和公钥

2)  CA对证书明文信息进行hash

3)  对hash后的值用私钥加密,得到数字签名

浏览器收到服务下发的证书之后,拿到证书明文和签名,怎么验证是否篡改了呢?

1)     浏览器拿到证书里面明文的hash算法并对明文内容进行hash运算,得到A

2)     用CA的公钥解密签名得到B

3)     比较A 和 B,如果相等,说明没有被篡改,否则浏览器提示证书不可信

这里注意的是CA机构使用私钥签名,浏览器一般内置CA机构的公钥,公钥验签。

握手流程

HTTPS通过非对称加密交换通信秘钥,数据通信加密则是使用了对称加密,秘钥既刚刚交换的秘钥。为了保证在交换秘钥C过程中不被篡改,需要一个公证人来送来一把秘钥(服务端的公钥A)对C进行加密,公证人既为CA机构颁发的证书,服务器使用CA证书明文和服务端公钥A经过hash算法得到hash串,使用CA私钥B加密hash串得到数字签名。当客户端拿到如上信息后先使用CA机构的公钥B(内置)验签。确认无误后使用公钥A加密对称加密使用的秘钥C给服务器,服务器使用自己的私钥A解密得到秘钥C,之后就可以使用C加密数据后进行通信了。

这里有个小插曲,使用的秘钥C可能不是直接送过来的,而是握手过程中客户端先成一个随机数C,然后服务端生成随机数S,交换完成只有客户端使用pre-master、随机数C、随机数S生成一个秘钥,而在上面的交换秘钥过程中,交换的是pre-master,服务端得到之后,再通过随机数C,随机数S,pre-master计算得到真正通信使用的秘钥。

 

 

 参考:

https://zhuanlan.zhihu.com/p/344086342

https://juejin.cn/post/6845166890675863559

https://juejin.cn/post/6847902219745181709

标签:公钥,加密,证书,CA,秘钥,HTTPS,hash,搞懂,握手
From: https://www.cnblogs.com/liuchuanloong/p/17000187.html

相关文章

  • Python requests库指定IP请求,并使用HTTPS证书验证
    背景运维同学通过网关平台下发nginx配置文件,下发的过程是先灰度发布,发灰度机器,然后需要验证域名的请求是否正常,然后在下发其他生产机器,但是验证过程是人为操作,这就不可避......
  • HTTPS加密原理和证书及SSL/TLS握手过程
    HTTPS概述:(FromWikipedia)    安全超文本传输​​协议( HTTPS )是超文本传输​​协议(HTTP)的扩展。它用于计算机网络上的安全通信,并在Internet上广泛使用。在......
  • 图文结合带你搞懂MySQL日志之Error Log(错误日志)
    GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源。GreatSQL是MySQL的国产分支版本,使用上与MySQL一致。作者:KAiTO文章来源:社区原创往期回顾:图文......
  • HTTPS 中 SSL/TLS 协议基本流程(转)
    SSL/TLS 协议基本流程:客户端向服务器索要并验证服务器的公钥。双⽅协商⽣产「会话秘钥」。双⽅采⽤「会话秘钥」进⾏加密通信。前两步也就是 SSL/TLS 的建⽴过程,也......
  • 通过GitHub和阿里云自定义域名实现https认证
    在GitHub中的操作登录GitHub,点击“Yourrepositories”,进入个人仓库页面;点击“new“,进入新建仓库页面;仓库名称填写<username>.github.io,<username>就是GitHub的账......
  • 彻底搞懂@JsonFormate和@DateTimeFormate区别和用法
    问题今天在使用@JsonFormate和@DateTimeFormate发现出现了非常多意想不到的问题;如:1)使用ajax提交json数据时,明明提交的字符串是@DateTimeFormate中规定的类型却报错400;2)没写@......
  • HTTP & HTTPS
    1.HTTPSvsHTTPhttps://www.cnblogs.com/enhance/p/15766413.html2.HTTPS三次握手第一步:客户端向服务器发送HTTPS请求,服务器将公钥以证书的形式发送到客户端(服......
  • 一文搞懂flex:0,1,auto,none
    本文参考了张鑫旭大大的文章,和阮大大的flex布局,部分图片和段落结构一致,仅作为个人总结,侵权删。flex属性介绍平时在项目中Flex布局的使用频率非常高,但是对于flex的几个......
  • 搞懂“人工智能”、“机器学习”、和“深度学习”三者之间的关系
    搞懂“人工智能”、“机器学习”、和“深度学习”三者之间的关系“人工智能”的概念被首次提出至今,已经历超过半个世纪了。人工智能通常可分为弱人工智能和强人工智能两......
  • 指针都没搞懂,还能算得上 C++ 老司机?
    在工业界,有这样一个规律:“但凡能用其他语言的都不会用C++,只能用C++的必然用C++。”但是,C++的学习和项目开发都比较困难。一个有经验的老手也经常搞出野指针,内存泄露等bug,包......