https的相关知识

先不管https的细节,先给网站加上https

如何给网站加上https

现在给网站加https非常简单、而且还免费。

公益组织 Lets Encrypt和Certbot提供了很简单的工具来将网站转为https的。

Let's Encrypt的地址是, https://letsencrypt.org/getting-started/ Certbot 的地址是, https://certbot.eff.org/, 我的博客网站 027yunwei.com 是运行 在ubuntu apache上,通过 https://certbot.eff.org/#ubuntutrusty-apache 可以 看到非常简单的说明。

cerbot装好以后,还应该加一个cron job,每个月去试着renew证书,certbot renew 命令 会更新快要到期的证书。

Qualys 提供了一个免费的网站 https 检测工具,比如 https://www.ssllabs.com/ssltest/analyze.html?d=027yunwei.com

接下来,对于好奇心强的人,就可以看看细节了。 另外,对于大型站点,也可能会遇到一些其他的问题,比如url的重写、外部引用不安全等。

https协议过程

cloudflare上的一篇介绍其产品 keyless ssl的博客清晰简洁地介绍了该过程
https://blog.cloudflare.com/keyless-ssl-the-nitty-gritty-technical-details/

https兼容性

https = http + ssl/tls

SSL: 2.0, 3.0 TLS: 1.0, 1.1, 1.2 SSL协议存在安全漏洞,而TLS 1.0也有安全漏洞。但是一些老版本的浏览器仍然在使用这些旧版本的协议。

https支持浏览器客户端和服务器段的协议协商,会使用双方都同意的协议版本和加密算法进行安全运算。

由于低版本的协议及加密套件是有安全漏洞的,上述协议协商过程如果被利用,可能会面临安全风险: 协议版本及加密套件使用低版本的。可以通过SCSV能防止该风险。

TLS重新协商,分为加密套件重新协商和协议重新协商。如果重新协商采用有漏洞的低版本,就会导致安全问题。 或者不停发起重新协商,就会消耗服务器计算能力。要根据应用考虑是否允许,或者允许的次数。

目前最安全的是 TLS 1.2

https安全运算延迟

https会增加安全运算时间消耗,证书校验,密钥协商等加多了三到七倍的交互环节。加解密等都是CPU密集性的运算也会加重系统负担。百度的统计表明处理能力会降为约十分之一。比如单纯http能支持每秒2万次点击,改为https后就只有大概2千次了。

1. 客户端协议层优化。对于新版本的浏览器,其能支持一些新的协议特性,能加速处理能力。比如tcp fast open, hsts, session cache, session ticket, oscp stapling, false start, spdy/http2等。

  1. 应用层异步预连接。
  2. 后台使用单独的服务器或加速卡来卸载SSL/TLS运算

数字证书验证延时

一次完整的SSL握手还会因为数字证书访问变得更慢: 1. 服务端发送的Server Certificate包可能包含上级证书链,在普遍使用2048位RSA的环境中,这个包会超过2K或者3K,在移动或慢速网络下可能会丢包并引起TCP的重传 2. 浏览器会检查服务端证书的吊销状态----根据服务端证书扩展项中的地址去下载黑名单或访问OCSP服务,如果这些地址无法访问或者被墙,则会让浏览器等上很长一段时间。 3. 如果是采用带客户端认证的SSL握手,浏览器遍历当前系统的可用证书时,可能会由于某些USBKey的驱动或CSP实现问题,卡住一段时间。

参考资料