互联网应用的网络通信一般都是通过 HTTP,但 HTTP 是明文传输的,容易泄漏信息,所以大多数应用都会升级为 HTTPS。
HTTP 底层是用 TCP 传输的,HTTPS 就是在 TCP 和 HTTP 之间加了一层加密和认证的协议,这一层叫做 SSL/TLS。
为什么叫这个名字呢?
因为最早的时候是 SSL 协议,但是后来发现了漏洞,就改为 TLS 协议了,而且 TLS 协议也在不断的升级,从 1.1、1.2 到了现在的 TLS 1.3。
不管叫 SSL 还是叫 TLS,都是指的这一层。
这一层就实现了加密、身份认证,还有防篡改的功能。
加密很容易理解,就是通过一种加密算法对内容进行处理,生成密文,然后另一端通过解密算法把密文处理成原始内容。
但只有加解密算法还不行,得加入一些随机性,让每次都不一样,所以会有密钥的存在,每次先随机生成密钥,然后通信过程就用这个密钥配合加密算法来进行加解密。
这个密钥是随机生成的,所以只能一端生成以后告诉另一端。
那么问题来了,怎么把这个密钥安全的告诉另一端呢?
这就得用到一种特殊的加密算法 --- 非对称加密了。
这种加密算法特殊在有两个密钥,用一个密钥加密的数据只能另一个密钥解密,那么把一个密钥暴露出去,一个密钥留下,这样用留下的密钥加密的数据,别人都能解密,但是用暴露出去的密钥加密的数据,只有自己能解密。
这个暴露出去的密钥就叫做公钥,留下的密钥叫做私钥。
这样当别人想给你传递一些信息的时候,就通过你暴露出去的公钥对信息加密,别人都解密不了,只有你能解密。这就保证了信息传递的安全性。
就比如说上面提到的密钥传递问题,就可以通过这种公私钥的非对称加密机制来解决。
有的同学可能会问,既然基于公私钥的非对称加密机制能保证安全,为啥还要再传递别的密钥呢?
因为这种非对称加密太慢了,传递几次信息还行,频繁的用这种方式加解密数据的话效率太低了。所以一般只用这种方式来传递会话密钥,保证安全,然后后面用传递的会话密钥来进行数据加解密。
前面提到 TLS 层主要是实现了加密、身份认证、防篡改的功能。
加密是用对称加密的方式,用到的密钥通过基于公私钥的非对称加密机制来传递。
那身份认证怎么做呢?
其实也是通过公私钥的机制,刚才提到了公钥加密的内容只能私钥解密,这保证了信息的安全传递。
那反过来,私钥加密的数据,如果用公钥能解开,这不就证明了信息是你传递的么?因为私钥只有你有。
所以,私钥的加密又叫做签名,可以用来做身份的认证。
那用私钥加密什么呢?
一般是对传输