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>