хостинг нескольких сертификатов SSL на apache - PullRequest
14 голосов
/ 08 марта 2011

Я надеюсь, что кто-то может помочь мне с этим.У меня есть 2 IP-адреса, которые я могу использовать для этого, и мне нужно разместить 2 разных защищенных (SSL) домена на одном сервере Apache.Начиная с Apache 2.2, я читал, что можно использовать один IP-адрес, используя какую-то надстройку, но я хочу сделать это как можно более простым и готов использовать оба IP-адреса для выполнения этой задачи.У меня уже есть 2 подписанных сертификата для доменов.

Эта настройка, которую я публикую здесь, работает, но проблема, с которой я сталкиваюсь, заключается в том, что при переходе на domain2.net я получаю предупреждение браузера, сообщающее мнечто сертификат не соответствует домену, но соответствует domain1.com

Я использую CentOS 5 и Apache 2.2.3.В CentOS есть файл ssl.conf, и я думаю, что эти строки вызывают у меня проблемы:

SSLCertificateFile /etc/pki/tls/certs/domain1.com.crt
SSLCertificateKeyFile /etc/pki/tls/private/domain1.com.key

У меня сложилось впечатление, что я могу переопределить эти значения в контейнерах виртуального хоста и ссылаться на ключи, которые янужно, но так не кажется.Когда я комментирую эти две строки в файле ssl.conf, Apache не перезапускается.Подсказки ssl_log: SSLCertificateKeyFile

Это мои виртуальные контейнеры:

<VirtualHost 2.2.2.2:443>
   SSLEngine on
   SSLCertificateFile /etc/pki/tls/certs/domain2.net.crt
   SSLCertificateKeyFile /etc/pki/tls/private/domain2.net.key

  DocumentRoot "/var/www/domain2"
   ServerName domain2.net
   ServerAlias domain2.net
   DirectoryIndex "index.php"

   <Directory /var/www/html/domain2>
     Options -Indexes FollowSymLinks
     AllowOverride All
     Order allow,deny
     Allow from all
   </Directory>
</VirtualHost>


<VirtualHost 1.1.1.1:444>
   SSLEngine on
   SSLCertificateFile /etc/pki/tls/certs/domain1.com.crt
   SSLCertificateKeyFile /etc/pki/tls/private/domain1.com.key

  DocumentRoot "/var/www/html"
   ServerName domain1.com
   ServerAlias domain1.com
   DirectoryIndex "index.php"

   <Directory /var/www/html>
     Options -Indexes FollowSymLinks
     AllowOverride All
     Order allow,deny
     Allow from all
   </Directory>
</VirtualHost>

Как мне заставить эти два домена работать с использованием SSL?Я также пытался использовать один и тот же порт для разных IP-адресов, но опять же, Apache не перезагружается.

Я действительно потерян, поэтому, если кто-то может протянуть руку, я был бы очень признателен.

Ответы [ 2 ]

10 голосов
/ 02 мая 2011

Отличный вопрос!

Мне удалось получить два SSL-сертификата, работающих на одном сервере.Вы должны быть в состоянии сделать то, что пытаетесь сделать.

То, что в вашей конфигурации выделяется для меня странным образом:

  1. Я бы предложил использовать порт443 для обоих сайтов, защищенных SSL.У вас должна быть конкретная инструкция в файлах conf apache где-нибудь для прослушивания через порт 443. Для меня она находится в /etc/apache2/ports.conf

    Listen 443
    

    .

  2. Кажется странным, что вы используете ServerName и ServerAlias, которые используют один домен для каждого виртуального хоста.Попробуйте сделать ServerAlias ​​другим или не указывать:

    ServerName domain1.com
    ServerAlias www.domain1.com
    

    .

  3. Я предполагаю, что вы заменили свои IP-адреса и домены в опубликованном сообщении.Даже если они не являются фактическими IP-адресами, которые вы используете, вы можете дважды проверить, могут ли они доставить вас в нужное место за пределами SSL (поскольку, очевидно, SSL не работает).

.

Проверьте журнал ошибок apache2 для получения дополнительной информации.Для меня журнал находится по адресу: /var/log/apache2/error.log.Вы можете установить его с помощью: ErrorLog /var/log/apache2/error.log

И, наконец, для вашей справки вот мой ssl-default (ssl.conf).Я заменил свои домены и IP-адреса теми, которые вы использовали в вашем примере conf.У меня есть несколько поддоменов, работающих с NameVirtualHost, так как у меня есть сертификат подстановочного знака:

<IfModule mod_ssl.c>
<Directory />
  Options FollowSymLinks
  AllowOverride All
</Directory>
<Directory /var/www/>
  Options  FollowSymLinks MultiViews
  AllowOverride All
  Order allow,deny
  allow from all
</Directory>

NameVirtualHost 1.1.1.1:443
NameVirtualHost 2.2.2.2:443

ErrorLog /var/log/apache2/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog /var/log/apache2/ssl_access.log combined

<FilesMatch "\.(cgi|shtml|phtml|php)$">
  SSLOptions +StdEnvVars
</FilesMatch>

# 1.1.1.1 = domain1.com

<VirtualHost 1.1.1.1:443>
  ServerName www.domain1.com

  ServerAdmin admin@domain1.com

  SSLEngine on
  SSLCertificateKeyFile /var/www/ssl/domain1.key
  SSLCertificateFile /var/www/ssl/wildcard.domain1.crt

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

  DocumentRoot /var/www/domain1/www.domain1.com/web
  DirectoryIndex index.php index.html
</VirtualHost>

<VirtualHost 1.1.1.1:443>
  ServerName secure.domain1.com

  ServerAdmin admin@domain1.com

  SSLEngine on
  SSLCertificateKeyFile /var/www/ssl/domain1.key
  SSLCertificateFile /var/www/ssl/wildcard.domain1.crt

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

  DocumentRoot /var/www/domain1/secure.domain1.com/
  DirectoryIndex index.php index.html
</VirtualHost>


# 2.2.2.2 = *.domain2.com

<VirtualHost 2.2.2.2:443>
  ServerName admin.domain2.com

  ServerAdmin admin@domain2.com

  SSLEngine on
  SSLCertificateKeyFile /var/www/ssl/domain2.key
  SSLCertificateFile /var/www/ssl/domain2.crt

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

  LogLevel warn
  CustomLog /var/log/apache2/access.log combined
  ErrorLog /var/log/apache2/error.log

  DocumentRoot /var/www/domain2/secure.domain2.com/web
  DirectoryIndex index.php index.html

  php_flag display_errors on
  php_value error_reporting 7
</VirtualHost>

</IfModule>

Надеюсь, это поможет !!

0 голосов
/ 15 февраля 2012

Вам не нужен отдельный файл ssl.config, но если вы хотите его использовать, поместите контейнеры SSL <VirtualHost XXX:443> в файл ssl.conf, а не в файл httpd, conf.

Другой вариант, который мы используем на нашем сайте, - это поместить настройки из файла ssl.conf в наш файл httpd.conf и переименовать файл ssl.conf во что-то вроде ssl.conf.bak (чтобы сохранить его для справки) ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...