Nginx

nginx和SNI:是否可以通過域名自動解析SSL證書

  • February 11, 2014

我需要設置一個伺服器,該伺服器將使用不同的域名通過 SSL 提供相同的內容。問題是我需要能夠盡可能輕鬆地添加新域名。假設所有域名都已配置到我的伺服器,我猜是否有可能以某種方式設置 nginx(或者可能是另一個反向代理),以便它將偵聽對特定 IP 的所有請求,並在獲得 HTTPS 請求後嘗試查找用於在某個文件夾或數據庫中發出此請求的域證書,如果找到證書則提供請求(因此我們可以建立安全連接),或者如果找不到證書則拒絕連接。

我不確定這是否可能,或者我正在考慮一些魯莽的事情,但由於我無法在網上找到任何資訊,我決定在這裡問。

據我了解,最簡單的解決方案是為每個應支持的域添加單獨的配置。

我想除了為每個虛擬主機創建單獨的配置之外,沒有其他解決方案。使用應該非常簡單的模板。

但是,一些瀏覽器還不支持 SNI(所有最近的瀏覽器都支持)。這些瀏覽器可能會顯示無效的證書消息。

如果你想拒絕一些沒有證書的虛擬主機的連接,你不應該在這些虛擬主機上啟用 ssl。添加一個預設伺服器,用於擷取 ssl 埠上未知 vhost 的所有連接並返回錯誤(403 禁止或非標準 444 用於 tcp 重置):

server {
   listen 433 default_server ssl;
   ssl_certificate       common.crt;
   ssl_certificate_key   common.key;
   return 403;
}

您無法在沒有 ssl 的虛擬主機上阻止無效證書消息,因為在使用 nginx 的 ssl 握手之前無法取消 tcp 連接。您可以嘗試 iptables 拒絕非 sni ssl 握手,但這可能有點難以正確配置,並且可能需要一些 ssl 規範知識。

引用自:https://serverfault.com/questions/574716