我遇到了一个问题,Apache 服务器使用 SSL 256 位证书速度很慢
ab -n 500 https://example.com/
Time per request 29 ms
ab -n 500 http://example.com/
Time per request 10 ms
两个请求都发送了 52 字节,并且测试是在同一个数据中心的服务器上进行的
会议
SSLEngine on
SSLProtocol All -SSLv2
SSLHonorCipherOrder On
SSLCipherSuite ALL:!ADH:!EXP:!LOW:!RC2:!3DES:!SEED:!RC4:+HIGH:+MEDIUM
SSL 比普通 HTTP 请求慢 3 倍是正常的吗?
答案1
你是如何对你的服务器进行基准测试的?你的 HTTPS 服务器后面运行着什么应用程序?你的服务器使用什么 CPU?你看,你的问题缺少很多重要的细节……
无论如何,SSL 肯定比“纯”HTTP 慢一些:公钥加密比对称密钥加密慢得多,这就是为什么 pubkey 仅用于交换私有对称密钥并且通道切换到对称密钥加密的原因。
答案2
HTTPS 速度较慢,因为它需要交换更多数据(来自服务器的 X.509 证书),需要建立安全的数据连接,...
ab
可以提供“连接”时间,这就是您会看到时间差异的地方。TLS 设置比没有设置需要更多时间。
答案3
您需要认识到ab
所做的事情和浏览器所做的事情之间的区别。(我不会回答所做ab
的事情,因为我对此不够熟悉)。
例如:
- 使用 TLS 会话是否
ab
重复使用?浏览器会重复使用,并且因此执行速度会更快(对于后续请求)。您可以使用 wireshark 验证这一点(也许https://ask.wireshark.org/questions/9007/ssl-session-reuse很有用) - 正在
ab
使用已知速度较慢的密码(您可以在 ssl_request_log 中看到协商的密码是什么) - 您是否支持 HTTPS 连接上的 HTTP 保持活动?您应该支持,即使只是足够长的时间来提取页面上的所有资产。这将真正减少对服务器发出的 SSL/TLS 请求数量。
- 您的网站上有缓存友好的内容吗(尤其是浏览器缓存)——您是否使用了诸如这样的响应标头
Cache-Control: public, max-age=3600, s-max-age=3600
。
如果您专注于这些,那么您可以轻松地让仅使用 HTTPS 的网站运行良好且快速。这就是我为仅使用 HTTPS 的视频流网站所做的,而且我不必担心 SSL 连接时间。
答案4
网站速度变慢的原因:
SSL 证书携带多个中间证书,可增加握手期间的数据量。
OCSP 和 CRL 的性能也没有得到纠正,因为网站需要 1/3 秒的时间来回复 OCSP 请求并建立连接。
对于快速 HTTPS 连接的建议:
可以通过压缩文本内容来减轻CPU资源的利用率,或者升级当前进程来处理加密任务。
您需要确保页面上的所有内容都是通过 HTTPS 检索的。
借助快闪记忆体- Google 的一项开源网络协议,可最大限度地缩短网页加载时间。
在证书颁发机构方面,CA 可以减少 OCSP 和 CRL 响应时间从300ms到100ms(毫秒)。
CA 可以减少 SSL 证书中的中间链大小,因为它会消耗额外的字节和时间。