赞
踩
HTTPS(HyperText Transfer Protocol Secure)是一种安全的通信协议,用于在计算机网络上安全地传输超文本(如网页、图像、视频等)和其他数据。它是 HTTP 协议的安全版本,通过使用加密技术来保护通信的安全性和隐私性。
HTTP 是超文本传输协议,信息是明文传输,存在安全风险的问题。HTTPS 则解决 HTTP 不安全的缺陷,在 TCP 和 HTTP 网络层之间加入了 SSL/TLS
安全协议,使得报文能够加密传输。HTTPS 在 TCP 三次握手之后,还需进行 SSL/TLS
的握手过程,才可进入加密报文传输。
HTTP 由于是明文传输,所以安全上存在以下三个风险:
HTTPS 在 HTTP 与 TCP 层之间加入了 SSL/TLS
协议,可以很好的解决了上述的风险:
HTTPS 是如何解决上面的三个风险的?
1. 对称加密和非对称加密
在正式开始讲解加密的方式之前,这里对「对称加密」和「非对称加密」做一些补充:
对称加密,双方持有相同的密钥,加密和解密都是使用这个密钥
非对称加密,服务器持有私钥,而向客户端去分发公钥,这两个密钥可以双向加解密的,比如可以用公钥加密内容,然后用私钥解密,也可以用私钥加密内容,公钥解密内容。
非对称加密算法常常用于**「私钥加密,公钥解密」的方式**来验证 消息发送者 的方式,比如常见的数字签名算法,采用的就是这种方式,大致流程是这样的:
2. 混合加密
HTTPS 首先解决的是交互信息被窃取的问题,即本次会话中发送的所有消息 只有 双方能够解读。
HTTPS 采用的是 对称加密 + 非对称加密 的混合方法来加密双方的通信。
为什么要采用混合加密的方法呢?无论使用哪种方法,双方都要去 互通 密钥,既然有这个互通的环节,那这个消息就有可能被拦截,带来了伪造消息等风险。
所以所以要保证 正式对话 的时候使用的密钥是加密传递的。
如果对公钥理解不深的话,很可能会有这样的疑问:如果公钥被拦截,那我不就可以假装这个用户给服务器发信息了吗?
实际上,公钥只是建立安全链接的方式,并不代表用户的信息,客户端的身份验证通常是在建立安全连接之后的一个步骤,通过额外的验证机制来完成。这些机制可能包括使用用户名和密码进行身份验证、使用客户端证书进行身份验证等。
也就是拿到了公钥其实就是拿到给服务器建立连接的机会,意义并不大。
3. 数字证书
实现客户端和服务器之间通信只有双方能解密,但有没有可能这个服务器本身就是伪造的呢?
我给一个假的服务器唰唰唰把我的个人信息都发过去了,造成的危害就极大了。
其实要解决这个问题也很简单,就是服务器要有证明自己身份的证书,这个证书证明了它是一个合法合规的服务器,如果使用这种服务器做一些违法的事情,根据注册信息来溯源也会非常简单;客户端可以根据这个证书来验证服务器的可靠性,拿到数字证书,验证完之后,客户端就知道这个服务器靠谱,可以发送信息了。
每个证书背后都要有一个权威的机构,数字证书也不例外,在计算机里,这个权威的机构就是 CA (数字证书认证机构),注册 CA 证书需要如下的信息:
那还有个问题,数字证书能否被伪造呢?只要拿到上面的部分信息就可以伪造了,那来看看哪些情况我们可以伪造证书(笑):
好像没有哪个是好实现的,而且还不一定有效,所以数字证书可以极大的保证通信的安全性。
4. 数字证书的签发和验证
证书签发流程:
数字证书的有效期结束后,需要再次申请并获取新的数字证书,以保持通信的安全性和有效性。
证书验证流程:
签发证书的时候,CA 使用签名加密的其实是通过证书信息生成的哈希值,作为一个签名使用,而不是加密整个证书,用户通过公钥对签名解密,再去进行验证就可以保证 证书没有被篡改过。
然后用户对证书的验证其实是一个信任链的过程,即 根证书 => 中间证书 => 实际的证书,证书的签发通常不是由根证书签发的,而是借助中间的证书,客户端在验证的时候只需要查询中间证书是否信任本次发送的证书即可。
当用户收到一个证书的时候,先去检测它的上层的证书是哪个,直到请求到根证书,而用户会持有一个根证书清单,请求到根证书后回去验证证书是否在这个清单上。
然后再去检测根证书是否信任下层的证书,逐次检查直到检查到服务器发送来的证书,这样就能验证证书的有效性了。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。