繁体   English   中英

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

[英]Let's Encrypt ssl certificate send twice in TLS handshake

在进行 wireshark 跟踪以检查我们的服务器是否正确提供了我的 Let's Encrypt 证书时,我看到在“服务器您好完成”时,在 TLS 握手中将发送两次相同的证书。

这怎么会发生? 如何纠正?

在此处输入图片说明

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

在此处输入图片说明

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

虚拟主机配置:

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

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

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

问题


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

来自mod_ssl 文档(重点是我的):

该指令设置可选的多合一文件,您可以在其中组合证书颁发机构 (CA) 的证书,这些证书构成服务器证书的证书链。 这从服务器证书的颁发 CA 证书开始,最高可达根 CA 证书。

但是,如果您检查fullchain.pem ,您会看到它在顶部包含服务器证书,然后是 Let's Encrypt 颁发的 CA。 Apache 正在传递SSLCertificateFile的内容,并在SSLCertificateChainFile连接SSLCertificateChainFile 由于您的服务器证书出现在它们两个中,因此它在 SSL 握手中看到的最终链中被复制,就像您在 Wireshark 中观察到的一样:

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

修复


在现代 Apache 中,不再使用SSLCertificateChainFile指令,并将fullchain.pem直接提供给SSLCertificateFile

同样,来自mod_ssl 文档

SSLCertificateChainFile 已弃用

SSLCertificateChainFile在 2.4.8 版中已过时,当时SSLCertificateFile被扩展为还从服务器证书文件加载中间 CA 证书。

所以你需要做的就是改变你的 vhost 配置:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM