我正在运行在 Ubuntu 16.04.1 LTS 下运行的 Apache 2.4.18 服务器,仅安装了 PHP 7 和 Exim 4。
清晨时,SSL 握手速度极快,大约 200 毫秒,但随着时间的推移(大约 1 小时后)速度加快,达到 8 秒左右。如果我重新启动 Apache,SSL 速度会再次加快,但过一会儿又会变慢,回到 8 秒,有时甚至达到 30 秒。
我配置了 Apache ssh.conf (etc/apache2/mods-enabled) 如下:
SSLRandomSeed startup builtin
SSLRandomSeed startup file:/dev/urandom 512
SSLRandomSeed connect builtin
SSLRandomSeed connect file:/dev/urandom 512
AddType application/x-x509-ca-cert .crt
AddType application/x-pkcs7-crl .crl
SSLPassPhraseDialog exec:/usr/share/apache2/ask-for-passphrase
SSLSessionCache shmcb:${APACHE_RUN_DIR}/ssl_scache(512000)
SSLSessionCacheTimeout 300
SSLCipherSuite ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS
SSLHonorCipherOrder on
SSLProtocol all -SSLv3
SSLCompression off
SSLSessionTickets off
SSLUseStapling on
SSLStaplingResponderTimeout 5
SSLStaplingReturnResponderErrors off
SSLStaplingCache shmcb:/var/run/ocsp(128000)
在 VirtualHost 设置中我设置了以下标题:
Header always set Strict-Transport-Security "max-age=15768000"
服务器配置为:
- CPU:英特尔至强 E5-2650L 1.80Ghz(4 核)
- 内存:7.8 GB
- 平均负载:0.50
使用 Apache 的服务器状态工具会出现此情况。
当 HTTPS 速度很快时(apache2 重启后,上午 11:00): SSL/TLS 会话缓存状态
当 HTTPS 较慢时: (上午 11:04): SSL/TLS 会话缓存状态
当我们从服务器迁移时,这种情况开始发生。没有请求新的证书,旧的 SSLCertificateFile、SSLCertificateChainFile 和 SSLCertificateKeyFile 仍在使用。
什么情况会导致它变慢以及我该如何解决它?
答案1
如果您的加密速度很慢,那么本文没有提到的一件事就是/dev/random
vs /dev/urandom
。/dev/random
文件可能会因等待熵而阻塞,而编写不当的加密可能会反复出现。这在虚拟机中尤其明显,因为它们没有太多正常的熵生成硬件。如果您遇到这种情况,只需使用/dev/urandom
。
这是可能不会影响到您的事情之一,但如果影响到了您,那么这可能是一个真正的问题,而且如果不知道如何寻找的话很难进行诊断。