一、背景
- 对于大规模的购物、银行事务或访问机密数据来说,这些重要的事务需要将 HTTP和数字加密技术结合起来使用,才能确保安全;
- 目标:
1)服务器认证 (客户端知道它们是在与真正的而不是伪造的服务器通话);
2)客户端认证 (服务器知道它们是在与真正的而不是伪造的客户端通话);
3)完整性 (客户端和服务器的数据不会被修改);
4)加密 (客户端和服务器的对话是私密的,无需担心被窃听);
5)效率 (一个运行的足够快的算法,以便低端的客户端和服务器使用);
6)普适性 (基本上所有的客户端和服务器都支持这些协议);
7)管理的可扩展性 (在任何地方的任何人都可以立即进行安全通信);
8)适应性 (能够支持当前最知名的安全方法);
9)在社会上的可行性 (满足社会的政治文化需要);
二、HTTPS
- HTTPS经由HTTP进行通信,但利用SSL/TLS来加密数据包,HTTPS开发的主要目的,是提供对网站服务器的身份认证,保护交换数据的隐私与完整性;
-
使用HTTPS时,所有的HTTP请求和响应数据在发送到网络之前,都要进行加密,HTTPS在HTTP下面提供了一个传输级的密码安全层,可以使用SSL,也可以使用其后继者——传输层安全(Transport Layer Security,TLS);
- 不使用SSL/TLS的HTTP通信,即不加密的通信,所有信息明文传播,带来了三大风险:
1)窃听风险(eavesdropping):第三方可以获知通信内容;
2)篡改风险(tampering):第三方可以修改通信内容;
3)冒充风险(pretending):第三方可以冒充他人身份参与通信; - SSL/TLS协议是为了解决这三大风险而设计的,希望达到:
1)所有信息都是加密传播,第三方无法窃听;
2)具有校验机制,一旦被篡改,通信双方会立刻发现;
3)配备身份证书,防止身份被冒充; - 密钥
1)密钥:改变密码行为的数字化参数;
2)对称密钥加密系统:编 / 解码使用相同密钥的算法;
3)不对称密钥加密系统:编 / 解码使用不同密钥的算法;
4)公开密钥加密系统:一种能够使数百万计算机便捷地发送机密报文的系统;
5)数字签名:用来验证报文未被伪造或篡改的校验和;
6)数字证书:由一个可信的组织验证和签发的识别信息; -
请求一个客户端(比如web浏览器),对某web资源执行某事务时,它会去检查URL的方案:
1)如果URL的方案为HTTP,客户端就会打开一条到服务器端口80(默认情况下)的连接,并向其发送老的HTTP命令;
2)如果 URL的方案为HTTPS,客户端就会打开一条到服务器端口443(默认情况下)的连接,然后与服务器“握手(建立连接和交换参数)”,以二进制格式与服务器交换一些SSL安全参数,附上加密的HTTP命令;
SSL是个二进制协议,与HTTP完全不同,其流量承载是在另一个端口上的,如果SSL和HTTP流量都从端口80到达,大部分web服务器会将二进制SSL流量理解为错误的HTTP并关闭连接;
(1)客户使用HTTPS的URL访问Web服务器,要求与Web服务器建立SSL连接;
(2)Web服务器收到客户端请求后,会将网站的证书信息(证书中包含公钥)传送一份给客户端;
(3)客户端的浏览器与Web服务器开始协商SSL/TLS连接的安全等级,也就是信息加密的等级;
(4)客户端的浏览器根据双方同意的安全等级,建立会话密钥,然后利用网站的公钥将会话密钥加密,并传送给网站;
(5)Web服务器利用自己的私钥解密出会话密钥;
(6)Web服务器利用会话密钥加密与客户端之间的通信; - SSL握手(爱丽丝为客户端,鲍勃为服务器端)
1)爱丽丝给出协议版本号,一个客户端生成的随机数(Client random),以及客户端支持的加密方法;
2)鲍勃确认双方使用的加密方法,并给出数字证书,以及一个服务器生成的随机数(Server random);
3)爱丽丝确认数字证书有效,然后生成一个新的随机数(Premaster secret),并使用数字证书中的公钥,加密这个随机数,发给鲍勃;
4)鲍勃使用自己的私钥,获取爱丽丝发来的随机数(即Premaster secret);
5)爱丽丝和鲍勃根据约定的加密方法,使用前面的三个随机数,生成对话密钥(session key),用来加密接下来的整个对话过程; - 注意:
1)生成对话密钥一共需要三个随机数;
2)握手之后的对话使用对话密钥(session key)加密(对称加密),服务器的公钥和私钥只用于加密和解密对话密钥(session key)(非对称加密),无其他作用;
3)服务器公钥放在服务器的数字证书之中;