上周我将一个繁忙的站点切换到 TLS-everywhere 和 HTTP/2。性能并没有像希望的那样提高。事实上,根据你测量它的方式,你可以说它已经退化了。
在操作系统级别的 TCP 调整、Web 堆栈中的 TLS 配置等方面,还有很大的空间可以进一步优化服务器。为了确保我不会忽略任何需要改进的地方,我在这里发布我的思路供其他人参考在。
目前,SSL conf 显示如下。各方控制着这方面的各种因素,我无法直接控制这一切。域名被审查。
$ openssl s_client -state -CAfile Documents/Thawte\ Server\ CA.cer -connect xxxxxx.tld:443
CONNECTED(00000003)
SSL_connect:before/connect initialization
SSL_connect:SSLv2/v3 write client hello A
SSL_connect:SSLv3 read server hello A
depth=3 /C=SE/O=AddTrust AB/OU=AddTrust External TTP Network/CN=AddTrust External CA Root
verify error:num=19:self signed certificate in certificate chain
verify return:0
SSL_connect:SSLv3 read server certificate A
SSL_connect:SSLv3 read server key exchange A
SSL_connect:SSLv3 read server done A
SSL_connect:SSLv3 write client key exchange A
SSL_connect:SSLv3 write change cipher spec A
SSL_connect:SSLv3 write finished A
SSL_connect:SSLv3 flush data
SSL_connect:SSLv3 read finished A
---
Certificate chain
0 s:/C=xxx
i:/C=GB/ST=Greater Manchester/L=Salford/O=COMODO CA Limited/CN=COMODO RSA Organization Validation Secure Server CA
1 s:/C=SE/O=AddTrust AB/OU=AddTrust External TTP Network/CN=AddTrust External CA Root
i:/C=SE/O=AddTrust AB/OU=AddTrust External TTP Network/CN=AddTrust External CA Root
2 s:/C=GB/ST=Greater Manchester/L=Salford/O=COMODO CA Limited/CN=COMODO RSA Certification Authority
i:/C=SE/O=AddTrust AB/OU=AddTrust External TTP Network/CN=AddTrust External CA Root
3 s:/C=GB/ST=Greater Manchester/L=Salford/O=COMODO CA Limited/CN=COMODO RSA Organization Validation Secure Server CA
i:/C=GB/ST=Greater Manchester/L=Salford/O=COMODO CA Limited/CN=COMODO RSA Certification Authority
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIF1----shZZU
y1kFXCCRo78=
-----END CERTIFICATE-----
subject=/C=xxx
issuer=/C=GB/ST=Greater Manchester/L=Salford/O=COMODO CA Limited/CN=COMODO RSA Organization Validation Secure Server CA
---
No client certificate CA names sent
---
SSL handshake has read 6240 bytes and written 328 bytes
---
New, TLSv1/SSLv3, Cipher is DHE-RSA-AES128-SHA
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
SSL-Session:
Protocol : TLSv1
Cipher : DHE-RSA-AES128-SHA
Session-ID: 09464B1CF8972B08267C33BF255FDA74216728E3599B24EAE02B13642C268483
Session-ID-ctx:
Master-Key: ACC3529AC7C80162797397D4E3041D1720EE4BA6A8BA5D2C200F8B48ADD6960CA9E48D5FF975472A9E8B43B7023CA4E4
Key-Arg : None
Start Time: 1457708322
Timeout : 300 (sec)
Verify return code: 0 (ok)
---
SSL3 alert read:warning:close notify
closed
SSL3 alert write:warning:close notify
我看到的问题:
验证错误:num=19:证书链中的自签名证书
我希望链尽可能短,以正确的顺序(不是根据 ssllabs.com),并且链中不需要自签名证书。编辑:我看到这实际上是 CA 根证书,它已经在浏览器的信任库中。无论如何,这应该被删除。
SSL_connect:SSLv3 读取服务器证书 SSL_connect:SSLv3 读取服务器密钥交换 SSL_connect:SSLv3 读取服务器完成 SSL_connect:SSLv3 写入客户端密钥交换 SSL_connect:SSLv3 写入更改密码规范 SSL_connect:SSLv3 写入完成 SSL_connect:SSLv3 刷新数据 SSL_connect :SSLv3 读完 A
这个握手序列对我来说似乎很长。我在其他配置上看到的来回次数更少。我的愿望是尽量减少往返。
证书链 0、1、2、3 - 由 4 个(Comodo)证书组成,超过 5.5Kb,因此可能不适合 TCP 拥塞窗口大小(尚未验证)。可能是额外往返的原因(?)。
也许值得切换到提供较短链的 CA。有什么建议么?
密码:DHE-RSA-AES128-SHA
弱 Diffie-Hellman 密码。SSLLabs 补充说:“使用常见的 DH 素数是的,如果可能,用自定义 DH 参数替换”
因此,我的问题是:
- 我可以通过哪些方式缩短证书链?
- 我可以通过哪些方式减少握手下载大小?
- 我可以通过哪些方式减少握手往返次数?
- 哪个 CA 提供比 Comodo 更短的链?
- 您在此输出中看到任何其他问题点吗?或者我还应该测试什么?
- 我们可以通过哪些方式优化 Ubuntu 上的 TCP 配置以最大化 TLS 性能/网络吞吐量?
- 为性能选择密码套件顺序的最佳方法是什么?我运行 $ openssl speed 但不确定如何解释和操作这些数据。
您的见解将不胜感激。