HTTP 的缺点
- 通讯使用明文,内容可能会被窃听
- 不验证通信方的身份,可能遭遇伪装
- 无法证明报文的完整性,所以有可能被篡改
HTTP+ 加密 + 认证 + 完整性保护 =HTTPS
为了解决 HTTP 安全的问题,我们需要在 HTTP 协议的基础上加入加密处理和认证等机制,这种加密及认证机制的 HTTP 称为 HTTPS
HTTPS 不是一种新协议,只是 HTTP 通信节后部分用 SSL 和 TLS 协议代替而已。
所谓 HTTPS 就是身披 SSL 协议外壳的 HTTP!
采用 SSL 后,HTTP 就拥有了 HTTPS 的加密,证书和完整性保护这些功能
SSL 是独立于 HTTP 的协议,所以不光是 HTTP 协议,其他运行在应用层的 SMTP 和 Telnet 等协议均可配合 SSL 协议使用,是一种广泛的网络安全技术。
加密技术
共享加密的问题
使用同一个密钥加密解密
在网络上转发密钥时,可能会被黑客截取密钥,加密也就没有意义了。
使用两把密钥的公开密钥加密
采用非对称的一对密钥,一把私有密钥,一把公开密钥,其中私有密钥不能让任何人知道,公开密钥可以随意发布。
发送方使用公开密钥进行加密处理,对方收到被加密的信息后,用自己的私有密钥进行解密。
要想根据密文和公有密钥来破解出原文是很困难的,这需要对离散对数进行求值,并非一件容易的事。
HTTPS 采用混合加密
HTTPS 采用共享密钥和公开密钥加密两种方式并用的混合加密机制,在密钥交换环节使用公开是密钥加密方式,之后建立通信交换报文阶段则使用共享密钥加密方式。
证明公开密钥的正确性的证书
如何证明收到的公开密钥就是原本预想的那台服务器发行的公开密钥?在公开密钥传输的过程中,如何确保公开密钥不会被攻击者给替换掉了?
为了解决上述问题,可以使用有数字证书认证机构和其相关机关颁发的公开密钥证书。数字证书认证机构处于客户端与服务端双方都可以信赖的第三方机构的立场上。首先,服务器的运营人员向数字证书认证机构提出公开密钥的申请,数字证书认证机构在判明提出申请者的身份之后,会对已申请的公开密钥做数字签名,然后分配这个已签名的公开密钥,并将该公开密钥放入公钥证书绑定在一起。
服务器会将这份有数字证书认证机构颁发的公钥证书发送给客户端,以进行公开密钥加密方式通信,公钥证书亦可以叫数字证书或证书。
接收到证书的客户端可使用数字证书认证机构的公开密钥,对那张证书上的数字签名进行验证,一旦通过验证,客户端便可确认认证服务器的公开密钥是真实有效的数字证书认证机构,服务器的公开密钥是值得信赖的。
对于认证机关的公开密钥如何安全的转移给客户端,使用通信方式,安全转交是一件很困难的事,所以,大多数浏览器开发商发布版本时,会在内部植入常用的认证机关的公开密钥。
客户端证书
HTTPS 还可以使用客户端证书,证明服务器正在通信的对方是合法的客户端。
列如,银行的网上银行就采用了客户端证书,在登录网银时不仅要求输入 ID 和密码,还会要求用户的客户端证书,以确认用户是否从特定的诊断访问。