簡體   English   中英

如何使用具有 SNI 和多個 SSL 證書的 Apache 的不同虛擬主機配置文件?

[英]How to use different vhost config files for Apache with SNI & multiple SSL certificates?

我們的一個設置遇到了問題,不確定這是否可能。

我們正在運行一個簡單的 Ubuntu 18.04LTS 服務器,安裝了 PHP-FPM 和 Apache,它將托管十幾個不同的站點,其中至少一半具有不同的 ZEA52C36202D5311C3CE24 證書。 服務器只有一個 IP 地址/NIC。

為了讓一切更容易管理,我最初在/etc/apache2/sites-available中創建了不同的 vhost 配置文件,所以每個站點都有自己的; 這引起了問題,因為其中一個站點將被視為 SSL 的“默認”站點,其證書將分發給所有其他站點。

通過 StackOverflow 和互聯網,我發現很多帖子都說有一個包含我們所有不同站點配置的單個 vhost 配置文件......但現在我有一個千行配置文件,這對管理。

有沒有辦法使用 SNI,使用單個 IP/NIC,使用不同的 vhost 配置文件,或者我們的設置“不常見”並且我們需要使用單個 vhost 配置文件?

謝謝!

編輯:鏈接到我們使用的虛擬主機配置的副本,當然是經過消毒的: https://pastebin.com/1tQYBSxR

這是 Apache默認為 SSL VirtualHosts 工作的方式:

<VirtualHost *:443>
    ServerName site1.com
    # Certs definitions for site1.com
</VirtualHost>

<VirtualHost *:443>
    ServerName site2.com
    # Certs definitions for site2.com
</VirtualHost>

<VirtualHost *:443>
    ServerName site3.com
    # Certs definitions for site3.com
</VirtualHost>

現在您會期望當客戶端連接到其中一個站點時,Apache 會了解它想要哪個站點並使用該證書,對吧?

但事實並非如此。 Apache直到 SSL 協商完成后才知道請求哪個站點。 因此,它必須始終使用第一個 VirtualHost 證書。

NameVirtualHost (Apache 2.2 指令,在 v2.4 中始終啟用)不適用於 SSL。


可以將每個域的定義放在單獨的文件中。 只要它們都Include在全局配置文件中。 但同樣,只有第一個定義的 VirtualHost 將服務 *.443 請求。

事實上,我已經管理了大約 50 個 VirtualHost 定義的 Apache 服務器,並且將它們全部放在一個文件中將是一場噩夢。 按域拆分它們。 您甚至可以將文件命名為 THE_DOMAIN.conf。


現在如何擺脫這個問題:

  • 每個域有 1 個 IP。 這意味着每個虛擬主機有 1 個 IP。 這樣 Apache 就知道用戶請求了哪個站點,從一開始就知道。 但這需要與您擁有的域一樣多的地址。

  • 每個域有 1 個端口。 一些站點可以使用非默認端口,而不是使用端口 443。 但這對於必須在請求中指定端口的客戶端來說很奇怪。 前任。 https://example.com:445/ 在企業設置中,您可以讓您的 firewall-nat-proxy 將端口更改回客戶端,但這不在此答案的 scope 范圍內。 這可能會被阻止,因為它們不是默認端口。

  • 使用 SNI。 現代瀏覽器支持這一點,在 SSL 協商時發送所需域的標識。

此處詳細介紹了使用 SNI(以及網絡上的其他參考) https://cwiki.apache.org/confluence/display/httpd/NameBasedSSLVHostsWithSNI

概述:

  • 第一個 VirtualHost 仍然是默認用於不支持 SNI 的客戶端(例如舊瀏覽器)。

  • 添加了一個新指令: SSLStrictSNIVHostCheck

  • 您必須在主機上使用最低版本的 OpenSSL,並且必須使用它編譯 Apache。 它必須啟用 TLS 擴展。

玩得開心!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM