Apache SNI namevhosts 總是路由到第一個 VirtualHost 條目
<VirtualHost *:443>
無論 ServerName/ServerAlias 欄位上的 SNI 是否匹配,Apache 似乎都會將所有 https 請求路由到第一個請求。Apache 使用 SNI 建構
伺服器版本:Apache/2.2.22 (Ubuntu)
伺服器建構時間:2013 年 3 月 8 日 15:53:13
OpenSSL 1.0.1 2012 年 3 月 14 日
error.log 報告:
Init: Name-based SSL virtual hosts only work for clients with TLS server name indication support (RFC 4366)
這表明 SNI 正在按照http://wiki.apache.org/httpd/NameBasedSSLVHostsWithSNI工作(如何判斷您的 Apache 建構是否支持 SNI?)
SSL_TLS_SNI
似乎在使用 HTTPS 請求時設置得當(用 驗證phpinfo()
)配置:
<IfModule mod_ssl.c> # If you add NameVirtualHost *:443 here, you will also have to change # the VirtualHost statement in /etc/apache2/sites-available/default-ssl # to <VirtualHost *:443> # Server Name Indication for SSL named virtual hosts is currently not # supported by MSIE on Windows XP. NameVirtualHost *:443 Listen 443 </IfModule> #<VirtualHost *:443> # <Location /> # Order allow,deny # Deny from all # </Location> #</VirtualHost> <VirtualHost *:443> SSLEngine on ServerAdmin webmaster@localhost ServerName server.com ServerAlias server.com DocumentRoot /web/default ErrorLog ${APACHE_LOG_DIR}/error.log # Possible values include: debug, info, notice, warn, error, crit, # alert, emerg. LogLevel warn CustomLog ${APACHE_LOG_DIR}/access.log combined SSLCertificateFile /path/server.com.crt SSLCertificateKeyFile /path/server.com.key </VirtualHost> <VirtualHost *:443> SSLEngine on ServerAdmin webmaster@localhost ServerName alias.com ServerAlias alias.com DocumentRoot /web/default ErrorLog ${APACHE_LOG_DIR}/error.log # Possible values include: debug, info, notice, warn, error, crit, # alert, emerg. LogLevel warn CustomLog ${APACHE_LOG_DIR}/access.log combined SSLCertificateFile /path/alias.com.crt SSLCertificateKeyFile /path/alias.com.key </VirtualHost>
https://server.com>和<https://alias.com都嘗試從 server.com 提供證書(如果您忽略證書警告,則提供內容)
類似的配置使用 HTTP:80 可以正常工作(唯一的變化是 SSLEngine 和證書/密鑰路徑)
如果我取消註釋第一個虛擬主機(限制對已定義站點的 HTTPS 訪問),那麼我總是會收到 SSL 錯誤(即使它是已定義站點)
謝謝
編輯:
附加標誌
SSLProtocol all SSLCipherSuite HIGH:MEDIUM SSLStrictSNIVHostCheck on SSLVerifyClient none SSLProxyEngine off
SSLStrictSNIVHostCheck on
所以它應該只支持啟用 SNI 的瀏覽器
apache2ctl -S
輸出:*:443 is a NameVirtualHost default server server.com (/etc/apache2/sites-enabled/000-default:22) port 443 namevhost server.com (/etc/apache2/sites-enabled/000-default:22) port 443 namevhost alias.com (/etc/apache2/sites-enabled/000-default:39) port 443 namevhost other.com (/etc/apache2/sites-enabled/other:22)
更新
因此,出於某種奇怪的原因,問題似乎已經解決了。
也許這是某種奇怪的記憶體問題或其他東西(儘管我已經
apache2ctl stop/start/restart
和sudo service apache2 stop/start/restart/reload
ed 很多次並且已經在伺服器上本地執行了測試以及使用了幾台不同的機器)。如果它可以作為任何參考,請隨意記下這個問題或將其保留。
感謝所有的幫助傢伙!
您的配置看起來不錯;已包含指令 SSLEngine On;根據日誌消息,問題似乎來自客戶端。
並非所有客戶端都支持 SNI,但大多數客戶端都支持。這取決於 SSL 協商是如何進行的,由系統(在 Win XP 上不起作用)或瀏覽器(版本必須足夠新)。查看支持 SNI 的瀏覽器列表。如果您必須確保所有客戶端都可以訪問您的網站,則由於這些舊版本(瀏覽器或系統),您不能使用 SNI。您需要每個 ServerName 一個 IP 並使用 VirtualHost $ IP_alias:443 for ServerName alias.com and VirtualHost $ IP_server:443 用於 ServerName server.com 而不是 VirtualHost *:443 用於兩者。