SSL站点未在Apache和Ubuntu中使用正确的IP


10

我正在尝试设置一个apache-ubuntu-php网络服务器。我的网络服务器将托管多个SSL站点,每个SSL站点将具有其自己的IP地址(除非有更好的方法来执行此操作)。

因此,我认为第一步是让apache识别至少两个不同的IP地址。现在,我有一个网站的SSL和非SSL版本,分别为http://mysite.comhttps://mysite.com。尽管两者当前都在我的服务器上运行,但是我不能让两者都使用不同的IP地址。目前,两者都使用IP 1.1.1.1。我购买了第二个IP地址2.2.2.2,但是https://mysite.com将不接受它,并且Firefox抱怨错误“ ssl_error_rx_record_too_long”。这是我的2个虚拟主机文件

/ etc / apache2 / site-enabled / 000-default

#NameVirtualHost 1.1.1.1:80

#<VirtualHost 1.1.1.1:80>
<VirtualHost *:80>
        ServerAdmin webmaster@localhost

        DocumentRoot /var/www
        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>
        <Directory /var/www/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                Order allow,deny
                allow from all
        </Directory>

        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
        <Directory "/usr/lib/cgi-bin">
                AllowOverride None
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
                Order allow,deny
                Allow from all
        </Directory>

        ErrorLog /var/log/apache2/error.log

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn

        CustomLog /var/log/apache2/access.log combined

    Alias /doc/ "/usr/share/doc/"
    <Directory "/usr/share/doc/">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Order deny,allow
        Deny from all
        Allow from 127.0.0.0/255.0.0.0 ::1/128
    </Directory>

</VirtualHost>

/etc/apache2/site-enabled/mysite.com

<VirtualHost 1.1.1.1:80>
     ServerAdmin john@mysite.com
     ServerName mysite.com
     ServerAlias www.mysite.com
     DocumentRoot /srv/www/mysite.com/public_html/
     ErrorLog /srv/www/mysite.com/logs/error.log
     CustomLog /srv/www/mysite.com/logs/access.log combined
</VirtualHost>
<IfModule mod_ssl.c>
#<VirtualHost 2.2.2.2:443>
<VirtualHost *:443>
     ServerAdmin john@mysite.com
     ServerName mysite.com
     ServerAlias www.mysite.com
     DocumentRoot /srv/www/mysite.com/public_html/
     ErrorLog /srv/www/mysite.com/logs/error.log
     CustomLog /srv/www/mysite.com/logs/access.log combined

        SSLEngine on

        SSLCertificateFile    /etc/ssl/localcerts/www.mysite.com.crt
        SSLCertificateKeyFile /etc/ssl/localcerts/www.mysite.com.pem

        <FilesMatch "\.(cgi|shtml|phtml|php)$">
                SSLOptions +StdEnvVars
        </FilesMatch>
        <Directory /usr/lib/cgi-bin>
                SSLOptions +StdEnvVars
        </Directory>

        BrowserMatch ".*MSIE.*" \
                nokeepalive ssl-unclean-shutdown \
                downgrade-1.0 force-response-1.0

</VirtualHost>
</IfModule>

在mysite.com中,如果将<VirtualHost *:443>替换为<VirtualHost 2.2.2.2:443>,则Firefox会出现错误“ ssl_error_rx_record_too_long”。

因此,当我尝试在第三个IP地址上使用另一个SSL证书创建和启用/etc/apache2/site-enabled/mysite2.com时,Apache抱怨出现“重叠”问题。

有人可以告诉我如何启动服务器,以便可以在不同域上托管多个SSL网站吗?我希望SSL证书在流行的OS(例如WinXP,Vista,Win7和OSX)上可用于IE 7 +,FF和Safari。

Answers:


7

我已经通过调整/etc/apache2/ports.conf文件在服务器上进行了如下设置:

<IfModule mod_ssl.c>
NameVirtualHost *:443
    # SSL name based virtual hosts are not yet supported, therefore no
    # NameVirtualHost statement here
    NameVirtualHost *:443
    Listen 443
</IfModule>

然后,您应该可以通过编辑/etc/apache2/sites-enabled/mysite.com来使用它(省略一些代码以简化示例):

<VirtualHost *:443>
     ServerName mysite1.com
     SSLCertificateFile    /etc/ssl/localcerts/www.mysite1.com.crt
     SSLCertificateKeyFile /etc/ssl/localcerts/www.mysite1.com.pem
</VirtualHost>

<VirtualHost *:443>
    ServerName mysite2.com
    SSLCertificateFile    /etc/ssl/localcerts/www.mysite2.com.crt
    SSLCertificateKeyFile /etc/ssl/localcerts/www.mysite2.com.pem
</VirtualHost>

随心所欲的虚拟主机。

编辑:需要第二意见吗?转到此处:http : //forum.slicehost.com/comments.php? DiscussionID= 3244


哦,它奏效了……每个网站都使用相同的1.1.1.1 IP地址。那么这是否意味着我不再需要2.2.2.2 IP地址?每个SSL域都不需要唯一的IP吗?
约翰2010年

您不需要为每个SSL域使用唯一的IP。
Patrick R

请说明为什么每个域都不需要单独的IP。这违背了我对SSL的所有了解...
乔什(Josh)

除了在具有一个IP的服务器上使用多个通配符证书之外,我不确定该说些什么。只要CommonName与ServerName匹配,就可以了。现在,如果您处于共享主机环境中,则这可能允许其他人使用您的证书。如果它对johnlai2004和我都有效...那么,这是什么问题?
Patrick R

voretaq7在serverfault.com/questions/109800/上解释了原因。- 这是TSL,不是SSL。SSL确实要求IP地址和证书之间具有1:1的关系。TLS没有。我只是不知道TLS可以用于HTTPS(尚未)
Josh 2010年

0

我目前无法检查,所以这只是一个疯狂的猜测:通常按字母顺序读取文件。当您以相反的顺序阅读它们时,可能会遇到更多的运气,例如,将000-default重命名为500-default并使用400-myhost。我不记得apache在哪有默认主机-第一或最后一个。但是从您所说的(重叠)来看,可能是最后的


您可以看到它将与apachectl -t -D DUMP_VHOSTS一起使用。顺序是倒数第一。
理查德·萨尔斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.