我们都知道http是一种协议,只要通信的双方都遵守这个协议,http就有用武之地。比如咱们常用的微信、支付宝等软件。http有几个很明显的特点:无连接,无状态,明文,不安全。这些特点在某些场景中展现了http简单高效灵活的优势,但在某些对安全性比较高的场景就显得不足(比如记录个人登录信息,在线支付等)。无状态的问题通过cookie机制可以得到解决,但是明文不安全http是无能为力的,这就诞生了https。
https协议出现的根本原因就是为了解决http的不安全,它是在http的基础上增加了数据加密,相当于对http进行了升级。在数据进行传输之前,对数据进行加密,然后再发送到服务器。这样,就算数据被第三者所截获,传输的信息也是安全的,因为传输的数据是加密的。
为了深入了解https是如何保证传输的安全性,就必须先要明确安全的本质是什么,它的本质包含哪几个要素,然后我们再一一来看这几个安全要素在https是如何体现的。通常来说一个通信过程必须具备以机密性、完整性、身份认证性和不可否认性我们才可以认为它是安全的。
机密性是指信息只能让可信的人访问,其余人是不可见的,这里指的不可见是传输信息通过加密等手段变成毫无意义的字符序列;完整性是指数据在传输的过程中没有被篡改,原原本本保持原样,没有被添加也没有减少;身份认证是指确认对方身份的真实性,确保你发送的数据是真的发送给了你要发送的人;最后是不可否认性,是要保证整个通信事务的真实性,无论是发送方还是接收方都不能对自己曾经发生的通信事实进行否认。
一个安全的通信过程所必要的因素有很多,但上述四点是我们必要的。那么https是如何保证通信过程的安全性呢?这就引出了本文最重要的主角SSL/TLS。https没有对原有的http进行修改,只是在传输层和应用层之间加了一个安全层即SSL/TLS,即http over ssl,所有的安全相关的处理都在这一层实现。
通过上面安全性的要求想必已大体清楚ssl层主要的功能有哪些了,没错,ssl层主要功能就对应着上述的四个要素。
1、机密性:采用混合加密技术(结合非对称加密和对称加密技术)对内容加密,中间者无法直接查看明文内容。
2、完整性:通过摘要算法对数据进行校验防止传输的内容被中间人冒充或者篡改。
3、身份认证:通过证书认证客户端访问的是自己的服务器。
4、不可否定性:通过数字签名实现身份认证和不可否认。
本文主要由http的一些特性引出了它的安全性问题,然后讨论了安全性的四个必备要素,和https的基本功能,简单来说https就是在应用层和传输层中间加了一道验证的门槛,以保证数据安全开发的主要目的。