#spring #tomcat #networking #ssl #spring-boot
#spring #tomcat #создание сетей #ssl #spring-загрузка
Вопрос:
Я боролся с тем, что, по моему мнению, является проблемой с сетью, и не добился большого прогресса. Я хотел посмотреть, есть ли у кого-нибудь идеи по решению или возможные шаги, которые могли бы предоставить мне больше информации для поиска решения.
Среда У меня есть мобильное веб-приложение (angular.js ), который работает в браузере html 5 (проприетарный браузер) на устройстве сканирования штрих-кодов (intermec ck71), подключающемся к серверной части spring boot (некластеризованный модуль разработки одного экземпляра). Я написал мобильное веб-приложение, но стал владельцем серверной части spring boot (впервые работаю с springboot). Я нахожусь в корпоративном офисе, где я не владею сетями, поэтому у меня нет полного понимания того, как все устроено.
Проблема Я не могу подключить мобильное веб-приложение к нашему блоку разработки в office wireless с помощью https
Уже предпринятые шаги Недавно мы переключили нашу команду разработчиков на https, теперь, когда разработка завершена. До https мобильное приложение загружалось правильно, но теперь просто показывает вращающееся колесо в мобильном браузере, а затем истекает примерно через минуту.
Первым шагом, который я сделал, было загрузить сервер, работающий по протоколу https локально, и проверить, смогу ли я подключить сканер (что он и сделал).
Затем я попробовал на своем настольном компьютере загрузить мобильное веб-приложение из окна разработчика (что также сработало).
Похоже, что проблема изолирована от мобильного устройства в беспроводной сети в офисе с помощью https. Я попросил сетевую команду убедиться, что порты 443 и 8443 открыты (которые, как они видели, были заблокированы и открыты для меня).
Я повторил подключение и все еще безуспешно. Я запустил tcpdump на сервере и вижу следующие журналы неудачных вызовов
Из этого журнала видно, что сервер (172.18.222.121) закрывает соединение, отправив пакет 12 (FIN, ACK)
Я добавил некоторые записи в экземпляр сервера tomcat и увидел следующее
[pid 22505] accept(41, {sa_family=AF_INET, sin_port=htons(1037), sin_addr=inet_addr("172.31.12.157")}, [16]) = 46
[pid 22505] setsockopt(46, SOL_SOCKET, SO_LINGER, {onoff=0, linger=0}, 8) = 0
[pid 22505] setsockopt(46, SOL_TCP, TCP_NODELAY, [1], 4) = 0
но я по-прежнему ничего не вижу в том, чтобы активно сообщать о закрытии соединения. Моя следующая мысль заключалась в том, что в поле могут быть диапазоны ip, занесенные в белый / черный список, но, согласно команде, которая обслуживает сервер, нет правил ip, брандмауэров или чего-либо, что могло бы помешать сетевому трафику на поле.
Итак, я передал это сетевой команде, чтобы показать этот трафик, и они сообщили мне, что это не проблема с сетью, потому что первоначальный трафик проходит и что настоящая проблема — это пакет FIN. Я передал эту информацию команде сервера, которая сообщила мне, что у них на коробке нет ничего, что могло бы привести к отправке пакета FIN, и что, скорее всего, это была проблема с сетью. Я решил, что это вполне может быть проблема с сервером, поскольку это то, к чему у меня есть доступ, и все остальные считают, что эта часть функционирует должным образом. Я решил создать новый SSL-сертификат, так как при подключении я получаю ненадежное сообщение в браузере рабочего стола. Я создал этот новый сертификат, а затем добавил его в доверенный корневой каталог мобильного сканера. Я попытался снова подключиться к пистолету, но безрезультатно.
Затем я обратился к поставщику мобильного пистолета, чтобы узнать, есть ли у меня какая-либо информация о пистолете для устранения неполадок. После некоторого устранения неполадок с ними они сказали, что не могут воспроизвести на своей стороне, и это потому, что это работает на моей стороне, за исключением подключения к этой одной сети, что, вероятно, проблема с сетью.
Я вернулся на сервер и добавил ведение журнала на клапане tomcat, чтобы посмотреть, смогу ли я получить какую-либо дополнительную информацию. Когда я просматриваю журналы, которые создает valve, я получаю записи для любого успешного подключения, но когда я не могу подключиться, ничего не отображается. Мой соединитель выглядит так просто для полноты картины.
Код соединителя: <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
keystoreType="PKCS12"
keystoreFile="/home/devadmin/.ssh/keystore.p12"
keystorePass="password" />
И клапан: <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log." suffix=".txt"
pattern="%a %H %p %U %h %l %u %t amp;quot;%ramp;quot; %s %b %{xxx}i" />
Заключение Итак, в принципе, я могу заставить приложение загружаться везде, кроме этой одной сети, что наводит меня на мысль, что оно связано с сетью. Тем не менее, сетевая команда говорит, что это не может быть связано с сетью, поскольку передаются начальные пакеты, и что проблема связана с пакетом FIN, отправляемым сервером. Я исчерпал все, что знаю о средах… В конце концов, я мобильный разработчик 🙂 Я все еще чувствую, что это связано с сетью, но у меня нет ничего, что могло бы показать, почему отправляется пакет FIN. Есть какие-нибудь идеи о том, что нужно проверить или что может быть причиной проблемы?
Ответ №1:
Если вы можете подключиться к своему браузеру или curl (например), я подозреваю, что проблема в клиенте. Вы сказали, что вам нужно игнорировать нарушения сертификатов в браузере, так что это запах, а затем вы сказали, что «создаете новый сертификат SSL». Поскольку смертные на самом деле не могут создать доверенный сертификат, это означает, что вы установили самозаверяющий или иным образом неполный сертификат, и я бы рискнул предположить, что клиент не разрешит доступ по соединению с ненадежным сертификатом (по уважительным причинам)?
Комментарии:
1. Да, у меня была та же мысль. Что заставляет меня думать, что это не проблема, так это то, что я использую самозаверяющий сертификат, созданный таким же образом в моем локальном экземпляре. И Mobile scanner gun может загружать этот экземпляр веб-приложения. Есть какие-нибудь дополнительные соображения? Я действительно ценю быстрый ответ.
2. Кроме того, я забыл добавить, что Fin отправляется сервером, а не клиентом. Если клиент отклонил сообщение по соображениям безопасности, не будет ли клиент отправлять пакет FIN?
Ответ №2:
Оказалось, что это связано с ошибкой redhat / java. Когда сканер gun обратился к этому экземпляру сервера, у которого были правильные комбинации версий, чтобы вызвать ошибку, сервер выдавал исключение SSL, вызванное библиотекой, в которой возникла проблема. Я не видел этих исключений из-за способа настройки ведения журнала.
Вот ссылка на ошибку для людей, которые могут читать это после меня.