Перейти к содержимому
ecdsa.com
Java (JSSE)Java

Сообщение об ошибке

javax.net.ssl.SSLHandshakeException: (unrecognized_name) Received fatal alert: unrecognized_name

Также выводится как

  • Received fatal alert: unrecognized_name

JDK 25 сообщает «(unrecognized_name) Received fatal alert: unrecognized_name». Java 7 и ранние выпуски Java 8 прерывали подключение, даже если сервер отправлял это оповещение лишь как предупреждение. Классический пример — конфигурации Apache httpd без подходящего ServerName.

Java (JSSE) — TLS alert 112 from a server that does not serve the requested SNI name

Что это означает

JVM передала имя хоста из URL в расширении SNI, а сервер ответил критическим оповещением TLS 112 (unrecognized_name), потому что для этого имени на нём не настроен ни один сайт. Java считает это оповещение критическим и прекращает подключение. Сервер доступен, просто он не распознаёт имя, которое вы использовали.

Почему это происходит

Как исправить

  1. 1.

    Выясните, какие имена принимает сервер

    Попробуйте выполнить рукопожатие с возможными именами через openssl s_client -servername.

    bash
    # Which SNI names does the server accept?
    for n in api.example.com www.example.com; do
      printf '%-18s ' "$n"
      echo | openssl s_client -connect api.example.com:443 -servername "$n" -brief 2>&1 | grep -m1 -E 'Protocol version|alert' || echo fail
    done
  2. 2.

    Добавьте имя на сервер

    Настройте ServerName или ServerAlias (или аналогичную настройку в nginx, CDN или на платформе) вместе с сертификатом, который покрывает это имя.

    text
    # Apache httpd: every name clients use must be a ServerName or ServerAlias of a TLS vhost
    <VirtualHost *:443>
        ServerName  api.example.com
        ServerAlias api-legacy.example.com
        SSLEngine on
    </VirtualHost>
  3. 3.

    Подключайтесь по имени хоста, настроенному на сервере

    Лучше исправить URL, чем глобально отключать SNI.

    text
    Use the server's configured host name in the URL. Turning SNI off with
    -Djsse.enableSNIExtension=false only works if the server's default site is the one you need,
    and it breaks every server that relies on SNI; avoid it.

Связанные ошибки

Открыть всю базу ошибок подписей