在制作wireshark跟踪以检查我的服务器是否正确提供了Let的加密证书时,我发现在“服务器Hello完成”时,TLS握手中的同一证书正在发送两次。
怎么会发生这种情况?怎么纠正?
证书详细信息是完全相同的2倍:
要求额外信息: 我通过在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
答案 0 :(得分:0)
这是由于同时配置SSLCertificateFile
和SSLCertificateChainFile
引起的。
来自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