у нас есть приложение c ++ с boost1.62 и libssl1.0, которое открывает TLS-соединение с веб-сервером lighttpd (удаленно).
Это прекрасно работает на любом устройстве, которое мы уже развернули. Сейчас мы пытаемся использовать это приложение внутри контейнера. Приложение запускается, и все в порядке, но.
Когда соединение по какой-либо причине сбрасывается, приложение пытается восстановить соединение, установив новое TCP-соединение с сокетом.
Создание HTTPS-соединения с TLS через этот сокет завершается неудачно с EOF. Затем приложение пытается восстановить соединение и получает ту же ошибку -> бесконечный цикл повторного подключения.
Я записал трафик и увидел следующее:
- Все в порядке
- TLS-Alert записывается, иногда также сбрасывается TCP.
- Клиент отправляет SYN
- Сервер отправляет SYN ACK
- Клиент отправляет ACK
- Клиент отправляетFIN, ACK
- Сервер отправляет ACK
- Сервер отправляет FIN, ACK
- Клиент отправляет ACK
Шаги с 3 по 7 выполняются менее чем за 3Миз. как только шаг 7 пройден, устанавливается новое соединение, начиная с шага 3.
Я использую Ubuntu 18.04 на хосте и в качестве базового образа. (Оба x64) И хост, и контейнер используют одни и те же библиотеки. Поэтому я думаю, что это не проблема с используемыми библиотеками.
Приложение работает более года на нескольких устройствах arm32v7 и x64. Эта ошибка никогда не возникала.
Как ни странно, если приложение настроено на использование простого HTTP вместо HTTPS, ошибка не возникает.
Есть предложения, что это может быть? Основываясь на моих знаниях, я могу исключить следующее:
- неверные зависимости
- неверно настроенное ядро (контейнер и хост используют одно и то же)
Спасибо за вашепомощь