另外,SSL 是独立于 HTTP 协议的,所有运行在应用层的协议都可以配合 SSL 协议使用。可以说,SSL 协议是当今世界上应用最为广泛的网络安全技术。
那么,针对上述 HTTP 的三个安全性问题,我们来看看 HTTPS 或者说 SSL 到底提供了哪些解决方案。
① 加密这个上文也提到了,既然无法阻止被窃听,那么我就把我的内容加密起来,让你无法破解。那么,既然发送方对通信内容进行了加密,接收方接收到这个被加密过的内容,一定要知道对应的解密手段。
在讲解下述的几种加密方法之前,我们先理解密钥的概念。所谓密钥,就是钥匙,加密方有一把密钥,用来上锁,解密方也拥有一把密钥,用来解锁。而且加密方和解密方使用的密钥不一定是同一把。
共享密钥加密加密和解密使用同一密钥的方式称为共享密钥加密(Common Key crypto system),也称做对称密钥加密(这个更好理解)。
以共享密钥加密时必须将密钥也发送给对方。显然,如果通信双方都各自持有同一个密钥,且没有别人知道,则两方的通信安全是可以被保证的(除非密钥被破解)。
那么,最大的问题就是如何保证这个密钥的安全传输,不被外部攻击者知道。如果由服务器生成一个密钥并传输给浏览器,这个传输过程中密钥被攻击者劫持,那么之后攻击者就能用这把密钥解开双方传输的任何内容。
发送密钥就有被窃听的危险,但不发送,对方就不能解密。怎么样才能安全的发送密钥?解决这个问题,我们就需要公开密钥加密(非对称密钥加密)。
公开密钥加密公开密钥加密很好的解决了共享密钥加密的困难。
公开密钥加密需要一组非对称的密钥对,分别是公钥 public key 和私钥 private key。顾名思义,公钥可以随意发布,任何人都可以获得,而私钥不能让除通信双方外的其他任何人知道。这两个密钥是成对出现的,公钥加密的内容需要对应的私钥解密。
举个例子:客户端(浏览器)想要给网站服务器发送消息
- 首先,网站服务器持有一组公钥和私有,它会把自己的公钥明文传输给客户端
- 客户端利用这个公钥给自己的消息进行加密,然后传输给服务器,这时候就算被攻击者截获,由于攻击者没有对应的私钥也无法解密该内容
- 网站服务器收到后,使用这个公钥对应的私钥进行解密
利用这种方式,不需要发送解密需要的私钥,也就不必担心私钥被攻击者盗走
混合加密方式上述公开密钥加密的方式虽然安全,但是相比于不那么安全的共享密钥加密方式来说,其处理速度要慢很多。HTTPS 综合这两种加密方式的优势,使用共享密钥加密要发送的信息,使用公开密钥加密这个共享密钥,这样就减少了公开加密的次数。举个例子:
- 某网站服务器拥有一组用于公开密钥加密的非对称密钥:公钥 A1、私钥 A2
- 浏览器向网站服务器请求,服务器把公钥 A1 明文给传输浏览器
- 接收到这把公钥 A1 后,浏览器随机生成一个用于共享密钥加密(对称加密)的密钥 X,用公钥 A1 加密后传给服务器。这个阶段,即便被攻击者截获,由于攻击者没有对应的私钥也无法解密该内容
- 服务器拿到后用对应的私钥 A2 解密得到密钥 X(以上这些阶段就是公开密钥加密)
- 这样双方就都拥有密钥 X 了,且别人无法知道它。之后双方之间所有的数据传输都使用密钥 X 进行加密和解密即可(这个阶段就是共享密钥加密)