参考链接:HTTPS科普扫盲帖
参考书籍:图解HTTP
http存在的问题
通信使用明文可能会被窃听
解决办法
通信加密
HTTP 协议中没有加密机制, 但可以通过和SSL( Secure Socket Layer, 安全套接层) 或 TLS( Transport Layer Security, 安全层传输协议) 的组合使用, 加密 HTTP 的通信内容。
用 SSL 建立安全通信线路之后, 就可以在这条线路上进行 HTTP 通信了。
与 SSL 组合使用的 HTTP 被称为TTPS( HTTP Secure, 超文本传输安全协议) 或 HTTP over SSL。
内容加密
还有一种将参与通信的内容本身加密的方式。 由于 HTTP 协议中没有加密机制, 那么就对 HTTP 协议传输的内容本身加密。 即把 HTTP 报文里所含的内容进行加密处理。在这种情况下, 客户端需要对 HTTP 报文进行加密处理后再发送请求。
为了做到有效的内容加密, 前提是要求客户端和服务器同时具备加密和解密机制。 主要应用在 Web 服务中。 有一点必须引起注意, 由于该方式不同于 SSL 或 TLS 将整个通信线路加密处理, 所以内容仍有被篡改的风险。
不验证通信方的身份就可能遭遇伪装
虽然使用 HTTP 协议无法确定通信方, 但如果使用 SSL 则可以。 SSL 不仅提供加密处理, 而且还使用了一种被称为证书的手段, 可用于确定方。
证书由值得信任的第三方机构颁发, 用以证明服务器和客户端是实际存在的。 另外, 伪造证书从技术角度来说是异常困难的一件事。 所以只要能够确认通信方( 服务器或客户端) 持有的证书, 即可判断通信方的真实意图。
无法证明报文完整性, 可能已遭篡改
所谓完整性是指信息的准确度。 若无法证明其完整性, 通常也就意味着无法判断信息是否准确。
HTTPS
HTTPS与HTTP的区别
HTTPS其实就是secure http的意思啦,也就是HTTP的安全升级版。
HTTP是应用层协议,位于HTTP协议之下是传输协议TCP。
TCP负责传输,HTTP则定义了数据如何进行包装。
HTTPS相对于HTTP有哪些不同呢?其实就是在HTTP跟TCP中间加多了一层加密层TLS/SSL。
关于HTTPS
HTTP+ 加 密 + 认 证 + 完 整 性 保 护 =HTTPS
SSL 提供认证和加密处理及摘要功能。
HTTPS 是身披 SSL 外壳的 HTTP
HTTPS 并非是应用层的一种新协议。 只是 HTTP 通信接口部分用 SSL( Secure Socket Layer) 和 TLS( Transport Layer Security) 协议代替而已。
通常, HTTP 直接和 TCP 通信。 当使用 SSL 时, 则演变成先和 SSL 通信, 再由 SSL和 TCP 通信了。 简言之, 所谓 HTTPS, 其实就是身披 SSL 协议这层外壳的HTTP。
SSL与TLS
通俗的讲,TLS、SSL其实是类似的东西,SSL是个加密组件,负责对HTTP的数据进行加密。TLS是SSL的升级版。现在提到HTTPS,加密套件基本指的是TLS。
在采用 SSL 后, HTTP 就拥有了 HTTPS 的加密、 证书和完整性保护这些功能。SSL 是独立于 HTTP 的协议, 所以不光是 HTTP 协议, 其他运行在应用层的 SMTP和 Telnet 等协议均可配合 SSL 协议使用。
HTTPS的加密机制
两种加密机制
HTTPS 采用共享密钥加密和公开密钥加密两者并用的混合加密机制。 若密钥能够实现安全交换, 那么有可能会考虑仅使用公开密钥加密来通信。 但是公开密钥加密与共享密钥加密相比, 其处理速度要慢。
所以应充分利用两者各自的优势, 将多种方法组合起来用于通信。 在交换密钥环节使用公开密钥加密方式, 之后的建立通信交换报文阶段则使用共享密钥加密方式。
HTTPS 的安全通信机制/SSL过程
步骤 1: 客户端通过发送 Client Hello
报文开始 SSL 通信。 报文中包含客户端支持的 SSL 的指定版本、 加密组件( Cipher Suite) 列表( 所使用的加密算法及密钥长度等) 。
步骤 2: 服务器可进行 SSL 通信时, 会以 Server Hello
报文作为应答。 和客户端一样, 在报文中包含 SSL 版本以及加密组件。 服务器的加密组件内容是从接收到的客户端加密组件内筛选出来的。
步骤 3: 之后服务器发送 Certificate
报文。 报文中包含公开密钥证书。
步骤 4: 最后服务器发送 Server Hello Done
报文通知客户端, 最初阶段的 SSL 握手协商部分结束。
步骤 5: SSL 第一次握手结束之后, 客户端以 Client KeyExchange
报文作为回应。报文中包含通信加密中使用的一种被称为 Pre-master secret
的随机密码串。 该报文已用步骤 3 中的公开密钥进行加密。
步骤 6: 接着客户端继续发送 Change Cipher Spec
报文。 该报文会提示服务器, 在此报文之后的通信会采用 Pre-master secret
密钥加密。
步骤 7: 客户端发送 Finished
报文。 该报文包含连接至今全部报文的整体校验值。这次握手协商是否能够成功, 要以服务器是否能够正确解密该报文作为判定标准。
步骤 8: 服务器同样发送 Change Cipher Spec
报文。
步骤 9: 服务器同样发送 Finished
报文。
步骤 10: 服务器和客户端的 Finished
报文交换完毕之后, SSL 连接就算建立完成。当然, 通信会受到 SSL 的保护。 从此处开始进行应用层协议的通信, 即发送 HTTP
请求。
步骤 11: 应用层协议通信, 即发送 HTTP
响应。
步骤 12: 最后由客户端断开连接。 断开连接时, 发送 close_notify
。这步之后再发送 TCP FIN 报文来关闭与 TCP 的通信
在以上流程中, 应用层发送数据时会附加一种叫做 MAC
( Message Authentication Code) 的报文摘要。 MAC 能够查知报文是否遭到篡改, 从而保护报文的完整性。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。