HTTP协议

HTTP协议是互联网应用层的协议,用于浏览器端与服务端通信,网页应用就是HTTP协议。HTTP报文是基于TCP协议明文传输的,在通信过程中很容易被窃听,对用户传输的账户密码等隐私信息造成泄露,这就不安全,需要使用加密通道进行传输。

HTTPS协议

对称密钥加密

近代的加密算法都是公开的,而密钥是保密的,加密和解密都需要密钥,一方通过密钥和算法将明文加密成密文,而另一方通过密钥和算法进行解密,这种加密和解密使用同一个密钥,称为对称密钥加密。

然而在进行通信之前,需要通信的双方持有同一份密钥,但是如何将密钥传输给对方,如果密钥被截获,那么使用密文传输就没有意义了。如果能保证密钥安全的传输到另一方,那么信息也能安全的传输到另一方。使用对称密钥加密就存在问题了。

非对称密钥

非对称密钥加密

另一类加密算法是非对称加密,加密和解密密钥不同。服务端可以创建一对密钥,分别为私钥和公钥,公钥是公开的,使用公钥加密的数据,只有使用私钥才能解密,而通过公钥推导出私钥,现代技术很难成功。

服务器首先将公钥传输给客户端,客户端得到公钥后,将要传输的信息使用公钥加密,密文传输个服务端,只有持有对应的私钥的服务端才能解密这一段数据。即使密文和公钥已知,也很难获得原来的信息。

非对称密钥签名

非对称密钥的另一种用途是签名,同样是拥有一对非对称密钥,分别为私钥和公钥,将公钥公开。持有私钥的一方可以将信息加密,而加密后的密文可以使用公钥解密。由于私钥是私有的,能够别公钥解密的数据只有持有私用的一方可以发布,别人无法伪造。

混合加密机制

可信赖的第三方机构

首先浏览器访问服务端,服务端会将公钥发送给客户端,这时就存在一个问题,客户端如何确保接收到的公钥是真的来自服务端呢?因为客户端和服务端的通信会经过中间路由器,很难保证数据不会被篡改,这是就引入可信赖的第三方机构了。这个第三方机构是权威的,双方都可信的。首先服务端会创建自己的私钥和公钥,将自己的信息和公钥发送给第三方机构,申请证书,第三方机构会验证服务端的信息是否真实,然后将服务端的信息和公钥使用第三方机构自己的私钥加密,生成签名,也就是一份证书,发送给服务端。服务端接收到证书后,将证书保存。当客户端访问服务端的时候,服务端会向客户端传输证书。客户端得到证书后,用第三方机构的公钥进行解密,由于第三方机构是权威的,而且数量不多,浏览器一般会内嵌好一些第三方机构的公钥,这些公钥没有经过网络传输,也很难被篡改。客户端通过公钥解密后得到服务端信息和服务端公钥,如果服务端信息与自己要访问的服务端匹配,那么得到的服务端公钥也是可靠的,确实来自服务端。

加密传输

客户端得到服务端的公钥后,就可以与服务端进行通信了。但由于非对称加密算法比对称加密算法慢,就需要改进。客户端首先会随机生成一个字符串作为密钥,并且将密钥使用服务端公钥加密后,传输给服务端,服务端用自己的私钥解密数据,就可以得到密钥,这时双方都已经安全的获得了相同的密钥,就可以使用对称加密算法对传输的数据进行加密和解密。

HTTPS协议

客户端与服务端使用以上步骤得到的对称加密密钥进行通信,传输的还是原来的http报文,但传输更安全了,这就是HTTPS协议。