我有一个 apache 网络服务器,带有来自letsencrypt 的 mod_ssl 和 SSL 证书。certbot
报告它们很好并且不会过期。一些不同的(我的许多用户)报告说他们从服务器获得了无效/过期的 SSL 证书(我已经看到wget
他们的输出来证明这一点)。
为了调试这个,我想记录每个 SSL 连接的大量细节。我想记录每个 SSL 连接的远程 IP,以及有关 SSL 连接(例如协议)的详细信息,客户端提供的 SNI(服务器名称标识)值,然后使用服务器上的 SSL 证书/链/密钥. 我想要
使用ErrorLog ssl:traceN
(对于各种N
)我可以获得其中的一些细节。但我看不到服务器为每个连接使用的 SSL 证书。我怎样才能做到这一点?
Apache HTTPD
mod_ssl
设置了各种环境变量,其中一些可用于识别服务器证书。例如,有SSL_SERVER_CERT
(完整的 PEM 编码证书)、SSL_SERVER_S_DN
(主题的 DN)、SSL_SERVER_M_SERIAL
(证书序列号)。您可以在日志记录配置中使用它们:
有关详细信息,请阅读mod_ssl 手册。
mod_ssl
导出一堆环境变量(请参阅此处的列表),可用于记录有关证书的信息,例如,在LogFormat
如下指令中:但是,在开始记录之前,请务必查看有关使 DST 根 CA X3 证书过期的文章。它是签署 Let's Encrypt 的根 CA 的,它已于 9 月到期。但是,几乎每个系统都接受 Let's Encrypt 的根 CA 本身作为受信任的 CA。为此,过期不是问题,颁发的证书继续有效,除了使用
openssl
版本 < 1.1.0 的旧系统,它不会在找到受信任的 CA 时停止验证,而是坚持检查整个链(以及失败)。如果有问题的系统有旧的
openssl
,你可以在服务器端解决问题,openssl
应该在客户端升级。如果这不是一个选项,将过期证书列入黑名单会有所帮助。