Назад | Перейти на главную страницу

Apache 2.4 SSL _default_ переопределение виртуального хоста

У меня есть сервер Apache 2.4, на котором я создал самозаверяющий сертификат для тестирования https с новым клиентским сайтом. Проблема, с которой я сталкиваюсь, заключается в том, что файл ssl.conf всегда загружается для моего сайта, когда я пытаюсь перейти на определенный виртуальный хост, который я настроил в отдельном файле vhosts.conf.

Может ли кто-нибудь помочь мне понять, почему желаемый виртуальный хост никогда не загружается, а загружается только по умолчанию?

Мое содержимое ssl.conf

Listen 443 https

SSL Global Context
SSLPassPhraseDialog exec:/usr/libexec/httpd-ssl-pass-dialog

SSLSessionCache         shmcb:/run/httpd/sslcache(512000)
SSLSessionCacheTimeout  300

SSLRandomSeed startup file:/dev/urandom  256
SSLRandomSeed connect builtin

SSLCryptoDevice builtin

<VirtualHost _default_:443>
  DocumentRoot "/var/www/html"
  ServerName localhost:443

  ErrorLog logs/default_ssl_error_log
  TransferLog logs/default_ssl_access_log
  LogLevel warn

  SSLEngine on
  SSLProtocol all -SSLv2
  SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5:!SEED:!IDEA

  SSLCertificateFile /etc/pki/tls/certs/localhost.crt
  SSLCertificateKeyFile /etc/pki/tls/private/localhost.key

  <Files ~ "\.(cgi|shtml|phtml|php3?)$">
    SSLOptions +StdEnvVars
  </Files>
  <Directory "/var/www/cgi-bin">
    SSLOptions +StdEnvVars
  </Directory>

  BrowserMatch "MSIE [2-5]" \
     nokeepalive ssl-unclean-shutdown \
     downgrade-1.0 force-response-1.0

  CustomLog logs/ssl_request_log \
      "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
</VirtualHost>

Содержание моего файла виртуального хоста

<VirtualHost demo.ffh.com:443>
  ServerAdmin   skittles@site.com
  ServerName    demo.ffh.com
  DocumentRoot  "/var/www/vhosts/ffh/public"

  RewriteEngine On
  # And THIS doesn't seem to be working at all!
  LogLevel debug rewrite:trace8

  <Directory "/var/www/vhosts/ffh/public/">
    AllowOverride all
    SSLOptions +StdEnvVars
    #Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
    Order allow,deny
    Allow from all
    SSLRequireSSL On
  </Directory>

  SSLEngine on

  SSLCertificateKeyFile /etc/httpd/ssl/ssl.key/demo_ffh.key
  SSLCertificateFile    /etc/httpd/ssl/ssl.crt/demo_ffh.crt

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

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

  CustomLog logs/ssl_ffh-access.log combined
  ErrorLog logs/ssl_ffh-error.log
</VirtualHost>

Кто-нибудь понимает, почему сайт vhosts.conf игнорируется в пользу значения по умолчанию? И как мне это исправить? Я весь день бился головой об стену с этим.

ПРИМЕЧАНИЕ: «Вероятно, стоит сказать, что я пробовал использовать IP-адрес и *: 443 в vhost.conf вместо домена, но все равно не любил».

У меня была эта проблема, и четыре решения были

  1. изменить пути, чтобы они указывали на мой сертификат и ключ (и любые другие промежуточные сертификаты?) непосредственно в /etc/httpd/conf.d/ssl.conf

Это нормально, если у вас есть только один сертификат SSL для всей машины.

  1. удалите всю запись виртуального хоста по умолчанию из ssl.conf,

Это дает мне конфигурацию в SSL.conf и позволяет мне определять мои собственные записи VirtualHost для нескольких сертификатов SSL (при необходимости)

  1. поместите ssl.conf (в алфавитном порядке) после желаемого файла conf, который я назвал "vhosts.conf" (я изменил ssl.conf на "vv.conf", чтобы проверить это)

Это также работает для нескольких сертификатов SSL в моем файле vhosts.conf, но заставляет меня чувствовать себя грязным, потому что я меняю имена. Я думаю, можно было бы использовать синтаксис conf.modules.d-meet-sitesenabled из 010-vhosts.conf 020-ssl.conf и чувствовать себя немного менее грязным.

  1. поместите мой собственный сертификат и ключ в /etc/pki/tls/certs/localhost.crt и /etc/pki/tls/private/localhost.key

Эх ... может быть, для некоторых ... Хотя мне это не понравилось.

Позволяет сначала зашифровать остановленную обработку ssl.conf

Думаю, у меня обратная проблема. OP здесь хочет, чтобы файл Vhost обрабатывался вместо ssl.conf.

Мне нужно, чтобы ssl.conf обрабатывался до e.conf, как это было раньше. Я не понимаю, почему раньше ssl.conf был по умолчанию и никакие файлы в /etc/httpd/conf.d не мешали, даже если они были сначала в алфавитном порядке.

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

Изменить: я нашел лучшее решение, чем переустановка (по крайней мере, на данный момент) Позволяет сначала зашифровать остановленную обработку ssl.conf Но я думаю, что это хитрость и все еще ищу варианты получше.

РЕДАКТИРОВАТЬ: Решением моей проблемы было переименование em-le-ssl.conf файл, а не em.conf к чему-то после ssl.conf по алфавиту. Чтобы решить проблему здесь, спрашивающему придется переименовать свой файл vHost-le-ssl.conf во что-то до ssl.conf.

Хорошо ... Думаю, я исправил. О.о

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

  1. Я создал новый самозаверяющий сертификат и установил конфигурацию vhost для его использования и соответствующего ключа.
  2. Затем я изменил конфигурацию виртуального хоста на *: 443.
  3. Перезагрузил сервер apache. И ВИОЛА! Что дает?!

Ну ладно ... может быть, урок усвоен?