https是什么。
超文本传输安全协议(英语:Hypertext Transfer Protocol Secure,缩写:HTTPS,常称为HTTP over TLS,HTTP over SSL或HTTP Secure)是一种通过计算机网络进行安全通信的传输协议。HTTPS经由HTTP进行通信,但利用SSL/TLS来加密数据包。HTTPS开发的主要目的,是提供对网站服务器的身份认证,保护交换数据的隐私与完整性。这个协议由网景公司(Netscape)在1994年首次提出,随后扩展到互联网上。历史上,HTTPS连接经常用于万维网上的交易支付和企业信息系统中敏感信息的传输。在2000年代晚期和2010年代早期,HTTPS开始广泛使用于保护所有类型网站上的网页真实性,保护账户和保持用户通信,身份和网络浏览的私密性。
维基百科上可以看出,https是用于互联网客服端与服务器交互的一个加密协议。
当然,这篇文章不是来讲述https协议的过程,浏览器与服务端几次握手,如何传输数据,与http之间的区别;也不是讲述如何实现一个https协议。这篇文章只是用来通俗的说法,来讲述https是如何做到加密的。
以前看过一个小品,夫妻俩吵架,双方都不想跟对方说话,正好来了个中间人,夫妻俩就让这个中间人来传话,但这个中间人不安好心,老公说一句"不吵了行不行",他传到老婆那就变成“你真丑”。这个现象就是典型的中间人攻击,劫持数据,篡改后再传递,http之间是明文通信,会轻而易举的被中间人攻击,所以是不安全的。
那么如何做到安全传输信息呢。两个字:加密。
大家都知道加密分为两种,
- 对称加密
- 非对称加密
一句话说明两者的区别:对称加密,加密解密使用相同密钥。非对称加密,加密解密使用不同密钥。
所以我们想要做到http信息安全,一定要选择非对称加密。
ok,当客户端想要获取数据时,服务端获将数据传输给客户端的同时,将非对称加密的私钥传递给客户端。当客户端准备传递给服务端数据的时候,使用这个私钥,加密数据之后,再次传递给服务端。这时候,如果有第三人在中间拦截信息,只能拦截到服务端传递给客户端的数据,客户端传递给服务端的数据,因为使用了密钥加密(非对称性加密,使用公钥加密的数据,只能用私钥解密),中间人无法破解,也就保证了一端数据安全。
那么如何保证服务器给传输到客户端的数据也安全呢,这就涉及到了一个名词数字证书,很多人都听说过数字证书,但是这个数字生证书从本质上是什么?下文我就介绍一下。
数字证书
公开密钥认证(英语:Public key certificate),又称公开密钥证书、公钥证书、数字证书(digital certificate)、数字认证、身份证书(identity certificate)、电子证书或安全证书,是用于公开密钥基础建设的电子文件,用来证明公开密钥拥有者的身份。此文件包含了公钥信息、拥有者身份信息(主体)、以及数字证书认证机构(发行者)对这份文件的数字签名,以保证这个文件的整体内容正确无误。拥有者凭着此文件,可向电脑系统或其他用户表明身份,从而对方获得信任并授权访问或使用某些敏感的电脑服务。电脑系统或其他用户可以通过一定的程序核实证书上的内容,包括证书有否过期、数字签名是否有效,如果你信任签发的机构,就可以信任证书上的密钥,凭公钥加密与拥有者进行可靠的通信。
关注数字证书理论可以直接移步wiki,下面讲一些通俗的说法。数字证书
数字证书是什么,其实可以理解为现实世界的身份证。身份证从哪里来的,国家;那么数字证书从哪里来的,从根证书颁发而来的,两者都是用来验证一个物质存在的身份的真实性。
那么身份证可以被伪造吗,可以;那么数字证书当然也可以被伪造。但是,伪造的身份证可以通过检查吗,从理论上显然不可以,那么伪造的数字证书可以通过检查吗,当查找链路发现不是根证书颁发的证书,就是一个不受保护的证书。
两者都一个相对安全稳定的端,国家身份证的数据库以及根证书存储位置。
现在我想知道根证书是如何给下游颁发子证书的呢。
非对称行加密有个特性,公钥加密的数据只能用私钥解密,而私钥加密的数据只能用公钥解密。所以说,根证书根据申请者的信息生成对应的公钥,发布给服务器,简单的说,这个公钥就可以叫做证书。
所以,当服务器传递给客户端信息的时候,我们使用这个公钥加密一段字符串(token),传递给客户端,这时候客户端进行解密这个字符串(token)并比较这个token是否生效,从而客户端(浏览器)就可以得知,当前的数据是否被劫持,就可以保证数据传递的安全性。
客户端的根证书从哪里来的?有一部分存储在操作系统的证书列表,也有存储在浏览器中。所以说,在操作系统中尽量少的去信任未知证书,如果错误添加,有可能就会造成伪造证书,以及中间人攻击的可能性。
最后用一张最简单的图片总结,https 是如何保证客户端与服务端通信的安全的。
后记
当然https比这复杂的要多,例如随机字符串,多次握手,以及对称加密密钥的传递。数字证书也更复杂,这里为了更浅显的总结并没有一一赘述。