mod_log_config无法记录SSL/TLS握手失败的错误代码,因其仅在TLS成功握手后处理HTTP请求时生效;失败时连接被SSL层中断,错误码(如error:1408A0C1)只出现在error_log中,需配合LogLevel ssl:info和openssl errstr解析。

不能。
mod_log_config 无法记录 SSL/TLS 握手失败的具体协议错误代码。
原因很直接:握手失败时,连接根本不会进入 Apache 的日志记录流程。mod_log_config 只作用于已成功建立 TLS 连接、并开始处理 HTTP 请求的阶段。一旦 ClientHello 解析出错、协议不匹配、证书验证失败或密钥协商中断——这些都发生在 TLS 层,Apache 还没来得及调用日志模块,进程就已在 SSL_accept() 阶段返回错误并关闭连接。
所以,像 error:1407609C(表示客户端发了 HTTP 明文请求而非 TLS 握手包)、error:1408A0C1(不支持的协议版本)、error:14094410(证书无效)这类 OpenSSL 错误码,只出现在 error_log 中,且必须配合足够高的日志级别才能捕获。
要定位具体错误代码,需这样做:
-
在 Apache 配置中启用详细 SSL 日志:
LogLevel ssl:info # 调试时可临时设为 ssl:debug,但注意磁盘和性能开销
确保
mod_ssl已加载,并检查ssl.conf或虚拟主机配置中没有遗漏SSLEngine on等基础指令。-
复现失败请求后,去
error_log查找含以下关键词的行:SSL_do_handshake failedSSL_accept failed-
OpenSSL: error:后跟十六进制错误码(如error:1408A0C1)
-
用
openssl errstr解析错误码含义:openssl errstr 1408A0C1 # 输出类似:error:1408A0C1:SSL routines:SSL3_GET_CLIENT_HELLO:no shared cipher
结合前后几行日志看上下文:比如前一行是否显示
Client sent ALPN, 是否有SNI: example.com, 是否提示no ciphers available—— 这些比单个错误码更能说明问题根源。
简言之:别指望 mod_log_config 记握手失败;盯紧 error_log,调高 LogLevel ssl:info,再用 openssl errstr 翻译错误码。











