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, поэтому я предполагаю, что по какой-то причине у сервера возникли проблемы с разграничением между внешним подключением и подключением по локальной сети. У меня не было этой проблемы с простым 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>

1 ответ

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

Эта проблема заключается в том, что мне нужно, чтобы оба виртуальных хоста указывали один и тот же 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>
Другие вопросы по тегам