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

Apache представляет неправильный сертификат при доступе через балансировщик нагрузки

У меня есть сервер, на котором настроены два сертификата SSL, один для внутреннего доступа, где к нему обращаются по строкам host.my-local.net и другие для внешнего доступа, где он доступен аналогично 185.185.185.185 (это не фактический IP-адрес, но это IP-адрес, поскольку ему не присвоено имя хоста). При доступе через внешний адрес соединение проходит через балансировщик нагрузки / брандмауэр, к которому у меня нет доступа, все, что я знаю, это то, что он переводит входящие соединения на определенном порту во внутренний адрес на порту SSL.

Проблема в том, что при внешнем подключении я получаю предупреждение браузера о том, что сайт маскируется под host.my-local.net; он представляет сертификат на host.my-local.net вместо того 185.185.185.185. У меня есть виртуальный хост, настроенный для обоих имен в моем конфигурационном файле apache2, поэтому я предполагаю, что по какой-то причине у сервера возникли проблемы с различением внешнего соединения и соединения LAN. У меня не было этой проблемы с простым NAT, поэтому я не знаю, почему это будет иметь значение, если балансировщик нагрузки делает запрос так, как будто он поступает из локальной сети, а не изнутри.

Я убедился, что используемый мной браузер поддерживает SNI (Google Chrome), а Apache 2.4, по-видимому, поддерживает его из коробки, не требуя директивы NameVirtualHost. Однако в документации говорится:

In 2.3.11 and later, any time an IP address and port combination is used in 
multiple virtual hosts, name-based virtual hosting is automatically enabled 
for that address.

Однако это не тот же IP-адрес, который используется на двух разных виртуальных хостах: один - это внутренний (LAN) IP-адрес, а другой - внешний (видимый всем) IP-адрес, применимо ли это здесь?

Чтобы прояснить мою конфигурацию, у меня настроены два виртуальных хоста, например:

<VirtualHost 185.185.185.185:443>
# here i specify the certificate for 185.185.185.185, e.g.
SSLCertificateFile /etc/ssl/private/185.185.185.185.crt
</VirtualHost>
<VirtualHost host.my-local.net:443>
# here i specify the certificate for host.my-local.net, e.g.
SSLCertificateFile /etc/ssl/private/host.my-local.net.crt
</VirtualHost>

Благодаря комментарию @ShaneMadden я смог понять это.

Эта проблема заключается в том, что мне нужно, чтобы оба VirtualHosts указывали один и тот же IP-адрес с использованием подстановочного знака. Итак, моя конфигурация должна выглядеть так:

<VirtualHost *:443>
# here i specify the certificate for 185.185.185.185, e.g.
SSLCertificateFile /etc/ssl/private/185.185.185.185.crt
ServerName 185.185.185.185
</VirtualHost>
<VirtualHost *:443>
# here i specify the certificate for host.my-local.net, e.g.
SSLCertificateFile /etc/ssl/private/host.my-local.net.crt
ServerName host.my-local.net
</VirtualHost>