Apache 证书链未发送

Apache 证书链未发送

再会!

我在谷歌上搜索了好久。天哪,我以前从来没有搜索过第二页以上的搜索结果!但这个让我很困惑。

我有一个网站,我正在使用由中间证书签名的证书(由自签名 CA 证书签名)来保护该网站。每个网站 stackexchange q/a 等似乎都表明了以下内容:

  1. 将您的服务器证书与中间证书连接起来,然后与您的 CA 证书连接起来。(即 cat apache.pem > chain_file;cat intermediary.pem >> chain_file;cat ca.pem >> chain_file)
  2. 由于 SSLCertificateChainFile 已被弃用,因此请使用 SSLCertificateFile 指向 apache ssl 配置上的这个新文件。
  3. 使用浏览器(或 ssllabs.com 或 sslshopper.com)检查证书是否正在导出。

但是,当我使用浏览器检查时,我只看到服务器证书,不包含中间证书或 CA 证书。ssllabs 和 sslshopper 都证实了这一点。

我缺少什么选项可以确保您发布整个链而不仅仅是服务器的证书?

谢谢

答案1

如果你有 OpenSSL,那么验证这一点非常容易:

cat /dev/null | openssl s_client -showcerts -servername example.com -connect example.com:443

我将解释这些组件:

  • cat /dev/null:openssl s_client的工作原理与 非常相似telnet。它建立连接,然后您就可以与其交互。当openssl在输入流中遇到 EOF 时,连接将关闭。cat /dev/null立即导致 EOF。或者,您可以使用CtrlD在终端上发出 EOF。
  • openssl s_client: “SSL/TLS 客户端程序”
  • -showcerts:显示 PEM 格式的证书 blob。否则仅显示服务器证书。
  • -servername example.com:设置服务器名称信噪比. 执行基于 HTTPS 名称的虚拟主机时必需。
  • -connect example.com:443:连接到example.com端口443,标准 HTTPS 端口。

结果是这样的:

$ cat /dev/null | openssl s_client -showcerts -servername inbox.google.com -connect inbox.google.com:443
CONNECTED(00000003)
depth=3 C = US, O = Equifax, OU = Equifax Secure Certificate Authority
verify return:1
depth=2 C = US, O = GeoTrust Inc., CN = GeoTrust Global CA
verify return:1
depth=1 C = US, O = Google Inc, CN = Google Internet Authority G2
verify return:1
depth=0 C = US, ST = California, L = Mountain View, O = Google Inc, CN = mail.google.com
verify return:1
---
Certificate chain
 0 s:/C=US/ST=California/L=Mountain View/O=Google Inc/CN=mail.google.com
   i:/C=US/O=Google Inc/CN=Google Internet Authority G2
-----BEGIN CERTIFICATE-----
snip
-----END CERTIFICATE-----
 1 s:/C=US/O=Google Inc/CN=Google Internet Authority G2
   i:/C=US/O=GeoTrust Inc./CN=GeoTrust Global CA
-----BEGIN CERTIFICATE-----
snip
-----END CERTIFICATE-----
 2 s:/C=US/O=GeoTrust Inc./CN=GeoTrust Global CA
   i:/C=US/O=Equifax/OU=Equifax Secure Certificate Authority
-----BEGIN CERTIFICATE-----
snip
-----END CERTIFICATE-----
---
Server certificate
subject=/C=US/ST=California/L=Mountain View/O=Google Inc/CN=mail.google.com
issuer=/C=US/O=Google Inc/CN=Google Internet Authority G2
---
No client certificate CA names sent
Peer signing digest: SHA256
Server Temp Key: ECDH, P-256, 256 bits
---
SSL handshake has read 3767 bytes and written 469 bytes
---
New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES128-GCM-SHA256
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
    Protocol  : TLSv1.2
    Cipher    : ECDHE-RSA-AES128-GCM-SHA256
    Session-ID: 1B47CE2ADB10CE410C8048C3AAEF7CEF1B2B76C6D2DF5EDE78FE015A6DA44207
    Session-ID-ctx:
    Master-Key: E9AE458F6D72D507F422DA2340C7345AC6EDB087278E62A5FDA754897EC6BDF5C336AFBF6B88554E358C675A3545B724
    Key-Arg   : None
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    TLS session ticket lifetime hint: 100800 (seconds)
    TLS session ticket:
    snip

    Start Time: 1460049698
    Timeout   : 300 (sec)
    Verify return code: 0 (ok)
---
DONE

我在这里使用了 Google 域名,因为它的证书链比 更深example.com。此处的证书具有“主题备用名称”,因此对 也有效inbox.google.com

配置不正确的服务器会跳过中间证书,这里称为“Google Internet Authority G2”。Equifax 证书有点多余,因为 GeoTrust 是浏览器直接信任的知名 CA。

答案2

感谢 Daniel B。问题有两个方面:

  1. 我正在运行一个稍旧版本的 Apache。我完全错过了这个。
  2. 一旦我将配置改回使用SSLCertificateChainFile,我在使用 openssl s_client 时仍然会遇到问题。

结果是,对于第 2 点,我必须取消注释该行。

感谢大家!

相关内容