2015-02-23 60 views
0

目前我使用nginx作为我的网络服务器。前段时间,我发现了服务器名称指示(SNI),这是非常有用的,因为我有几个域(包括所有子域)从我的服务器运行。有没有办法禁止https连接到某些没有认证的子域,而使用SNI

因此我退出了,我在我的主域名和我的服务器上的几个子域名上放了一个SSL证书。伟大的工作,没问题:D

(我不只是使用通配符证书的原因是因为我使用http://www.startssl.com/它为我提供免费的SSL证书,但通配符我将不得不支付,我的服务器不是那么重要,它只是一个爱好项目)

因此,对于这个问题: 如果有人浏览到一个不存在的(子)域或没有安装证书的域,他们当然会在浏览器中看到一个很大的警告,因为nginx提供了默认的证书,当然这个证书不符合那个不存在的域名。 我想知道,是否有可能告诉nginx,如果sni系统被要求提供一个非现存的域名,只是终止连接或者做一些事情,而不是名称不匹配的警告,会出现其他一些警告在浏览器说网站不存在(如果甚至这样的系统确实存在...)

我知道一个解决方案:拿走wildcard-dns-record,因此不存在将不存在,但那对存在的不起作用,但对https不起作用。此外,我不能轻易地添加一个新的子域名,也必须编辑它的dns设置。 (我知道,我很懒,但哪个书呆子不是:P)

哦,如果这样的事情是不可能的,我只能忍受它现在的样子,不是那么大的一笔交易,但它会让我的服务器更“冷”xd(即时通讯抱歉,我只是一个随机的技术爱好者)。

+0

我建议在ServerFault上询问这个,但是删除任何提及的爱好者,因为它意味着专业上下文。 – Bruno 2015-02-23 19:56:47

回答

0

只要不使用SSL子域:) 如

server { 
    listen 80; 
    listen 443; 
    server_name example.com; 
    ... 
} 
server { 
    listen 80; 
    server_name *.example.com; 
    ... 
} 
+0

对于每个没有ssl证书的子域,在那里已经没有“listen 443”了,如果你在这个子域上进行https连接,nginx只提供它可以找到的第一个ssl-(子)域名。所以,虽然这不完全是解决方案,但我确实设法让我以正确的方式思考并找到解决方案!我将自己添加为答案 – 2015-02-25 18:18:48

0

原来由SuddenHead答案几乎是解决方案。它只需要一小段额外的步骤。我已经完成了SuddenHead所说的内容,但是如果您要访问一个不存在的子域,或者没有ssl的子域,它只会提供它可以找到的第一个启用ssl的子域。解决方案变得非常简单。确保你的服务器块添加到nginx的-config并确保它是第一一个nginx的会读:

server { 
    listen 80 default_server; 
    listen 443 default_server; 

    return 404; 
} 

这也将成为一个404页的任何不存在的子域(我也想,如果不需要的话,我认为省略listen 80规则应该可行),并且由于没有指定ssl证书详细信息,因此在https上访问此信息会给出无法建立的ssl连接的错误信息,而不是领域不匹配错误与关于某事的警告可能是错误的和东西。这基本上是我正在寻找的东西:D

现在我确定有更多'更好'的方法来做到这一点,但这是我需要的一切。

编辑:我把default_server放在listen指令中,当然会破坏所有默认情况下的原因ssl会被破坏...... ooops。所以我害怕我没有想到这个想法,毕竟这不是解决方案:(

相关问题