Apache-2.2

為具有相同文件根的不同子域設置兩個 SSL

  • January 3, 2017

我有這個目錄:

/var/www/domain.com/web/domains/example.com
/var/www/domain.com/web/domains/cdn.example.com
/var/www/domain.com/web/domains/app.example.com

這意味著,我沒有指定每個網站的子域,但我只是在這個目錄中創建子域,我的 .htaccess 會處理這個問題。

現在我正在解決這個問題 - 我有域 app.example.com 的 SSL 證書,但我還需要為 cdn.example.com 設置 SSL,但我不知道如何設置它。我試圖為 cdn.example.com 生成 SSL 證書,但我無法為 cdn.example.com 設置它 -> 如果我嘗試這個:

echo | openssl s_client -connect cdn.example.com:443 2>/dev/null

我仍然看到,該證書主題是app.example.com而不是cdn.example.com,所以我認為,它仍在嘗試為該域獲取錯誤的證書。

SSL 的目錄是正確的。您在我的example.com.vhost文件中看到任何失敗嗎?

<VirtualHost *:443>

       DocumentRoot /var/www/example.com/web

       ServerName app.example.com
       ServerAlias app.example.com

       <IfModule mod_ssl.c>
       SSLEngine on
       SSLProtocol All -SSLv2 -SSLv3
       SSLCertificateFile /var/www/clients/client1/web17/ssl/example.com.crt
       SSLCertificateKeyFile /var/www/clients/client1/web17/ssl/example.com.key
       </IfModule>

</VirtualHost>
<VirtualHost *:443>
       DocumentRoot /var/www/example.com/web

       ServerName cdn.example.com
       ServerAlias cdn.example.com

       <IfModule mod_ssl.c>
       SSLEngine on
       SSLProtocol All -SSLv2 -SSLv3
       SSLCertificateFile /var/www/clients/client1/web17/ssl/cdn/server.crt
       SSLCertificateKeyFile /var/www/clients/client1/web17/ssl/cdn/server.key
       </IfModule>

</VirtualHost>

您正在測試沒有 servername 標識符的 SSL。要為每個 IP 擁有多個 SSL 證書,您的客戶端將需要使用SNI擴展。

因此,要使用 OpenSSL 進行測試,您需要設置-servername. 您的命令將是:

echo | openssl s_client -servername cdn.website.com -connect cdn.website.com:443

在 Apache 2.2 下。您需要指令 NameVirtualHost 來指定共享相同 IP 的不同虛擬主機。

您複製粘貼的配置中似乎缺少的是:

NameVirtualHost *:443

只需定義一次,Apache 2.2 將根據請求的 Host 標頭知道每個請求應傳遞給哪個虛擬主機。

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