HTTPS加密(握手)过程

461次阅读  |  发布于2年以前

引言

HTTP是不安全的,只需要设定相应的DNS,做一个中间人攻击,再将修改后的数据返回,就可以达到篡改数据的目的(加入未经许可的广告)。 当我们切换HTTPS时候,运营商的这些小九九就施展不开了,服务端认证不通过,浏览器不会展示相应的页面数据;运营商实施搞的这一套东东也就不能在用户不知情的情况下搞起来了,解决办法是去除相应的受污染的DNS。

安全需求

在这里最重要的是前边几条

HTTPS简介

HTTPS(全称:Hypertext Transfer Protocol Secure 超文本传输安全协议),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。

共享密钥加密也称对称密钥加密。采用的是使用相同密钥对报文进行加密解密。 缺点:无法避免被网络监听泄漏密钥的问题。同时对于众多客户端的服务器来说还需要分配和管理密钥,对于客户端来说也需要管理密钥,增加设计和实现的复杂度,同时也降低了通信的效率。 非对称加密,公钥加密只能通过对应的私钥解密,私钥加密只能通过对应的公钥解密。 缺点:公开密钥加密(非对称加密)安全性高,伴随着加密方式复杂,处理速度慢的问题。如果我们的通信都是用公开密钥的方式加密,那么通信效率会很低。 采用非对称加密因为安全性 采用对称加密是因为他加解密速度快 在交换密钥对环节使用公开密钥加密方式(防止被监听泄漏密钥)加密共享的密钥,在随后的通信过程中使用共享密钥的方式使用共享的密钥进行加解密。

认证方式实现

数字证书 数字签名是附加在报文上的特殊加密校验码,可以证明是作者编写了这条报文,前提是作者才会有私钥,才能算出这些校验码。如果传输的报文被篡改,则校验码不会匹配,因为校验码只有作者保存的私钥才能产生,所以前面可以保证报文的完整性。 数字证书认证机构(Certificate Authority CA)是客户端和服务器双方都可信赖的第三方机构。

服务器的运营人员向数字证书认证机构提出证书认证申请,数字证书认证机构在判明申请者的身份之后,会对已申请的公开密钥做数字签名,然后分配这个已签名的公开密钥,并将该公开密钥放入公钥证书(也叫数字证书或证书)后绑定在一起。服务器将这份有数字认证机构颁发的公钥证书发总给客户端,以进行公开密钥加密方式通信。 数据完整性 数字签名是只有信息发送者才能产生的别人无法伪造的一段文本,这段文本是对信息发送者发送信息真实性的一个有效证明,具有不可抵赖性。

报文的发送方从报文文本生成一个128位的散列值(或称为报文摘要活哈希值),发送方使用自己的私钥对这个摘要值进行加密来形成发送方的数字签名。然后这个数字签名将作为报文的附件一起发送给报文的接收方。报文的接收方首先从接收到的原始报文中计算出128位的散列值,再用发送方的公钥来对报文附加的数字签名进行解密。如果两次得到的结果是一致的那么接收方可以确认该数字签名是发送方的,同时确认信息是真实的 。

HTTPS其实是有两部分组成:HTTP + SSL / TLS,也就是在HTTP上又加了一层处理加密信息的模块。服务端和客户端的信息传输都会通过TLS进行加密,所以传输的数据都是加密后的数据。

  1. 传统的HTTP协议通信:传统的HTTP报文是直接将报文信息传输到TCP然后TCP再通过TCP套接字发送给目的主机上。
  2. HTTPS协议通信:HTTPS是HTTP报文直接将报文传输给SSL套接字进行加密,SSL加密后将加密的报文发送给TCP套接字,然后TCP套接字再将加密后的报文发送给目的主机,目的主机通过TCP套接字获取加密后的报文给SSL套接字,SSL解密后交给对应进程。

SSL

SSL工作在OSI七层模型中的表示层,TCP/IP 四层模型的应用层。 SSL 基于TCP,SSL不是简单地单个协议,而是两层协议;SSL记录协议(SSL Record Protocol)为多种高层协议(SSL握手协议,SSL修改密码参数协议,SSL报警协议)提供基本的安全服务。 HTTP是为Web客户端/服务器交互提供传输服务的,它可以在SSL的顶层运行;SSL记录协议为SSL链接提供两种服务,1. 机密性:握手协议定义了一个共享密钥,用于SSL载荷的对称加密。2. 消息完整性:握手协议还定义了一个共享密钥,它用来产生一个消息认证码(Message Authentication Code,MAC)。

SSL记录协议操作

HTTPS加密请求(一次握手)过程

  1. 客户端发起握手请求,以明文传输请求信息,包含版本信息,加密-套件候选列表,压缩算法候选列表,随机数,扩展字段等信息(这个没什么好说的,就是用户在浏览器里输入一个HTTPS网址,然后连接到服务端的443端口。)
  2. 服务端的配置, 采用HTTPS协议的服务器必须要有一套数字证书,可以自己制作,也可以向组织申请。区别就是自己颁发的证书需要客户端验证通过,才可以继续访问,而使用受信任的公司申请的证书则不会弹出提示页面。这套证书其实就是一对公钥和私钥。如果对公钥不太理解,可以想象成一把钥匙和一个锁头,只是世界上只有你一个人有这把钥匙,你可以把锁头给别人,别人可以用这个锁把重要的东西锁起来,然后发给你,因为只有你一个人有这把钥匙,所以只有你才能看到被这把锁锁起来的东西。

客户端和服务端之间的加密机制

Copyright© 2013-2020

All Rights Reserved 京ICP备2023019179号-8