HTTPS(HTTP Secure)是一种构建在 SSL 或 TLS 上的HTTP协议。 简单的说,HTTPS 就是 HTTP 的安全版本。SSL(Secure Sockets Layer)以及继任者 TLS(Transport Layer Security)是一种安全协议,为网络通信提供来源认证、数据加密和报文完整性检测,保障通信的保密性和可靠性。HTTPS协议的 URL 都以 “https://”开头,在访问某个 Web 页面时,客户端会打开一条到服务器 443 端口的连接。
HTTP和HTTPS
之所以说HTTP不安全,是由于以下3个原因导致的:
HTTP的风险
很多介绍 HTTPS 的文章一上来就给你讲实现细节。个人觉得:这是不好的做法。一上来就给你讲协议细节,你充其量只能知道 WHAT 和 HOW,无法理解 WHY。
因为是先有 HTTP 再有 HTTPS。所以,HTTPS 的设计者肯定要考虑到对原有 HTTP 的兼容性。这里所说的兼容性包括很多方面。比如已有的 Web 应用要尽可能无缝地迁移到 HTTPS;比如对浏览器厂商而言,改动要尽可能小。
基于“兼容性”方面的考虑,很容易得出如下几个结论:
打个比方:如果原来的 HTTP 是塑料水管,容易被戳破;那么如今新设计的 HTTPS 就像是在原有的塑料水管之外,再包一层金属水管。一来,原有的塑料水管照样运行;二来,用金属加固了之后,不容易被戳破。
前面说了,HTTPS 相当于是“HTTP over SSL”。如果 SSL 这个协议在“可扩展性”方面的设计足够牛逼,那么它除了能跟 HTTP 搭配,还能够跟其它的应用层协议搭配。岂不美哉?
现在看来,当初设计 SSL 的人确实比较牛。如今的 SSL/TLS 可以跟很多常用的应用层协议(比如:FTP、SMTP、POP、Telnet)搭配,来强化这些应用层协议的安全性。
接着刚才打的比方:如果把 SSL/TLS 视作一根用来加固的金属管,它不仅可以用来加固输水的管道,还可以用来加固输煤气的管道。
HTTPS 需要做到足够好的保密性。说到保密性,首先要能够对抗嗅探(行话叫 Sniffer)。所谓的“嗅探”,通俗而言就是监视你的网络传输流量。如果你使用明文的 HTTP 上网,那么监视者通过嗅探,就知道你在访问哪些网站的哪些页面。
嗅探是最低级的攻击手法。除了嗅探,HTTPS 还需要能对抗其它一些稍微高级的攻击手法——比如“重放攻击”。
除了“保密性”,还有一个同样重要的目标是“确保完整性”。在发明 HTTPS 之前,由于 HTTP 是明文的,不但容易被嗅探,还容易被篡改。比如咱们天朝的网络运营商(ISP)都比较流氓,经常有网友抱怨说访问某网站(本来是没有广告的),竟然会跳出很多中国电信的广告。为啥会这样捏?因为你的网络流量需要经过 ISP 的线路才能到达公网。如果你使用的是明文的 HTTP,ISP 很容易就可以在你访问的页面中植入广告。
所以,当初设计 HTTPS 的时候,还有一个需求是“确保 HTTP 协议的内容不被篡改”。
在谈到 HTTPS 的需求时,“真实性”经常被忽略。其实“真实性”的重要程度不亚于前面的“保密性”和“完整性”。你因为使用网银,需要访问该网银的 Web 站点。那么,你如何确保你访问的网站确实是你想访问的网站?(这话有点绕口令)
有些天真的同学会说:通过看网址里面的域名,来确保。为啥说这样的同学是“天真的”?因为 DNS 系统本身是不可靠的(尤其是在设计 SSL 的那个年代,连 DNSSEC 都还没发明)。由于 DNS 的不可靠(存在“域名欺骗”和“域名劫持”),你看到的网址里面的域名【未必】是真实滴!
所以,HTTPS 协议必须有某种机制来确保“真实性”的需求(至于如何确保,后面会细聊)。
再来说最后一个需求——性能。引入 HTTPS 之后,【不能】导致性能变得太差。否则的话,谁还愿意用?为了确保性能,SSL 的设计者至少要考虑如下几点:
以上就是设计 SSL 协议时,必须兼顾的各种需求。后面聊协议的实现时,俺会拿 SSL 协议的特点跟前面的需求作对照。看看这些需求是如何一一满足滴。
在密码学中,加密是指将明文转换为难以理解的密文;解密与之相反,是把密文换回明文。加密和解密都是由两部分组成:算法和密钥。
加密算法可以分为两类:对称加密和非对称加密。
对称加密在加密和解密的过程中只是用一个密钥,这个密钥叫对称密钥,也叫共享密钥,如下图。
对称加密
对称加密的优点就是计算速度快,缺点也很明显,就是通信两端需要分享密钥。客户端和服务器在进行对话前,要先将对称密钥发送给对方,在传输的过程中密钥有被窃取的风险,一旦被窃取,那么密文就能轻松翻译成明文,加密保护形同虚设。
非对称加密在加密的过程中使用公开密钥(public key),在解密的过程中使用私有密钥(private key)。加密和解密的过程也可以反过来。
非对称加密
非对称加密的缺点时计算速度慢,但它很好的解决了对称加密的问题,避免了信息泄露。通信两端如果都使用非对称加密,那么各自都会生成一对密钥,私钥留在身边,公钥发送给对方,公钥在传输途中即使被人窃取,也不用担心,因为没有私钥就无法轻易解密。在交换公钥后,就可以用对方的公钥把数据加密,开始密文对话。
HTTPS采用混合加密机制,将两种加密算法组合使用,充分利用各自的优点,博采众长。在交换公钥阶段采用非对称加密,在传输报文阶段使用对称加密。
数字签名是一段由发送者生成的特殊加密校验码,用于确定报文的完整性,数字签名的生成涉及两种技术:非对称加密和数字摘要。
数字摘要可以将变长的报文提取为定长的摘要,报文内容不同提取的摘要也将不同,常用的摘要算法有 MD5 和 SHA。签名和校验的过程总共分为 5 步,如下如。
数字签名的校验过程
数字证书相当于网络上的身份证,用于身份识别,由权威的数字认证机构(CAlendar)负责颁发和管理、数字证书的格式普遍遵循 X.509 国际标准,证书的内容包括:
客户端(如浏览器)会预先植入一个受信任的颁发机构列表,如果收到的证书来自陌生的机构,那么会弹出一个安全警报对话框,如下图时IE浏览器的安全警报。
IE的安全警报
一般数字证书都会被安装在服务器处,当客户端发起安全请求时,服务器就会返回数字证书。客户端从受信机构列表中找到相应的公开密钥,解开数字证书。然后验证数字证书中的信息,如果验证通过,就说明请求来自意料之中的服务器;如果不通过,就说明证书被冒用,来源可疑,客户端立刻发出警告。下图描绘了这个认证过程。
数字证书的认证过程
客户端和服务器将通过好几个步骤建立起安全连接,然后开始通信,下面时精简过的步骤:
下图描绘了这些步骤
HTTPS通信
HTTPS有如下4个缺点
运营商是指提供网络服务的ISP(Internet Service Provider),例如三大基础运营商:中国电信、中国移动和中国联通。
运营商为了牟取经济利益,有时候会劫持用户的HTTP访问最明显的特征就是在页面上植入广告,有些是购物广告,有些却是淫秽广告,非常影响界面体验和公司形象。为了避免被劫持,可以让服务器支持 HTTPS HTTPS 协议,HTTPS传输的数据都被加密过了,运营商就无法再注入广告代码,这样页面就不会再被劫持。
相关推荐:
本文摘抄自《前端程序员面试笔试宝典》,媛媛之家/组编 平文 等/编著,机械工业出版社,版权归原作者所有
本文代表个人观点,内容仅供参考。若有不恰当之处,望不吝赐教!