HTTP权威指南 安全HTTP

《HTTP 权威指南》第十四章——安全HTTP,阅读笔记。

数字加密

数字加密进化史:密码->秘钥+密码:对称秘钥加密系统、非对称秘钥加密系统(即公开秘钥加密系统,秘钥分为公有秘钥和私有秘钥)

  • 密码弊病:可以暴力破解
  • 对称秘钥加密系统弊病:每有一个客户端连接服务器,服务器就得为该客户端生成一个单独的秘钥,这样当客户端多起来时,服务器端会同时维护大量的秘钥,并且得保证每一个秘钥都不能被黑客窃取
  • 非对称秘钥加密系统弊病:加密、解密耗时较长

RSA

公开秘钥加密系统的实现难点是要确保即便有人拥有了以下所有线索,也无法计算出保密的私有秘钥:

  • 公开秘钥(所有人都可以获得)
  • 一小片拦截下来的密文
  • 一条报文以及与之相关的密文(对任意一段文本运行加密就可以得到)

RSA 就是 MIT 发明的一套公开秘钥加密系统。

数字签名

除了加/解密报文外,还可以用加密系统对报文进行签名(sign),以说明是谁编写的报文,同时证明报文未被篡改过。这种技术被称为数字签名(digital signing)。数字签名是附加在报文上的特殊加密校验码。
数字签名原理:数字签名通常用于非对称公开秘钥加密系统,发送端先对报文提取定长的摘要,然后使用自己的私有秘钥作为参数,对摘要应用“签名”函数生成签名,最后将生成的签名附加在报文末尾发送给接收端。接收端对收到的“签名”应用公开秘钥的反函数,然后判断解析出来的摘要与自己对报文提取出来的摘要是否匹配。

数字证书

数字证书没有单一的全球标准,但大多数数字证书都以一种标准格式——X.509 v3 来存储它们的信息。一般的数字证书的内容如下:
数字证书

  • 数字证书的使用:通过 HTTPS 建立了一个安全 Web 事务后,浏览器会自动获取所连接服务器的数字证书。如果服务器没有证书,安全连接就会失败。浏览器收到证书时会对签名颁发机构进行检查,如果这个机构是个很有权威的公开签发机构,浏览器可能已经知道其公开秘钥了(浏览器会预先安装很多签名颁发机构的证书),这样就可以通过数字签名来验证证书的完整性了。如果对签名颁发机构一无所知,浏览器就无法确定是否应该信任这个签名颁发机构,它通常会向用户显示一个对话框,看看他是否相信这个签名发布者。
  • 为什么需要数字证书:HTTPS 已经改善了 HTTP 对报文明文传输的问题,但是客户端仍不能保证自己目前连接的就是真正想连接的服务器端,自己连接的也有可能是黑客伪造的服务器端。所以需要数字证书来保证客户端连接的就是真正的服务器端。数字证书由权威机构颁发,并且有域名等信息,这些黑客是伪造不出来的,除非黑客攻克了颁发证书的权威机构。

OpenSSL

OpenSSL 是 SSL 和 TLS 最常见的开源实现。

通过代理以隧道形式传输安全流量

使用 HTTPS 后,代理就再也不能读取已经加密了的 HTTP 首部了,也就无法知道应该将请求转发到何处了。一种解决办法就是 HTTPS SSL 隧道协议:客户端首先要告知代理它想要连接的安全主机和端口,这是在开始加密之前,以明文形式告知的,所以代理可以理解这条信息。