HTTP协议因为其轻、小、快、简单,所以在全世界普及开来,各种应用都离不开它。但是随着业务复杂度的提高,HTTP的这些优点逐渐成为了短板。所以就开始各种打补丁,比如因为HTTP是无状态的协议,所以为了管理状态而诞生的Cookie。这篇文章要说的是其中一个为了安全而诞生的超级补丁SSL(HTTPS)。
因此,可以说HTTPS就是穿着SSL马甲的HTTP。
TLS是以SSL为原型开发的协议,有时会统一称为SSL协议。 HTTPS并不是应用层的一种新协议,只是普通HTTP协议在接口部分使用SSL(Secure Socket Layer,安全套接层)和TLS(Transport Layer Security,安全传输层)协议而已。 通常,HTTP直接与tcp协议进行通信,当使用SSL时,则HTTP先和SSL通信,再由SSL和TCP进行通信,SSL是独立于HTTP的协议,所以除了HTTP以外,其他应用层协议也可以和SSL配合使用(如SMTP和Telnet)。
这里的对称描述的是加解密的密钥,如果加密和解密密钥相同,则是对称加密,反之则是非对称加密。下面说一下两种加密方式的优缺点(只是针对用在HTTPS协议方面的优缺点),具体的加密算法有很多,感兴趣的推荐看一下《现代密码学趣味之旅》,一本科普一样的密码书,不像其他密码书那样全是数学晦涩难懂。
即使使用上述的非对称加密方式进行加密,还是有一个问题,那就是无法确认公开的密钥就是货真价实的通信对方的公开密钥。有可能公钥在传输过程中已经被攻击者替换掉了。 为了解决这个问题,证书应运而生。证书也叫公开密钥证书,是由数字证书认证机构(CA,Certificate Authority)和其相关机构颁发的。以下是数字证书认证机构的业务流程:
这里有一个比较棘手的问题,认证机构的公钥如何发送给客户端?一般现在主流浏览器都是在内部植入了认证机构的公钥。 还有一点就是客户端也有证明身份的客户端证书,比如银行的网银网盾。
一般面试的时候面试官都喜欢问HTTPS的整个通信步骤。