Итак, я недавно столкнулся с этой проблемой и хочу описать проблему и решение здесь:
У меня есть несколько виртуальных хостов на сервере httpd, и я начал устанавливать на него SSL-сертификаты letsencrypt с помощью инструмента certbot-auto.
Первоначально это работало нормально, пока некоторые домены не выдавали в браузере ошибки о том, что сертификат принадлежит другому домену и не является безопасным. Настройка SSL для домена была идентична настройкам других работающих SSL. Все они находятся на одном IP-адресе, конфигурация была создана инструментом certbot-auto. Домен, показанный в браузере как неправильный домен, на который указывает сертификат ssl, был одним из других доменов в системе.
Эта проблема может возникнуть в CentOS (и, вероятно, в других дистрибутивах) из-за того, как конфигурация SSL настраивается «из коробки».
Параметр конфигурации, который здесь создает проблемы, - это
NameVirtualHost *:443
инструкция.
Для non-ssl инструкция NameVirtualHost *:80
хранится в /etc/httpd/httpd.conf
и загружается первым. Когда другой виртуальный хост конфигурируется в /etc/httpd/conf.d/*.conf
загружены, эта инструкция уже применяется. Поэтому нет необходимости снова включать его в инструкции virtualhosts.
Однако для SSL инструкция NameVirtualHost хранится в /etc/httpd/conf.d/ssl.conf
. Это означает, что он загружается в ряд с другими конфигурациями виртуального хоста в той же папке. Если теперь у вас есть файл конфигурации, который начинается с буквы над "s" (из S
sl.conf), инструкция NameVirtualHost для SSL еще не загружена, и поэтому сертификат SSL по умолчанию является доменом по умолчанию для этого виртуального хоста.
Решение состоит в том, чтобы вместо этого включить инструкцию NameVirtualHost для SSL в httpd.conf, чтобы убедиться, что она доступна для всех виртуальных хостов в /etc/httpd/conf.d
папка. Однако его необходимо удалить из ssl.conf, поскольку он не должен существовать дважды.