У меня есть приложение для 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. Это не помогло.