为什么使用 https 时,catch-all 服务器上的连接被视为不安全?

为什么使用 https 时,catch-all 服务器上的连接被视为不安全?

我在单独的 conf 文件中设置了一个 catch-all 服务器。我的目标是创建一个全局配置,这样就不必在每个虚拟主机上定义一个 default_server。但是,即使使用有效的证书,连接仍然被视为不安全的。为什么会发生这种情况?当返回代码 444 时,这是正常的吗?

sites-available/rejected.conf 文件:

server {
    listen       80  default_server;
    listen       443 ssl default_server;
    server_name  _;
    ssl_certificate     /etc/nginx/ssl/certificate.crt;
    ssl_certificate_key /etc/nginx/ssl/certificate.key;
    return       444;
}

答案1

根据原始帖子的评论,您在访问 myplace.mydomain.com 或服务器的 IP 地址时遇到了问题。您还声明您使用的是 *.myplace.mydomain.com 通配符证书。如果它没有 myplace.mydomain.com 的 SAN,它将不匹配,因此无效;同样,由于 SSL 使用主机名而不是 IP,它不会匹配 IP 地址,因此在那里也将无效。

检查您的证书涵盖的 SAN,如下所示:

openssl s_client -connect myapp.myplace.mydomain.com:443 </dev/null 2>/dev/null | openssl x509 -noout -text | grep DNS:

你应该得到如下结果:

                DNS:*.myplace.mydomain.com, DNS:myplace.mydomain.com

您会注意到,这两个条目涵盖了 myplace.mydomain.com 的任何子域(*.myplace.mydomain.com),以及常规域本身(myplace.mydomain.com)。如果您只有子域的通配符,则当有人访问 myplace.mydomain.com 时,您将无法匹配证书。

相关内容