我有一个使用SNI的Nginx实例来从一个IP服务多个HTTPS域。
这个设置唯一的问题是Nginx在请求服务器的裸IP的IP地址或者没有对应的HTTPS服务器块的那个IP地址列出的域时,Nginx响应第一个(作为默认)域。 在这种情况下,我宁愿简单地返回一个标准的403禁止 – 我会设置一个默认的服务器块来做到这一点,但我不能看到解决客户端证书不匹配的警告。
(如何c | C)我configurationNginx拒绝对这样的未知/未定义的域的请求,而不需要指定一个特定的ssl证书,这将打乱浏览器? (也就是说,我需要Nginx拒绝这个请求,然后用一个“坏”证书来破坏客户端 – 从客户端的POV开始,这应该与根本没有定义HTTPS服务器块的情况相同)。
这个问题与我昨天回答的问题非常相似: nginx和SNI:是否可以通过域名自动parsingSSL证书
用户在浏览器中看到错误的证书消息之前,不可能拒绝连接。 到Nginx可能会返回一个HTTP 403答案时,SSL握手结束,并完成握手浏览器必须接受提供的证书。 您只能在用户通过设置默认服务器接受证书后拒绝连接:
server { listen 433 default_server ssl; ssl_certificate common.crt; ssl_certificate_key common.key; return 403; }
但是,大多数最新的浏览器都支持“服务器名称指示”,如果您为每个虚拟主机设置了一个证书,那么普通用户很难看到这个信息。
有可能在没有有效的主机名的情况下拒绝SSL使用iptables的连接,但这可能相当棘手,根本不符合任何标准。
更新的信息:在显示证书错误之前,可以return 444以立即中止tcp连接。
如果您的域名是同一个主域(* .example.com)的子域名,则可以使用通配符证书。 否则,我认为你不能提供任何浏览器将会感到满意的证书。