2013-12-09 46 views
-1

嗨我想爲一個網站提供兩個子域名,並且這兩個子域名都應該在SSL下。我已經購買了通配符SSL證書並安裝了它。在我的虛擬主機文件中,我有5個定義:www(80),app(80/443)和staging(80/443)。所有子域名的工作,下端口80基於名稱的虛擬主機在Apache 2.2.3/CentOS 5.9上使用SSL

這是我的vhosts.conf文件的一個片段:

NameVirtualHost *:80 
NameVirtualHost *:443 

<VirtualHost *:80> 
    ServerAdmin [email protected] 
    ServerName app.--- 
    DocumentRoot /var/www/vhosts/---/app/www/ 
    ErrorLog /var/www/vhosts/---/app/log/error.log 

    <Directory "/var/www/vhosts/---/app/www"> 
    Options Indexes FollowSymLinks 
    AllowOverride All 
    </Directory> 
</VirtualHost> 

<VirtualHost *:443> 
    ServerAdmin [email protected] 
    ServerName app.--- 
    DocumentRoot /var/www/vhosts/---/app/www/ 
    ErrorLog /var/www/vhosts/---/app/log/ssl.log 

    SSLEngine ON 
    SSLCertificateFile /etc/httpd/conf.d/ssl/---/ssl.crt 
    SSLCertificateKeyFile /etc/httpd/conf.d/ssl/---/ssl.key 
    SSLCertificateChainFile /etc/httpd/conf.d/ssl/---/intermediate.crt 

    <Directory "/var/www/vhosts/---/app/www"> 
    Options Indexes FollowSymLinks 
    AllowOverride All 
    </Directory> 
</VirtualHost> 

<VirtualHost *:80> 
    ServerAdmin [email protected] 
    ServerName staging.--- 
    DocumentRoot /var/www/vhosts/---/staging/www/ 
    ErrorLog /var/www/vhosts/---/staging/log/error.log 

    <Directory "/var/www/vhosts/---/staging/www"> 
    Options Indexes FollowSymLinks 
    AllowOverride All 
    </Directory> 
</VirtualHost> 

<VirtualHost *:443> 
    ServerAdmin [email protected] 
    ServerName staging.--- 
    DocumentRoot /var/www/vhosts/---/staging/www/ 
    ErrorLog /var/www/vhosts/---/staging/log/ssl.log 

    SSLEngine ON 
    SSLCertificateFile /etc/httpd/conf.d/ssl/---/ssl.crt 
    SSLCertificateKeyFile /etc/httpd/conf.d/ssl/---/ssl.key 
    SSLCertificateChainFile /etc/httpd/conf.d/ssl/---/intermediate.crt 

    <Directory "/var/www/vhosts/---/staging/www"> 
    Options Indexes FollowSymLinks 
    AllowOverride All 
    </Directory> 
</VirtualHost> 

如果我改變這一行:

<VirtualHost *:443> 

要:

<VirtualHost SERVER_IPADDRESS:443> 

第一個定義將按預期工作並使用正確的證書。當我重新啓動Apache時,我在終端中收到一條消息,指出有重複條目,只有第一條將被使用。

利用的conf,因爲它是上面我沒有收到終端的任何錯誤或警告,但我已經看到了這在Apache的日誌:

[warn] Init: You should not use name-based virtual hosts in conjunction with SSL!! 

從我在網上讀到警告預計並不應該是一個問題。

運行configtest顯示語法OK。

看來問題是用SSL命名的虛擬主機。我已經檢查了3個在線指南並嘗試了各種各樣的東西(使用* .domain.com作爲ServerName作爲ServerName作爲ServerAlias),子作爲指令(app.domain.com:443),但可以' t只需使用一個IP地址即可找出在80和443下爲每個子域服務的正確組合。

我知道這是可能的。關於我失蹤的任何想法?

回答

0

我能夠找到哪一個不是很好的唯一解決方案就是在CentOS 6.4上重建。 Russ提到的問題是內置的Apache/OpenSSL不支持SNI。我設法在5.9中升級了OpenSSL,但我無法通過SNI構建Apache。我使用了一個指示器來顯示要使用的標誌,但它沒有起作用。這並不是說它不能完成,我可能做錯了,因爲這是一個新的網站,停機時間不是問題,這樣做更容易。

一旦問題在error_log中改變警告校正爲該:

[warn] Init: Name-based SSL virtual hosts only work for clients with TLS server name indication support (RFC 4366) 

感謝您的幫助!

1

檢查您正在使用的apache版本。這可能是因爲你的Apache太老了,無法支持它。我認爲sni在apache 2.2.12及更高版本中得到了支持。

+0

更新了我的帖子,httpd -v顯示Apache/2.2.23(Unix)。是否默認包含SNI,還是必須自行安裝? – Jonathan

+0

不確定關於centos 5.9。我唯一一次使用SNI,我從新的2.4版本編譯了我自己的apache。它還需要最低版本的openssl才能正常工作,所以這可能是另一件需要檢查的事情。 –

+1

如果您只有一個通配符證書,則不需要SNI工作。如果您有2個或更多證書,SNI用於選擇正確的證書以返回給客戶。 – woollybrain