HTTPS 概述
什么是HTTPS
HTTPS是最流行的HTTP安全形式,是HTTP的一个安全版本。有网景公司首创。
为什么要有HTTPS
- 为重要的Web事务提供安全保证
- 基本认证和摘要认证无法满足Web事务的安全要求
HTTP的安全需求
- 服务器认证:(客户端知道它们是与真正的服务端对话,而非伪造的服务端)
- 客户端认证:(服务器知道它们是与真正的客户端对话,而非伪造的客户端)
- 完整性: 客户端和服务器的数据不会被修改
- 加密: 客户端和服务器的对话是私密的,不会被窃听
- 效率: 算法效率足够高,以便地段的客户端和服务器使用。
- 普适性: 基本上所有的客户端和服务器都可以支持这些协议
- 可拓展性: 在任何地方的任何人都可以立即进行安全通信
- 适应性: 能够支持当前最知名的安全算法
- 社会可行性: 满足社会的政治文化需要。
加密
术语
- 密码: 对文本进行编码,使偷窥者无法识别的算法
- 密钥: 改变密码行为的数字化参数
- 对称加密: 编码和解码使用相同密钥的加密算法
- 非对称加密: 编码和解码使用不同密钥的加密算法
- 公钥加密: 一种能够使上百万计算机便捷地发送加密报文的系统
- 数字签名: 用来验证报文是否被伪造或篡改的校验和
- 数字证书: 由一个可信的组织验证和签发的识别信息。
加密的艺术
加密的过程,其实就是将数据从明文转变为密文的过程。
报文加密的作用
- 防止报文被(第三方)读取
- 防止报文被篡改
- 验证报文的发送方
密码、密码机、密钥
密码 是一套编码方案,包含报文的编码方式和解码方式两部分。
未加密的报文我们称之为明文, 编码加密之后的报文称之为密文。
密码机是用于帮助人们使用复杂的密码进行编码和解码的机器
密码和密码机都有可能落入恶意第三方的手中,如果密码机能够根据不同的参数对报文进行编码和解码,那就可以极大提高加密的安全性。我们称这些参数为密钥。
同一个密码机使用不同的密钥,会生成不同的输出。
对称加密
对称加密指编码和解码使用相同密钥的加密算法。
在实际环境中,编码和解码算法通常是公开的,因而对称加密中,保证的密钥的机密尤为重要。
恶意的第三方可能会通过暴力破解的方式获取密钥,密钥的位数在很大程度上决定了其安全性(密钥被暴力破解的难度与密钥的位数正相关)。
对称加密的缺点
使用对称加密,报文的发送者和报文的接受者需要有一个共享的密钥。
在Web事务中,这就相当与Web服务器和客户端要有一个共享密钥。为了防止第三方客户端获取密钥后,对其他客户端的报文进行解码动作,不同的客户端就需要有不一样的密钥。
这样的话,Web服务器就需要维护大量的密钥,而客户端如果获取与其他客户但不同的密钥也是难点。
非对称加密
非对称加密是指编码和解码使用不同密钥的加密算法
也就是说非对称加密有两个密钥,一个用来对主机报文进行编码,一个用来对主机报文解码。
每个人都找到某个特定主机的公开密钥(用于编码),但只有主机自己知道私有的密钥(用于解码)。
在Web事务中,如果使用非对称加密,那么Web服务器和客户端均只需要维护好自己的公钥和私钥。(公钥可以发给任何其他主机,用于对发送自己的报文进行加密;私钥自己保存,用于对其他主机发送给自己的报文进行解码)
非对称加密的缺点
非对称加密 算法复杂,计算过程慢。
混合加密
由于对称加密和非对称加密都有其优势和不足:
- 对称加密: 计算快,密钥管理难度大(Web服务器需要针对不同的客户端维护唯一的密钥, 否则不够安全)
- 非对称加密: 易于管理(Web服务器和客户端均只需要维护自己的公钥和私钥),但算法复杂,计算慢。
现代Web技术,一般使用结合两种加密算法,进行混合加密。
Web事务中的混合加密指的是,先使用非对称加密建立安全的通信隧道。然后使用对称加密实现对数据报文的编解码。
混合加密中,非对称加密一个重要作用就是帮助对称加密管理密钥。Web服务器不需要为每个主机维护一个密钥,而只需要在真正的通信前,使用非对称加密交换一些对称加密的密钥即可。
数字签名
数字签名是附加在报文上的特殊加密校验码。数字签名用于对报文的编写者和报文本身进行验证。(在Web事务中,利用数字签名,客户端可以验证Web服务器的身份,以及Web服务器发送过来的报文是否被篡改了。)
数字签名的概念与对称加密、非对称加密有所不同,数字签名关注的重点是验证,而非加密。数字签名用于验证报文的编写者以及报文是否被篡改。
数字签名通常使用私钥生成签名,使用公钥从签名中解码出报文摘要。然后对比签名中解码出的摘要与自己计算的报文摘要是否一致来验证报文的编写者。
数字证书
前面提到数字签名可以用来验证报文。但是恶意中间人可以通过替换掉客户端上的公钥来迷惑客户端。(中间人使用自己的公钥替换掉Web服务器的公钥,然后用自己的私钥生成签名,这样最后数字签名解码出来的摘要与客户端自己计算的摘要也是一致的)。
数字证书可以帮助我们解决以上问题。
数字证书其实就是受信任的组织为用户或公司颁发的ID证明。
数字证书包含了(由某个受信任的组织担保的)用户或公司的相关信息。
通过数字证书,Web客户端可以确定与之通信的服务器是真正的Web服务器还是恶意第三方伪装的。
用数字证书为服务器进行认证
用HTTPS建立一个安全的Web事务之后,现代浏览器都会自动获取所连接服务器的数字证书。 如果服务器没有证书,安全连接就会失败。服务器证书中包含很多字段,包括:
- Web站点的名称与主机名
- Web站点的公开密钥
- 签名颁发机构的名称
- 来自签发机构的签名。
浏览器收到证书时会对签名颁发机构进行检查。
如果该机构是权威机构,浏览器可能已经知道其公钥(浏览器自己会有一份信任的证书列表),也就可以验证数字签名了。
如果浏览器还不知道该公钥,则会弹出对话框给用户确认是否信任该签名发布者。