热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

对HTTPS和SSL的理解

HTTPS也称作HTTPoverTLS。(TLS的前身是SSL,TLS1.0通常被被认为SSL3.1,TLS1.1为SSL3.2ÿ

HTTPS也称作HTTP over TLS。(TLS的前身是SSL,TLS 1.0通常被被认为SSL 3.1,TLS 1.1为SSL 3.2,TLS 1.2为SSL 3.3)

谈到HTTPS首先要了解下HTTP和对称性加密、非对称性加密(加密可以自行搜索,在此不做赘述)。

公钥加密,私钥解密。私钥加密,公钥解密。



谈下对HTTP和HTTPS协议的理解:

browser和server想要加密聊天(使用http),不想聊天内容被其他人知道,使用了非对称加密:
browser:“server,把你的公钥给我发过来”。
server:“给你,这是我的公钥:*server的公钥*,你可以用这个公钥加密信息后发给我”
browser:“叽里呱啦叽里呱啦(加密过后的话)”
这个过程就是server把自己的公钥给了browser,browser拿到server的公钥后把自己的消息加密发送给server,server收到密文后再用自己的私钥解密得到browser的消息。

如果没有意外,browserserver直接就完成了加密信息传输。但是在这个过程中会出现一个问题:browser怎么确认对方是server呢?因为server发给browser的公钥有可能会被黑客X拦截(比如本地host文件被修改后,dns拦截),黑客X把自己的公钥发给了browserbrowser拿到的公钥就是黑客X的公钥,那么browser加密发过去密文,黑客X就能用自己的私钥去解密看到传输的消息了。

所以HTTP协议的不安全原因就是:请求发起方无法确认响应方的真实身份。



当使用HTTPS协议时:

有一个声誉度很高的贤者CAbrowserserver都信任他)来做公证员,避免消息被黑客X窃取。

browserserver聊天的时候,怎么证明server是本人呢?

这时候CA要做的事情有两件,首先给server颁发一个证书【站证书】,证书是用自己的私钥把server的公钥和server的私密信息加密后做成的;然后再告诉browser自己的公钥【根证书】。

browser收到server的消息的时,先看下证书【站证书】,使用CA的公钥【根证书】解密,然后获取到server的公钥和server的身份信息,browser就能相信对方是server若无法解密或者身份信息不对,那就会断开联系。

确保对方是server后,browser和就可以直接用对称性的加密来传递消息聊天了(加密解密速度快)。




SSL的请求完整过程示例:

第一步: browserserver发送一个通信请求

browser ---> server:你好!

第二步: serverbrowser发送自己的数字证书。证书中有一个公钥用来加密信息,私钥由server持有。

server ---> browser :你好!我是server ,这里是我的数字证书 。

第三步: browser收到server的证书后,它会去验证这个数字证书到底是不是server的,数字证书是否存在问题,如果检查没有问题,就说明数字证书里面的公钥确实是server的。检查数字证书后,browser会发送一个随机的字符串给server。server用自己的私钥去加密,然后把加密结果返回给browserbrowser用数字证书里面的公钥解密这个返回结果,如果解密结果与之前生成的随机字符串一致,那说明对方确实是私钥的持有者-server

browser ---> server:向我证明你就是server,这是一个随机字符串。

server---> browser :这是将随机字符串加密后的结果。

第四步: 验证server的身份后,browser生成一个对称加密算法和密钥,用于后面的通信的加密和解密。这个对称加密算法和密钥,browser会用公钥加密后发送给server,别人截获了也没用,因为只有server自己的私钥才可以解密。这样,后面browserserver就都可以用对称加密算法来加密和解密通信内容了。

server---> browser :已经收到你发来的对称加密算法和密钥,我们可以联系了。

browser ---> server:【巴拉巴拉巴拉巴拉】

server---> browser :【拉巴拉巴拉巴拉巴】



还有一些需要了解的知识:


  • CA机构向浏览器开发商颁发CA的根证书,开发商将CA机构的根证书放置于浏览器的一个证书信任列表中。当用户下载安装浏览器到自己的电脑里面时,用户的浏览器会信任证书信任列表里面的任意CA证书签署的证书。
  • 当一家公司希望他的网站可以通过HTTPS通信的时候,该公司会在CA机构购买/申请一个网站证书,由CA机构签发的网站证书可以向用户确保网站的安全。
  • 当用户需要浏览这一个安全网站的时候,浏览器首先向服务器请求证书,检查该证书的根证书是否在浏览器的证书信任列表里面并验证证书的签名是否正确,当检查无误的时候浏览器继续跟服务器建立HTTPS连接。
  • 证书并不是只有一级,证书不可能只有几个机构进行颁发,所以证书的颁发是一级一级的。客户端在验证证书也是一级一级往下验证。最顶级的就是根证书, 根证书一般会保存在客户端(在客户端安装时就有一组根证书),如果服务端证书的根证书在客户端的信任列表中,那么就会向根证书验证二级证书的合法性,然后再向二级证书机构验证三级证书的合法性,以此类推。

关于SSL证书链的知识可以看看下面这篇文章:百度安全验证https://baijiahao.baidu.com/s?id=1675963146214744309&wfr=spider&for=pc


推荐阅读
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 如何配置Unturned服务器及其消息设置
    本文详细介绍了Unturned服务器的配置方法和消息设置技巧,帮助用户了解并优化服务器管理。同时,提供了关于云服务资源操作记录、远程登录设置以及文件传输的相关补充信息。 ... [详细]
  • 网络攻防实战:从HTTP到HTTPS的演变
    本文通过一系列日记记录了从发现漏洞到逐步加强安全措施的过程,探讨了如何应对网络攻击并最终实现全面的安全防护。 ... [详细]
  • 在现代网络环境中,两台计算机之间的文件传输需求日益增长。传统的FTP和SSH方式虽然有效,但其配置复杂、步骤繁琐,难以满足快速且安全的传输需求。本文将介绍一种基于Go语言开发的新一代文件传输工具——Croc,它不仅简化了操作流程,还提供了强大的加密和跨平台支持。 ... [详细]
  • MySQL 数据库迁移指南:从本地到远程及磁盘间迁移
    本文详细介绍了如何在不同场景下进行 MySQL 数据库的迁移,包括从一个硬盘迁移到另一个硬盘、从一台计算机迁移到另一台计算机,以及解决迁移过程中可能遇到的问题。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • UNP 第9章:主机名与地址转换
    本章探讨了用于在主机名和数值地址之间进行转换的函数,如gethostbyname和gethostbyaddr。此外,还介绍了getservbyname和getservbyport函数,用于在服务器名和端口号之间进行转换。 ... [详细]
  • 使用Vultr云服务器和Namesilo域名搭建个人网站
    本文详细介绍了如何通过Vultr云服务器和Namesilo域名搭建一个功能齐全的个人网站,包括购买、配置服务器以及绑定域名的具体步骤。文章还提供了详细的命令行操作指南,帮助读者顺利完成建站过程。 ... [详细]
  • 深入理解OAuth认证机制
    本文介绍了OAuth认证协议的核心概念及其工作原理。OAuth是一种开放标准,旨在为第三方应用提供安全的用户资源访问授权,同时确保用户的账户信息(如用户名和密码)不会暴露给第三方。 ... [详细]
  • 本文探讨了Hive中内部表和外部表的区别及其在HDFS上的路径映射,详细解释了两者的创建、加载及删除操作,并提供了查看表详细信息的方法。通过对比这两种表类型,帮助读者理解如何更好地管理和保护数据。 ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • 本文介绍如何在QT框架中使用QWebSocket和QTcpSocket实现SSL加密通信,涵盖单向认证设置。单向认证常见于Web通信场景,其中客户端验证服务端证书,而服务端不验证客户端证书。 ... [详细]
  • 本文介绍了如何使用PHP代码实现微信平台的媒体素材上传功能,详细解释了API接口的使用方法和注意事项,确保文件路径正确以避免常见的错误。 ... [详细]
author-avatar
jeanis
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有