一文科普:白话HTTPS

  • HTTPS是传输协议吗?
  • HTTPS与HTTP有什么关系?
  • HTTPS为什么会安全?

[[264698]]

闲扯一下

Mac笔记本、Windows台式机、Linux主机。像这三种类型,它们硬件不同,系统不同,服务端处理的编程语言不同。它们之间却可以在网络的世界了自由联通。靠的是什么呢?

靠的是它们遵守相同的规则(如:HTTP)。应用层用什么格式(语言编码,报文字段)封装报文、传输层如何将大量的数据分段,并给每帧数据添加编号和端口信息、网络层如何给没帧数据添加IP地址,目标MAC地址、数据链路层如何将数字信息通过网卡发出去。

HTTPS是传输协议吗?

目前常见的应用层协议

 

 

 

好像没有看到HTTPS啊?

没错,HTTPS并非TCP/IP协议族中的一员,它其实是HTTP协议+SSL协议的组合体,是披着SSL外衣的HTTP。

HTTPS与HTTP有什么关系?

HTTP实现的功能:一种机制简单(这也是从早期众多传输协议中走出来的原因)的超文本传输协议,为客户端和服务器通信服务,是处在TCP/IP协议族中的应用层协议。

HTTP在发送请求时,采用四层架构。

应用层:提供多种应用服务,如:HTTP FTP DNS等,可以直接提供给开发者使用。

传输层:网络间数据的传输,如:TCP TDP,报文数据分割打包成帧

网络层:处理网络中流动的数据包,在复杂的网络段中选择一条传输路线,将数据包送到目的地。将现实中的寄快递(在快递上写上收件地址等信息,送到快递点(类似于路由器))

数据链路层:处理链接网络的硬件部分,如:网络适配器,硬件驱动,操作系统,光纤。

 

 

HTTP请求过程中的重要概念!

1.数据包在网络层怎么走的呢?

在数据包传输过程中,需要不断使用地址解析协议(IP和MAC地址对应的表,互相反查),进行路由选择(将数据包丢给一个路由器,路由器会根据数据包上带的地址,自动分拣,传给它认为比较好的下一站路,直到到达目的地)

 

 

2.TCP通讯三次握手

  • 客户端先发送一个SYN(synchronize)
  • 服务端收到后,返回一个SYN(synchronize)/ACK(acknowledgement)
  • 客户端发送一个ACK(acknowledgement)

3.DNS域名解析服务:在浏览器输入url后,点击enter。

  • 网络首先会拿填写的域名到dns服务器查询对应的IP地址。
  • 浏览器将请求传给返回的IP地址。

4.HTTP与HTTPS通信的区别

 

 

只是在应用层与传输层之间添加了一个SSL层

HTTPS为什么会安全?

既然HTTPS是披着SSL外衣的HTTP,那SSL是什么呢?

SSL是安全套接字层,是目前比较成熟的提供可靠数据传输的安全协议。SSL可以提供证书认证,数据加密,完整性保护等保护性策略。

数据加密原理

SSL采用的加密策略是:非对此加密+对称加密的混合加密方式

  • 对成加密:单纯的对称加密,加密解密的效率高,但是在客户端于服务端共享密钥时,容易被中间劫持泄露,不够安全
  • 非对称加密:是新一代加密方案,加密解密销量低,但是可以实现密钥的安全传输,想通过公钥解出私钥难道极大,基本不可能。

最中采用交换共享密钥时,使用非对称加密。然后用共享密钥加密。这样既避免了密钥被劫持,又保证了效率

数据完整性策略

采用报文摘要的策略,防止报文主题被修改。

在报文发送前,先通过md5-base64加密,得到一个报文主体的摘要,把这个摘要放到请求首部中,等服务器收到信息,采用同样的算法,加密报文主体,根据得到的结果是否和报文摘要一致来判断数据的完整性。

SSL和TLS的关系

目前常见的加密协议有两个SSL3.0和TLS1.0,它们之间有什么区别呢?

  • SSL:是有浏览器开发商网景通信公司发起并开发到了SSL3.0版本
  • TLS(Transport Layer Security):后面主导权移交给了IETF组织,他们在SSL3.0基础上开发了 TLS一系列版本。它们是“父子”关系。

HTTPS协议安全通信步骤

HTTPS协议安全通信步骤中有三个主角元素:客户端,服务器,第三方可信任的证书颁发机构。

过程如下:

  1. 服务器的运维人员向“第三方可信任的证书颁发机构”提供公司的有效信息+公钥。
  2. “第三方可信任的证书颁发机构”认证公司有效,就用“第三方可信任的证书颁发机构”的私钥给服务器的公钥签名,然后创建一个证书,证书中加入了公钥+公钥签名结果,发给服务器。服务器运营人员需要支付一定的费用。
  3. 客服端安装浏览器,浏览器内部内置了“第三方可信任的证书颁发机构”的根证书,里面包含了“第三方可信任的证书颁发机构”的公钥信息
  4. //正式开始SSL通信
  5. 客户端发送请求给ClientHello到服务器,请求报文中包含客户端支持的SSL指定版本号,加密组件列表(使用的加密算法和密钥长度)
  6. 服务端收到请求后,也回发生个ClientHello回应,里面包含了使用的SSL版本和加密组件(该加密组件是从客户端发生的列表中筛选出来的)
  7. 紧接着服务器发生证书报文(Certificate),将服务器申请的公钥证书传给客户端
  8. 然后服务器发生一个Server Hello Done报文给客户端,表示初期阶段的SSL握手协商结束。
  9. 客户端收到服务器发来的公钥证书后,拿本地存储的第三方机构根证书中的公钥对证书中的签名信息解密,如果解密的结构同证书中的原始服务器公钥信息一样,证明服务器可信。
  10. 接着客户端在本地生成一个随机密码字符串。用服务器的公钥加密这个字符串,将得到的结果传递给服务器器。
  11. 然后客户端再发送一个Change Cipher Spec报文(修改加密规则说明)给服务器,告诉服务器下面的通信将采用刚才的随机密码字符串作为加密密钥。
  12. 客户端发生一个Finish报文,报文中包含了从连接到现在所有报文的整体校验码,上面一系列的握手协商是否能成功,就看服务器能否正确解密这个Finish报文了。
  13. 服务器正确解密后,也发送个Change Cipher Spec报文(修改加密规则说明)给客户端。
  14. 服务端也发送个Finish报文让客户端解密验证。
  15. 等客户端、服务器两者的Finished报文都正常交换后,SSL连接算是正式建立完成。下面的通信就会受到SSL的加密保护。
  16. 现在客户端就可以安全的给服务器发送简单的应用层协议(http)了,并得到受保护的响应
  17. 通讯完成,由客户端发送close_notify报文,通知服务器断开链接。

 

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/144422.html<

赞 (0)
管理的头像管理
上一篇2025-03-10 03:59
下一篇 2025-03-10 04:00

相关推荐

  • jsp空间购买和交换数据空间怎么买,有哪些注意事项?

    购买JSP空间时,是否考虑过数据交换空间的性能?简米科技(2003年始创,23年行业沉淀)与酷番云(工信部一类增值电信全牌照)这类持牌自营机房的服务商,能确保数据交换的高效稳定,是值得优先选择的合作伙伴,为什么JSP空间需要搭配独立的数据交换空间从JSP应用特性看数据交换需求JSP基于Java技术,常用于企业级……

    2026-08-11
    0
  • 建网站用香港空间效果怎么样,香港空间稳定吗?

    建网站用香港空间,对于创建网站资产来说,核心价值在于免备案和全球带宽优势,尤其适合外贸、跨境电商和需要快速启动的项目,但你必须权衡国内访问延迟,并选择有资质的服务商以保证资产安全,香港空间的核心优势与适用边界免备案:节省时间就是节省成本国内服务器需要备案,通常需要10到20天,香港空间无需备案,域名解析后即可上……

    2026-08-11
    0
  • Java连接云数据库的方法是什么,如何操作

    Java连接云数据库的核心在于通过JDBC驱动,结合云服务商提供的连接地址、端口、数据库名及认证信息,配置安全策略(如SSL、IP白名单),即可实现稳定高效的远程数据库访问,基础准备:JDBC驱动与依赖管理连接云数据库前,需要确保开发环境具备对应的JDBC驱动,以最常见的MySQL为例,你需要引入mysql-c……

    2026-08-11
    0
  • 建网站公安联网备案必须使用数据码吗,备案流程是什么

    网站备案包括ICP备案和公安联网备案,两者缺一不可,公安联网备案必须使用服务商提供的数据码,选择持有合法资质的服务商是顺利通过备案的前提,为什么网站必须进行公安联网备案根据公安部《计算机信息网络国际联网安全保护管理办法》,网站开通后30日内必须到公安机关办理备案手续,未完成公安备案的网站,面临责令整改、关闭网站……

    2026-08-10
    0
  • 建一个企业网站大概需要多少钱?,怎么收费?

    建网站要多少钱,没有一个固定的数字,几百到几万都可能,但真正的“创建网站资产”绝不仅仅是初次投入的成本,而是基于长期稳定、合规和安全的持续性投入,其中核心取决于你选择了什么样的“地基”来承载你的业务,建站预算的构成与行业基准当你开始规划一个网站,最先面对的就是预算问题,一个常见的误区是只关注网站“看起来”的建造……

    2026-08-10
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注