我在单独的 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 时,您将无法匹配证书。