Как отладить сбой согласования TLS с балансировщиком нагрузки?

У меня есть приложение для Android, которое взаимодействует с внутренним сервером через HTTP-запросы POST. Я хотел бы обновить его до HTTPS. Я использую API HttpLib.postRequest.

Я обнаружил, что прямое подключение к моему серверу Apache работает нормально. Но подключение через балансировщик нагрузки не работает. Мой балансировщик нагрузки от Aliyun. Я пробовал два разных балансировщика нагрузки, оба терпят неудачу одинаково. Прямым симптомом является то, что я получаю сообщение «unknown_err» по телефону.

Я могу перехватить трафик с помощью tcpdump, что доказывает, что он подключается к нужному месту и пытается договориться. Сеанс завершается отправкой клиентом ошибки HTTPS «Сертификат неизвестен (46)».

Обычно это вызвано плохими сертификатами или конфигурацией. Но я знаю, что все мои сертификаты действительны. Другие браузеры прекрасно работают при подключении к тому же серверу для загрузки обычных веб-страниц. И iOS-версия того же приложения тоже работает нормально. Просмотр веб-сайта на телефоне Android работает нормально, даже если приложению не удается подключиться. Веб-сайт https://zaomengshe.com, поэтому вы можете проверить сертификат там. У меня также другая настройка с балансировщиком нагрузки и сертификатом от Let's Encrypt.

Я предполагаю, что есть какая-то особенность балансировщиков нагрузки Aliyun и Android, которая мешает успешному согласованию. Возможно, мне нужно включить поддержку какого-то алгоритма или размера ключа или что-то в этом роде. Я читал, что TLS 1.2 не поддерживался до версии API 20, поэтому я обновил минимальную поддерживаемую версию до 20. Это не помогло.


person Matthew Exon    schedule 28.12.2017    source источник


Ответы (1)


В отчете SSLLabs для этого домена четко сказано:

Цепочка сертификатов этого сервера неполная. Оценка ограничена до B.

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

Это означает, что это, скорее всего, причина сбоя вашего приложения. И эту проблему необходимо устранить в балансировщике нагрузки, также настроив промежуточные сертификаты.

person Steffen Ullrich    schedule 28.12.2017
comment
А, это имеет смысл, спасибо. Большое спасибо за ссылку на SSLLabs! - person Matthew Exon; 30.12.2017