我上个星期把一个繁忙的站点切换到了TLS,而且是HTTP / 2。 绩效并没有像预期的那样有所提高。 事实上,取决于你如何衡量,你可以说它已经退化了。
有足够的空间来进一步优化服务器,在操作系统级别的TCP调整,在networking堆栈中的TLSconfiguration等。为了确保我没有忽略任何改进的地方,我在这里张贴我的思路为他人鸣钟在。
目前,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
我看到的问题:
validation错误: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
这个握手序列对我来说似乎很长。 我在其他configuration上看到了更less的来回。 我的愿望是保持循环到最低限度。
证书链0,1,2,3 – 由4(Comodo)证书组成,超过5.5Kb,因此可能不适合TCP拥塞窗口大小(尚未validation)。 可能是额外往返(?)的原因。
也许值得转换到提供更短链的CA. 有什么build议么?
密码:DHE-RSA-AES128-SHA
弱Diffy Helman密码。 SSLLabs增加:“使用常见的DH素数是可能的replace自定义DH参数”
因此我的问题是:
你的见解将不胜感激。
让我们先sorting证书链问题。 这应该照顾前4点。
您将从Comodo发送证书,您还需要更多的证书链。 可以在这里find证书列表。 您将需要检查证书以找出签名的CA.
一旦确定了CA,就下载捆绑软件并将其放在与发送的证书相同的目录中。 您将需要使用以下命令将它们组合在一起
cat name_of_file_you_were_sent name_of_bundle_file > www.example.com.crt
您可能会注意到最终的CA从包中“丢失”,这不会阻止您通过ssllabs的这部分testing。
然后你将需要引用这个文件以及nginxconfiguration中的私钥文件(你明显已经完成了,但为了完整性)使用这两个configuration行
ssl_certificate www.example.com.crt; ssl_certificate_key www.example.com.key;
testingnginxconfiguration,如果一切正常,重新启动
至于其余的configuration。
我发现为nginx生成一个SSLconfiguration的最佳网站是Mozilla安全我没有包括一个例子,因为有很多单独的serverfault
根据您的网站stream量,您将要使用中级或现代(希望你没有必要使用旧的,如果你这样做,你可能想要处理,但这是一个不同的问题)
你不应该只是复制和粘贴这些configuration,而不理解这些设置将会做什么。 例如,HSTS可以对网站访问者产生长期的影响。
虽然通常这些configuration是“安全的”,但它们可以进一步优化。 特别
ssl_buffer_size 16k; #Better if you have video ssl_buffer_size 4k; #Better for quicker first byte.
当然,为什么切换到http / 2没有提高您的网站性能可能还有一些其他的原因。
例如,http / 2打开更多的连接到服务器。 你是否解释了这一点,并调整worker_processes和worker_connections但上述处理与nginx的SSLconfiguration部分直接相关的任何事情。