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

SSL на некоторых виртуальных хостах жалуется на неправильное доменное имя

Итак, я недавно столкнулся с этой проблемой и хочу описать проблему и решение здесь:

У меня есть несколько виртуальных хостов на сервере 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" (из Ssl.conf), инструкция NameVirtualHost для SSL еще не загружена, и поэтому сертификат SSL по умолчанию является доменом по умолчанию для этого виртуального хоста.

Решение состоит в том, чтобы вместо этого включить инструкцию NameVirtualHost для SSL в httpd.conf, чтобы убедиться, что она доступна для всех виртуальных хостов в /etc/httpd/conf.d папка. Однако его необходимо удалить из ssl.conf, поскольку он не должен существовать дважды.