我需要设置一个服务器,使用不同的域名通过SSL服务器上的相同内容。 问题是我需要能够尽可能轻松地添加新的域名。 假设所有的域名已经configuration到我的服务器,我猜是否有可能以某种方式设置nginx(或者可能是另一个反向代理),以便它将监听所有请求到特定的IP,并在获得HTTPS请求后尝试查找用于在某个文件夹或数据库中创build此请求的域的证书,并在发现证书(因此我们可以build立安全连接)时提供请求,或者如果找不到证书,则拒绝连接。
我不确定这是可能的,也许我正在考虑一些鲁莽的事情,但是因为我没有在网上find任何信息,所以我决定在这里问。
据我所知,最简单的解决scheme将是为每个应支持的域添加一个单独的configuration。
我想没有其他解决scheme,为每个虚拟主机创build一个单独的configuration。 使用应该很简单的模板。
但是,SNI尚未被某些浏览器(所有最新浏览器都支持)所支持。 这些浏览器可能会显示无效的证书消息。
如果你想拒绝没有证书的一些虚拟主机的连接,你应该不要在这些虚拟主机上启用SSL。 添加一个默认服务器,在ssl端口上捕获未知虚拟主机的所有连接,并返回一个错误(403 forbiden或非标准444 for tcp reset):
server { listen 433 default_server ssl; ssl_certificate common.crt; ssl_certificate_key common.key; return 403; }
您无法防止没有ssl的vhost上的无效证书消息,因为在使用nginx进行ssl握手之前,无法取消tcp连接。 您可以尝试使用iptables来拒绝非sni ssl握手,但正确configuration可能有点棘手,并可能需要一些ssl规范的知识。