nginx ssl 拒绝不匹配的 server_name 请求

Posted

技术标签:

【中文标题】nginx ssl 拒绝不匹配的 server_name 请求【英文标题】:nginx ssl rejecting non matched server_name requests 【发布时间】:2018-09-19 13:07:24 【问题描述】:
server 
        lerver 
        listen       443 ssl;
        server_name  proxy.test.com;

        ssl_certificate      sni.crt;
        ssl_certificate_key  sni.key;

        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;

        ssl_ciphers  HIGH:!aNULL:!MD5;

        location / 
            root   html;
            index  index.html index.htm;
        
    

    server 
        listen       443 default_server ssl;
        server_name  test.com; 

        ssl_certificate      test-cn.crt;
        ssl_certificate_key  test-cn.key;

        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;

        ssl_ciphers  HIGH:!aNULL:!MD5;

        location / 
            root   html;
            index  index.html index.htm;
        

      

我想用 ssl 配置 nginx 以支持 SNI 请求(来自客户端的 ClientHello 中的 server_name 指令),拒绝与不匹配的 server_name SNI 请求的握手,并为非 SNI 请求提供默认证书(没有 server_name 指令的 ClientHello)。

通过以上配置,我可以让 nginx 响应 proxy.test.com 的 SNI 请求。但是对于 SNI 请求为 invalid-domain.com 的 ClientHello 和没有 SNI 请求的 ClientHello,使用默认服务器块。如何让 nginx 拒绝对 invalid-domain.com 的 SNI 请求,同时为非 SNI 请求设置默认服务器块?

【问题讨论】:

【参考方案1】:

我遇到了 nginx 的这个新功能,如果请求的 server_name 与您在 server 指令中列出的内容不匹配,它甚至会在发送 server_hello 之前丢弃请求。我认为这将有助于完成您想要做的事情。除非 SNI 与 proxy.test.com 匹配,否则以下配置应将所有请求丢弃到 443。

server 
    listen               443 ssl;
    ssl_reject_handshake on;

server 
        listen       443 ssl;
        server_name  proxy.test.com;

        ssl_certificate      sni.crt;
        ssl_certificate_key  sni.key;

        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;

        ssl_ciphers  HIGH:!aNULL:!MD5;

        location / 
            root   html;
            index  index.html index.htm;
        
 

文档链接。

ssl_reject_handshake

【讨论】:

以上是关于nginx ssl 拒绝不匹配的 server_name 请求的主要内容,如果未能解决你的问题,请参考以下文章

“aaaaa”存储库的拉取访问被拒绝不存在或可能需要“docker login”

最高月薪16K,考编失败转行测试的他说:努力,是为了有底气拒绝不喜欢的人生

Nginx:如何仅将主域与 server_name 匹配

解析Java为啥不接受合法的HTTPS证书

WordPress启用https配置

SED 模式匹配