Проблемы с сертификатом проверки имени хоста Play Framework WS - PullRequest
0 голосов
/ 01 октября 2018

Я использую Play Framework 2.3.8 и у меня возникают проблемы с выполнением HTTPS-запросов к определенным хостам.В этом случае я не могу подключиться к хосту API Zendesk (xxxxx.zendesk.com) с помощью WS client .

. Первоначально получена ошибка:

Невозможно вызвать действие, в итоге возникла ошибка: java.net.ConnectException: исключение HostnameVerifier.

Это странно, потому что сертификат выглядит как файл, если я просматриваю его в браузере или через ssl s_client .Запись CN соответствует домену.

Если I отключить проверку имени хоста , я получаю сообщение об ошибке из Cloudflare с сообщением «Запрещено».Это в HTML, а не в JSON, что не соответствует ожиданиям.

Затем я попытался отправить тот же запрос с помощью Почтальон и curl .Запрос был выполнен успешно, и я получил ответ обратно в JSON.

Затем я использовал Charles Web Debugging Proxy для перехвата HTTPS-запросов из Play Framework и сравнения его с запросами, отправленными из Postman.Как ни странно, запросы выполнялись успешно, если Чарльз перехватывал запросы!Чарльз не пролил свет на проблему с сертификатом.

Я видел, как другие люди жаловались на подобные проблемы с Cloudflare, и в их случае оказалось, что их клиент не поддерживает TLS 1.2.Я проверил и запустил версию 1.8 JVM, которая поддерживает TLS 1.2 по умолчанию, и даже попытался принудительно использовать TLS 1.2 с помощью переменной конфигурации на всякий случай, и это не помогло.

Я полагаю, что есть некоторая проблема сSSL в используемой версии Play Framework.

1 Ответ

0 голосов
/ 01 октября 2018

Наконец, я попытался Wireshark в качестве крайней меры, чтобы попытаться определить различия между запросами, отправленными от других моих клиентов (curl / Postman) и от клиента Play Framework WS.

Iзаметил, что работающие клиенты отправили доменное имя как часть рукопожатия.Затем он щелкнул мышью, что это может быть проблема SNI.

Конечно, Play Framework 2.3.x не поддерживает SNI .

. Использовались только два реальных варианта.отдельный HTTP-клиент, такой как play-ws или для обновления моей версии Play Framework до 2.4.x.

Я выбрал последнее, и теперь оно работает.

Проблема проверки имени хоста была на самом деле красной сельдью и связана с отсутствием поддержки SNI.Я смог включить его без проблем.

Надеюсь, это поможет кому-то с такой же проблемой!

...