Хостинг нескольких сертификатов SSL на apache

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

Эта настройка, которую я публикую здесь, работает, но проблема, с которой я сталкиваюсь, заключается в том, что когда я перехожу в домен2.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 не перезапустится.

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

Ответы

Ответ 1

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

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

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

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

    Listen 443
    

    .

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

    ServerName domain1.com
    ServerAlias www.domain1.com
    

    .

  • Я предполагаю, что вы заменили свои IP-адреса и домены в своем размещенном conf. Даже если они не являются фактическими 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 [email protected]

  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 [email protected]

  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 [email protected]

  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>

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

Ответ 2

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

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