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

Понять настройку ssl

Цели:

Я проверил все 3 цели, и все работает нормально.

Вопросы:

Код содержит только важные части.

NameVirtualHost *:80
NameVirtualHost *:443

<VirtualHost *:80>
  show error page
</VirtualHost>

<VirtualHost *:443>
  SSLCertificateFile san.crt
  CustomLog san-access.log 
  ProxyPass / http://my-local-url-server/
  ProxyPassReverse / http://my-local-url-server/
</VirtualHost>

<VirtualHost *:443>
  ServerName myurl1.server.com
  SSLCertificateFile myurl1.crt
  CustomLog myurl1-access.log 
  ProxyPass / http://mybackend1/
  ProxyPassReverse / http://mybackend1/
</VirtualHost>

<VirtualHost *:443>
  ServerName myurl2.server.com
  SSLCertificateFile myurl2.crt
  CustomLog myurl2-access.log 
  ProxyPass / http://mybackend2/
  ProxyPassReverse / http://mybackend2/
</VirtualHost>

Путаница здесь возникает между согласованием SSL и обработкой виртуального хоста apache. Вот что происходит:

Если пользователь подключается без поддержки SNI, Apache не может сначала узнать, какой виртуальный хост хочет пользователь, поскольку имя хоста скрыто в шифровании SSL. Таким образом, apache будет использовать первый найденный SSL-сертификат для согласования SSL. После того, как клиент принял этот сертификат и завершил согласование, Apache сможет расшифровать запрос и обработать его так же, как если бы клиент поддерживал SNI с самого начала.

Таким образом, к серверу SAN никогда не поступает никаких HTTP-запросов - есть только согласование SSL, которое использует сертификат с сервера SAN, прежде чем выяснять, какой vhost использовать для HTTP-запроса. Apache регистрирует только HTTP-запросы, но не переговоры SSL.