让我们在TLS握手中加密ssl证书两次

时间:2018-06-14 12:45:42

标签: ssl lets-encrypt

在制作wireshark跟踪以检查我的服务器是否正确提供了Let的加密证书时,我发现在“服务器Hello完成”时,TLS握手中的同一证书正在发送两次。

怎么会发生这种情况?怎么纠正?

enter image description here

证书详细信息是完全相同的2倍:

enter image description here

要求额外信息: 我通过在Fedora 25客户端上使用我的Chrome浏览器访问我的Apache网络服务器的https页面(CentOS Linux版本7.4.1708(核心版))来跟踪wireshark。

VirtualHost配置:

SSLEngine on
SSLProtocol all -SSLv2 -SSLv3
SSLCipherSuite HIGH:MEDIUM
SSLCertificateFile /etc/letsencrypt/live/my.domain.tld/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/my.domain.tld/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/my.domain.tld/fullchain.pem

不知道这是否重要,但我还有第二个具有不同Let's加密证书的VirtualHost:

SSLEngine on
SSLProtocol all -SSLv2
SSLCipherSuite HIGH:MEDIUM
SSLCertificateFile /etc/letsencrypt/live/my2.domain.tld/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/my2.domain.tld/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/my2.domain.tld/fullchain.pem

1 个答案:

答案 0 :(得分:0)

问题


这是由于同时配置SSLCertificateFileSSLCertificateChainFile引起的。

来自the mod_ssl documentation(强调我):

  

此伪指令设置可选的多合一文件,您可以在其中组装构成服务器证书的证书链的证书颁发机构(CA)的证书。 这是从服务器证书的颁发CA证书开始,范围可以是根CA证书。

但是,如果您检查fullchain.pem,则会看到它的顶部包括服务器证书,然后是“让我们加密”颁发CA。 Apache交付了SSLCertificateFile,并将其后的SSLCertificateChainFile串联在一起。由于您的服务器证书同时出现在两个证书中,因此就像在Wireshark中观察到的一样,它在SSL握手中的最后一个链中是重复的。

   vhost.conf                   Sent To Client 
+---------------+            +------------------+
|   cert.pem    |----------> |Server Certificate|
|               |            |        +         |
|       +       |      +---> |Server Certificate|
|               |      |     |        +         |
| fullchain.pem |----------> | CA Certificate   |
+---------------+            +------------------+

修复


在现代Apache中,不再使用SSLCertificateChainFile指令,而将fullchain.pem直接赋予SSLCertificateFile

同样,来自the mod_ssl documentation

  

不推荐使用SSLCertificateChainFile

     

SSLCertificateChainFile在2.4.8版本中已过时,在扩展SSLCertificateFile时也可以从服务器证书文件中加载中间CA证书。

因此,您所需要做的就是从此更改您的虚拟主机配置:

SSLCertificateFile /etc/letsencrypt/live/my.domain.tld/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/my.domain.tld/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/my.domain.tld/fullchain.pem

对此:

SSLCertificateFile /etc/letsencrypt/live/my.domain.tld/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/my.domain.tld/privkey.pem