本文尝试从以下概念简单介绍下https
假设A和B通过web进行通信,由于http是明文协议,双方发送的信息相当于在网上裸奔,双方的通信内容能够轻易的被窃听、篡改和冒充,因此,我们期望对通信加密。常见的加密方法包括对称和非对称,将会以此讲解彼此的优缺点。
A和B通信的内容可以通过秘钥进行加密传输,只需要双方提前约定好加密算法和秘钥即可,比如常见的DES、AES-GCM算法,通信过程如下图所示:
对称加密有个明显的缺陷就是秘钥本身如何进行保密和安全传输呢?只要三方窃取到秘钥,则可以轻易破解密文。
解决办法就是通过非对称加密。
不同于对称加密,非对称加密有一对秘钥,一个是保密的,称为私钥,一个是公开的,称为公钥。私钥加密的数据只有公钥才能解开,公钥加密的数据只有私钥才能解开,这个特性非常重要,因为不需要传输私钥了,而公钥是公开的,可以随便传播,常见的算法实现包括:RSA、DSA、ECDSA、 DH、ECDHE等。但是非对称加密有个重大缺陷就是计算速度远慢于对称加密。
注意这里其实还有一个问题,就是如何证明你的公钥是你的呢,比如典型的中间人攻击。
回到上小节提到的问题,如何证明你的公钥是你的呢?中间人攻击就是通过伪造公钥达成窃取通信数据的目的,过程如下图所示:
图中pa表示A的公钥,pc表示C的公钥,sc表示C的私钥,sa表示A的私钥。可见中间人C通过伪造公钥的办法成功截取了A和B的通信内容。那么如何解决公钥证明的问题?
为了解决公钥证明的问题,先思考下现实世界中你是如何证明你是你的?通常有如下办法:
按着这个思路,网络世界也需要一个认证中心(CA),提供一个证书,证书里面记录了你的公钥和其他相关信息,该证书能够证明你是你自己,这就是数字证书。
类似于公正材料有公证处的盖章,数字证书也需要认证中心盖章,即数字签名。并将公钥和其他基础信息,通过hash算法(例如sha1)生成证书摘要,然后通过CA的私钥加密证书摘要,得到数字签名。最后将A的公钥、其他信息和数字签名组合成数字证书,过程如下图:
相应的,判断数字证书是否正确的过程如下,首先通过CA的公钥解密证书中的数字签名得到证书摘要1,同时用相同的hash算法计算证书中的公钥和其他信息得出证书摘要2,比较证书1和2,即可判断证书是否正确。
但是这里仍然有问题,如何保证CA的真实性?CA的公钥也存在被篡改的可能。似乎遇到了鸡生蛋蛋生鸡的问题。
解决办法如下:
TLS是一种安全协议,是SSL的标准化版,实现了众多对称和非对称加密算法,是应用层协议,与其他应用层协议无耦合,因此TLS可以轻易的嵌入其他协议完成安全加密传输的目的。
TLS最关键的是握手过程,主要完成了下面2件事
图片来自https://zh.wikipedia.org/zh/File:SSL_handshake_with_two_way_authentication_with_certificates.svg
下面我们可以回答什么是https了:
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。