网络服务器调试错误:证书通用名称“myserver”与请求的主机名不匹配

网络服务器调试错误:证书通用名称“myserver”与请求的主机名不匹配

我正在执行 wget 并收到响应:

ERROR: certificate common name ‘mydomain’ doesn't match requested host name

我理解这一点并能纠正。但是上述消息是否记录在服务器端的任何地方?

我正在使用 apache httpd 服务器,但是没有记录(该特定消息)ssl_access_log、ssl_error_log 或 ssl_request_log正如我所料?

非安全请求正在按预期得到处理并记录在访问日志

答案1

假设“标准”配置,ssl_access_log 和 ssl_request_log 会为每个配置写入(格式略有不同)HTTP 请求在 TLS vhost 上收到。如果证书被拒绝,则没有 TLS 连接,并且无法发送任何 HTTP 请求,因此没有任何内容可记录。

根据客户端程序及其使用的 TLS 库,它可能检测证书错误期间握手并发送警报,或者它可能在握手结束时检测到它并关闭连接。如果客户端确实发送了警报,则如果您将 LogLevel 更改为 info 或更低(这不是默认值),则会记录在 ssl_error_log 中。客户端无法发送错误信息仅发出警报代码,并且没有专门针对“错误主机名”的代码,因此客户端必须在几个接近的代码中进行选择。但是,我拥有的 wget 版本(在 CentOS 和 Ubuntu 上)使用 OpenSSL 并且不发送任何警报,它们只是关闭,因此没有记录任何独特的内容。

答案2

不,服务器上没有记录。此检查是在客户端进行的,服务器无法知道是否发生了此问题。

你可以(也应该)配置默认VirtualHost捕获所有与“真实”虚拟主机不匹配的域的请求。这样,您就可以找出是否使用其他主机名向您的服务器发出了请求。但是,为此您需要配置自定义日志格式,我不太确定是否可以记录请求的服务器名称。%{VARNAME}i不过这个变量看起来很有希望。

编辑:正如 Dave 在评论中指出的那样,这只有在向服务器发出实际请求时才会起作用。由于 TLS 握手发生在这之前,因此用户必须在实际发出任何请求之前手动覆盖安全警告。只要不发生这种情况,Apache 就不会记录任何内容。

相关内容