1.https作用

  • 混合加密
  • 身份验证: 可以通过数字证书验证对方身份
  • 验证数据完成性: 防止内容被中间人冒充或篡改

2. 基础知识

  • 数字摘要:通过hash函数对报文进行哈希,得到长度固定的字符串称谓摘要, 这个过程是单向的,无法通过摘要反推原文。

  • 数字签名:对数字摘要进行非对称加密后的密文,叫做数字签名。

  • 数字证书:可用于客户端验证服务端身份的证书,一般是由CA机构签发的。数字证书包含颁发机构、过期时间、网站域名、网站公钥、CA签名。

  • CSR:CSR是Certificate Signing Request的英文缩写,即数字证书签名请求,网站只要把CSR文件提交给证书颁发机构后,证书颁发机构使用其【根证书私钥】对CSR内容进行【签名】,就生成了数字证书;CSR请求中包含网站生成的公钥,因此CSR必定有对用的key,也就是私钥.例如下图是在线生成CSR的工具:


生成结果:

3. https流程

  1. 网站首先需要申请域名,然后使用域名生成 CSR 和 私钥,然后向CA机构申请数字证书。

  2. 浏览器向网站发送https请求,URL中必须使用域名。

  3. 网站收到请求后,立刻响应数字证书。

  4. 浏览器收到数字证书后,在本地已授信的根证书列表中,查询数字证书中的颁发机构的根证书;如果不存在则无法验证,所以提示用户该数字证书不安全,如果存在,则使用本地根证书对数字证书进行验证,如果验证失败则提示用户该数字证书不安全。如果证书没有问题,浏览器自动生成一个随机数(对称密钥)对请求报文进行加密,然后再使用数字证书中的公钥对随机数进行加密,然后将【请求密文】和【随机数密文】发送给网站。

  5. 网站收到浏览器发来的密文后,首先使用私钥解密【随机数密文】得到【随机数】,然后使用随机数解密【请求报文】,此时SSL连接已建立,该连接以后的通信将一直使用该【随机数】进行对称加密。最后网站使用【随机数】加密响应报文,并发送到浏览器。

  6. 浏览器接受到响应报文后,使用【随机数】解密报文,然后使用【随机数】加密请求。

4. 数字证书验证主要过程

  1. 浏览器请求数字证书

比如访问百度收到的数字证书如下图:

点击URL框左边的锁即可查看证书,在证书的常规信息:

  • 颁发给: baidu.com 即数字证书中的网站域名
  • 颁发者: CA机构
  • 有效期: 即数字证书的有效期

    上图示数字证书的详情,点击下方的【证书的详情信息】可以打开证书的解释,最重要的信息就是指纹和公钥了。

指纹就是证书签名,是CA对证书内容进行摘要后使用私钥加密后的签名。

公钥是网站的公钥。

  1. 浏览器查找CA根证书

浏览器安装后都会内置很多CA机构的根证书,基本涵盖全球CA机构,如谷歌浏览器中的根证书如下:

这些根证书实际就是CA机构自己给自己颁发的数字证书,其中的信息和颁发给网站的数字证书的格式是一样的。

浏览器根据网站数字证书中的颁发机构名称,从根证书列表中查询对用的根证书,如果不存在,则说明网站数字证书的颁发机构不受信任,不够安全,因此验证失败,如果存在则继续验证。

  1. 浏览器使用根证书中的公钥,对数字签名进行解密,如果能解密成功,说明指纹是CA机构使用私钥进行加密的,如果解密失败则说明数字签名是伪造的。解密成功后获得证书摘要。

  2. 浏览器根据摘要算法主动生成摘要,和解密数字签名得到的数字摘要进行对比,如果不一致则说明证书内容被篡改了,否则说明该数字证书的确是CA机构签发的。

  3. 浏览器比较数字证书中的域名是否和请求中的一致,如果不一致则说明该数字证书虽然的确是CA机构签发的,但并不是目标网站的数字证书。比如一个非法网站拥有CA签发的数字证书,但它截取了访问某个百度的https请求,并响应浏览器自己的证书,如果浏览器不进行域名校验,就会认为数字证书是正确的,进而整个会话被劫持。

这也是为什么https要求必须是域名,否者会话可能被劫持。如下图,当https请求中使用ip访问百度时,浏览器也会提示不安全,以避免会话被劫持:


流程图:

关系图:

5.证书链



可知百度的数字证书并不是一级CA机构签发的,而是二级CA机构签发的。

快速理解https是如何保证安全的相关推荐

  1. 学一点 mysql 双机异地热备份----快速理解mysql主从,主主备份原理及实践

    学一点 mysql 双机异地热备份----快速理解mysql主从,主主备份原理及实践 原文 学一点 mysql 双机异地热备份----快速理解mysql主从,主主备份原理及实践 感谢大家在上一篇 学一 ...

  2. 深入理解HTTPS及在iOS系统中适配HTTPS类型网络请求(上)

    2019独角兽企业重金招聘Python工程师标准>>> 深入理解HTTPS及在iOS系统中适配HTTPS类型网络请求 一.引言 本篇博客主要讨论如何在客户端与服务端之间进行HTTPS ...

  3. 快速理解高性能HTTP服务端的负载均衡技术原理

    1.前言 在一个典型的高并发.大用户量的Web互联网系统的架构设计中,对HTTP集群的负载均衡设计是作为高性能系统优化环节中必不可少的方案.HTTP负载均衡的本质上是将Web用户流量进行均衡减压,因此 ...

  4. 悟空帮你理解https

    2019独角兽企业重金招聘Python工程师标准>>> ###开篇 相信程序猿们都有所了解https,就我个人而言一个月前我只知道https连接是安全的,加密了的,但是具体怎么加密的 ...

  5. 深度学习实战(一)快速理解实现风格迁移

    前言 Gatys大神之前发表了一篇利用风格迁移进行作画的文章,让普通的照片具有名人的画风,效果如下: 让一篇普通的图片有了梵高的风格,厉害了. 文章链接:A Neural Algorithm of A ...

  6. Java快速创建大量对象_3分钟 快速理解JVM创建对象的步骤!

    原标题:3分钟 快速理解JVM创建对象的步骤! 我们平时创建一个对象只需要new.然而我们知道对象的创建到底经历了哪些呢?实际上只不过仅仅的3步就完成了.先来看看完整的创建过程,再来一步一步的分析. ...

  7. 轻松理解https,So easy!

    作者:翟志军 https://showme.codes/2017-02-20/understand-https/ 本文尝试一步步还原HTTPS的设计过程,以理解为什么HTTPS最终会是这副模样.但是这 ...

  8. 也许,这样理解 HTTPS 更容易

    本文尝试一步步还原HTTPS的设计过程,以理解为什么HTTPS最终会是这副模样.但是这并不代表HTTPS的真实设计过程.在阅读本文时,你可以尝试放下已有的对HTTPS的理解,这样更利于"还原 ...

  9. IM开发基础知识补课(三):快速理解服务端数据库读写分离原理及实践建议

    1.前言 IM应用从服务端数据的角度来看,它是一种很特殊的应用场景,抛开基础数据.增值业务和附属功能不谈,单从IM聊天工具的立身之本--聊天数据来说,理论上是不需要在服务端存储的(或者说只需要短暂存储 ...

最新文章

  1. 数据仓库与数据集市建模
  2. 我的spark学习之路(三):利用spark做回归分析
  3. 004_淡入淡出效果
  4. 3、C语言面试笔试--控制结构
  5. casperjs ajax请求,Casperjs ajax调用 - waitForResource和解析错误
  6. ***ECharts图表入门和最佳实践
  7. functions.php 在哪,functions.php常用函数
  8. (转)十分钟入门pandas
  9. 黑苹果 惠普笔记本电池补丁_小米笔记本Pro 黑苹果 改装内置WIFI和蓝牙
  10. 方玲玉 网络营销_《网络营销》课程设计
  11. 参数validator/valid校验用法(通俗)
  12. 回溯法解决部落冲突问题
  13. 分享一个支持离线下载的免费网盘
  14. 第三方SDK:百度地图(二)定位 + 鹰眼轨迹
  15. 【python】什么是序列,Python序列详解
  16. pion:rtc-to-webrtc示例
  17. 视频直播APP源码,通过css控制div内容展开更多/收起效果
  18. vue内使用 cytoscape(数据可视化)
  19. OpenStack Heat服务介绍
  20. 2021高考成绩位次查询,【更新】2021全国各省市高考预测分数线出炉,这样可以估算你在全省位次...

热门文章

  1. jQuery筛选器常用总结
  2. Docker 安装 For CentOS 7.4
  3. 57. Android之程序调试LogCat (转)
  4. 大规模markpoint特效
  5. IIS 8.5配置.net网站[花了半个多小时]
  6. SharePoint 2010 使用自定义aspx页面替换列表默认的新建(NewForm.aspx),查看(DispForm.aspx)和编辑(EditForm.aspx)页面...
  7. 微信公众号页面支付接口java,[Java教程]微信公众号支付(三):页面调用微信支付JS并完成支付...
  8. mysql union group by_Mysql UNION和GROUP BY
  9. 经典题目螺旋方阵的详解
  10. Java黑皮书课后题第3章:**3.28(几何:两个矩形)编写一个程序,提示用户输入两个矩形中心的x坐标和y坐标以及矩形的宽度和高度,然后判断第二个矩形是在第一个矩形内,还是和第一个矩形重叠