Сайт SSL не использует правильный IP в Apache и Ubuntu

10

Я пытаюсь настроить веб-сервер apache-ubuntu-php. Мой веб-сервер будет содержать несколько сайтов SSL, каждый сайт SSL будет иметь свой собственный IP-адрес (если нет лучшего способа сделать это).

Поэтому я полагаю, что первый шаг - заставить apache распознавать как минимум два разных IP-адреса. Прямо сейчас у меня есть версия веб-сайта в формате SSL и без него: http://mysite.com и https://mysite.com . Хотя оба в настоящее время работают на моем сервере, я не могу заставить оба использовать разные IP-адреса. Прямо сейчас оба используют IP 1.1.1.1. Я купил второй IP-адрес 2.2.2.2, но https://mysite.com не примет его, и Firefox жалуется на ошибку «ssl_error_rx_record_too_long». Вот посмотрите на мои 2 файла vhost

/ И т.д. / apache2 / сайт с поддержкой / 000 по умолчанию

#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».

Поэтому, когда я пытаюсь создать и включить /etc/apache2/site-enabled/mysite2.com с другим сертификатом SSL на третьем IP-адресе, Apache жалуется на проблему «перекрытия».

Может кто-нибудь сказать мне, как настроить мой сервер, чтобы я мог разместить несколько SSL-сайтов в разных доменах? Я хочу, чтобы сертификат SSL работал для IE 7+, FF и Safari в популярных ОС, таких как WinXP, Vista, Win7 и OSX.

Джон
источник

Ответы:

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>

За столько vhosts, сколько хотите.

Изменить: НУЖНО ВТОРОЕ МНЕНИЕ? ПОЙДИТЕ ЗДЕСЬ: http://forum.slicehost.com/comments.php?DiscussionID=3244

Патрик Р
источник
о, это сработало ... и каждый из веб-сайтов использует один и тот же IP-адрес 1.1.1.1. Значит ли это, что мне больше не нужен IP-адрес 2.2.2.2? Мне не нужен уникальный IP для каждого домена SSL?
Джон
Вы не обязаны использовать уникальный IP-адрес для каждого домена SSL.
Патрик Р
Пожалуйста, объясните, почему вам не нужен отдельный IP для каждого домена. Это идет вразрез со всем, что я понимаю о SSL ...
Джош
Я не уверен, что сказать, кроме того, что я использовал несколько сертификатов подстановочных знаков на серверах с одним IP. Пока CommonName совпадает с ServerName, все будет в порядке. Теперь, если вы находитесь в среде общего хостинга, это может позволить другим использовать ваш сертификат. Если это сработало для johnlai2004 и меня ... ну тогда в чем проблема?
Патрик Р
voretaq7 объяснил причину на serverfault.com/questions/109800/… - Это TSL, а не SSL. SSL требует отношения 1: 1 между IP-адресами и сертификатами. TLS нет. Я просто не знал, что TLS можно использовать для HTTPS (пока)
Джош
0

Я не могу проверить в настоящее время, так что это просто дикая догадка: файлы обычно читаются в алфавитном порядке. Возможно, вам повезет больше, если вы прочитаете их в обратном порядке, например, переименуйте 000-default в 500-default и используйте 400-myhost. Я не могу вспомнить, где apache любит иметь хост по умолчанию - первый или последний. Но из того, что вы говорите (перекрытия), это может быть последним

Olaf
источник
Вы можете увидеть, что он будет использовать с apachectl -t -D DUMP_VHOSTS. Заказ является первым до последнего.
Ричард Солтс