简单的说http+加密+认证+完整性保护=https
传统的Http协议是一种应用层的传输协议,Http直接与TCP协议通信。其本身存在一些缺点:
1、Http协议使用明文传输,容易遭到窃听。
2、Http对于通信双方都没有进行身份验证,通信的双方无法确认对方是否是伪装的客户端或者服务端。
3、Http对于传输内容的完整性没有确认的办法,往往容易在传输过程中被劫持篡改。
因此,在一些需要保证安全性的场景下,比如涉及到银行账户的请求时,Http无法抵御这些攻击。Https则可以通过增加的SSL\TLS,支持对于通信内容的加密,以及对通信双方的身份进行验证。
1.Https的加密 近代密码学中加密的方式主要有两类:
对称秘钥加密
对称秘钥加密是指加密与解密过程使用同一把秘钥。这种方式的优点是处理速度快,但是如何安全的从一方将秘钥传递到通信的另一方是一个问题。
非对称秘钥加密
非对称秘钥加密是指加密与解密使用两把不同的秘钥。这两把秘钥,一把叫公开秘钥,可以随意对外公开。一把叫私有秘钥,只用于本身持有。得到公开秘钥的客户端可以使用公开秘钥对传输内容进行加密,而只有私有秘钥持有者本身可以对公开秘钥加密的内容进行解密。这种方式克服了秘钥交换的问题,但是相对于对称秘钥加密的方式,处理速度较慢。
SSL\TLS的加密方式则是结合了两种加密方式的优点。首先采用非对称秘钥加密,将一个对称秘钥使用公开秘钥加密后传输到对方。对方使用私有秘钥解密,得到传输的对称秘钥。之后双方再使用对称秘钥进行通信。这样即解决了对称秘钥加密的秘钥传输问题,又利用了对称秘钥的高效率来进行通信内容的加密与解密。
2.Https的认证 SSL\TLS采用的混合加密的方式还是存在一个问题,即怎么样确保用于加密的公开秘钥确实是所期望的服务器所分发的呢?也许在收到公开秘钥时,这个公开秘钥已经被别人篡改了。因此,我们还需要对这个秘钥进行认证的能力,以确保我们通信的对方是我们所期望的对象。
目前的做法是使用由数字证书认证机构颁发的公开秘钥证书。服务器的运营人员可以向认证机构提出公开秘钥申请。认证机构在审核之后,会将公开秘钥与共钥证书绑定。服务器就可以将这个共钥证书下发给客户端,客户端在收到证书后,使用认证机构的公开秘钥进行验证。一旦验证成功,即可知道这个秘钥是可以信任的秘钥。
3、Https的通信流程
1.1、客户端发出加密通信请求 ClientHello
提供:
1,协议版本(如 TSL1.0)
2,随机数 1(用于生成对话密钥)
更多录播视频+架构学习资料免费领取请加 Android 开发高级技术交流群
3,支持的加密方法(如 RSA 公钥加密)
4,支持的压缩方法
1.2、服务器回应 SeverHello
回应内容:
1,确认使用的加密通信协议版本(TSL1.0)
2,随机数 2(用于生成对话密钥)
3,确认加密方法(RSA)
4,服务器证书(包含非对称加密的公钥) 5,(可选)要求客户端提供证书的请求(这步是单向认证和双向认证的区别)
1.3、客户端验证证书 如果证书不是可信机构颁布,或证书域名与实际域名不符,或者证书已经过期,
就会向访问者显示一个警告,是否继续通信
1.4 、客户端回应
证书没有问题,就会取出证书中的服务器公钥
然后发送:
1,随机数 3(pre-master key,此随机数用服务器公钥加密,防止被窃听)
2,编码改变通知(表示随后的信息都将用双方商定的方法和密钥发送) 3,客户端握手结束通知
1.5、双方生成会话密钥
双方同时有了三个随机数,接着就用事先商定的加密方法,各自生成同一把“会 话密钥” 服务器端用自己的私钥(非对称加密的)获取第三个随机数,会计算生成本次所 用的会话密钥(对称加密的密钥),如果前一步要求客户端证书,会在这一步验 证
1.6、服务器最后响应
服务器生成会话密钥后,向客户端发送: 1,编码改变通知(后面的信息都用双方的加密方法和密钥来发送) 2,服务器握手结束通知
至此,握手阶段全部结束,接下来客户端与服务器进入加密通信,用会话密钥加
密内容
网友评论