Итак, я недавно столкнулся с этой проблемой и хочу описать проблему и решение здесь:
У меня есть несколько виртуальных хостов на сервере httpd, и я начал устанавливать на них SSL-сертификаты letsencrypt с помощью инструмента certbot-auto.
] Изначально это работало нормально, пока некоторые домены не выдавали в браузере ошибки о том, что сертификат принадлежит другому домену и не является безопасным. Настройка SSL для домена была идентична настройкам других работающих SSL. Все они находятся на одном IP-адресе, конфигурация была создана инструментом certbot-auto. Домен, показанный в браузере как неправильный домен, на который указывает сертификат ssl, был одним из других доменов в системе.
Эта проблема может возникнуть на CentOS (и, вероятно, на других дистрибутивах) из-за того, как SSL-конфигурация настраивается "из коробки".
Настройка конфигурации, которая создает проблемы здесь, это инструкция
NameVirtualHost *:443
.
Для неssl инструкция NameVirtualHost *:80
хранится в /etc/httpd/httpd.conf
и загружается первой. При загрузке остальных конфигураций виртуального хоста в /etc/httpd/conf.d/*.conf
эта инструкция уже применяется. Поэтому нет необходимости снова включать ее в инструкции виртуальных хостов.
Однако, для 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, так как не должен существовать дважды.