Nginx
nginx和SNI:是否可以通過域名自動解析SSL證書
我需要設置一個伺服器,該伺服器將使用不同的域名通過 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 規範知識。