Я пытаюсь достичь того, что несколько лет назад было проблемой из-за пропуска настроенных серверов, что вызвало
"оповещение о рукопожатии: unrecognized_name"
когда клиент с поддержкой SNI (для клиентов Java 1.7 или выше) отправляет во время рукопожатия
Расширение server_name, server_name: [type = host_name (0), value = hostname]
например, этот вопрос заключался в том, как этого избежать:
Моя версия apache - 2.4.33 на Ubuntu 16.04. а файл конфигурации, который я использую, выглядит так:
<IfModule ssl_module>
Listen 8095
</IfModule>
<IfModule mod_gnutls.c>
Listen 8095
</IfModule>
ServerName localhost
<IfModule mod_ssl.c>
<VirtualHost _default_:8095>
ServerName value.that.does.not.match.the.cn.in.certificate
ServerAlias value.that.does.not.match.the.cn.in.certificate
DocumentRoot /var/www/html
SSLEngine on
SSLCertificateFile /path_to_certificates/selfsigned.cert
SSLCertificateKeyFile /path_to_certificates/selfsigned.key
SSLVerifyClient none
SSLVerifyDepth 10
</VirtualHost>
</IfModule>
Я провел небольшое исследование и использовал следующую команду, чтобы проверить, включен ли SNI для имени хоста, которое я предоставляю через apache:
openssl s_client -servername hostanametocheck -tlsextdebug -connect hostanametocheck:8095 2>/dev/null | grep "server name"
для чего результат:
TLS server extension "server name" (id=0), len=0
который из того, что я прочитал, является индикатором того, что apache отправляет это расширение во время рукопожатия, что в случае клиентов Java> 1.7 будет в конечном итоге как исключение во время рукопожатия.
Я ожидал, что мой Java-клиент (1.8) получит это предупреждение и рукопожатие не будет выполнено, но когда я здесь приземлился, этого не произошло. Я уже потратил довольно много времени, пытаясь понять это, но похоже, что это выходит за рамки моих знаний о сетях и Linux.
Кстати, я запускаю apache на своей машине dev, поэтому порт 8095 вместо 443. Я сопоставил имя хоста с localhost. SNI включен на стороне клиента, как я вижу в журналах рукопожатий, что расширение отправлено
Extension server_name, server_name: [type=host_name (0), value=hostname.that.does.not.match.cn.in.certificate.com]
Ваша помощь будет очень признательна!
Я успешно вызвал ошибку с Apache 2.2.22 (но с какой-то старой версией, не исправленной), поскольку похоже, что они начали удалять это предупреждение из отправки, начиная с 2.4.1 и некоторых версий назад. Подробнее по следующей ссылке.