【问题标题】:Troubleshooting connectivity over https通过 https 进行连接故障排除
【发布时间】:2014-08-13 18:45:18
【问题描述】:

我一直在努力解决我认为是网络问题的问题,但没有取得太大进展。我想看看是否有人对解决方案或可能的步骤有一些想法,可以为我提供更多信息以达成解决方案。

环境 我有一个移动 Web 应用程序(angular.js),它在连接到弹簧引导后端(非集群单实例开发盒)的条形码扫描枪(intermec ck71)上的 html 5 浏览器(专有浏览器)上运行。我编写了移动 web 应用程序,但已经承担了 spring boot 后端的所有权(第一次使用 springboot)。我在一个公司办公室,我不拥有网络,所以我不完全了解事物的布局。

问题 我无法让移动网络应用程序通过 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

但我仍然没有看到任何关于主动告诉 conncetion 关闭的信息。我的下一个想法是该盒子可能将 IP 范围列入白名单/黑名单,但根据维护服务器的团队,没有 IP 规则、防火墙或任何会干扰盒子上网络流量的东西。

所以我把这个带到网络团队来展示流量,他们告诉我这不是网络问题,因为初始流量正在通过,真正的问题是 FIN 数据包。我把这些信息交给了服务器团队,他们告诉我,他们在盒子上没有任何东西会导致发送 FIN 数据包,这很可能是网络问题。我认为这很可能是服务器问题,因为这是我可以访问的内容,其他所有人都认为该部分运行正常。我决定创建一个新的 SSL 证书,因为我在连接时在桌面浏览器上收到了不受信任的消息。我创建了这个新证书,然后将其添加到移动扫描枪上的受信任根目录中。我试图在枪上再次连接,但没有效果。

接下来,我联系了移动枪供应商,看看是否有任何关于枪的信息可供我进行故障排除。在与他们进行了一些故障排除后,他们说他们无法在他们这边重现,因为它在我这边工作,除了在那个网络上连接,这可能是一个网络问题。

我回到服务器并在 tomcat 阀门上添加了日志记录,以查看是否可以获取任何其他信息。当我查看阀门生成的日志时,我会获得任何成功连接的条目,但是当我无法连接时,什么都没有显示。我的连接器看起来像这样只是为了完整性。

连接器代码: <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 &quot;%r&quot; %s %b %{xxx}i" />

结论 所以基本上我可以让应用程序加载到除了这个网络之外的任何地方,这让我相信它与网络相关。然而,网络团队表示它与网络无关,因为正在传输初始数据包,并且问题在于服务器发送的 FIN 数据包。我已经用尽了我对环境的了解......毕竟我是一名移动开发人员:) 我仍然觉得它与网络相关,但没有任何东西可以说明为什么要发送 FIN 数据包。关于要检查的事情或可能导致问题的任何想法?

【问题讨论】:

    标签: spring tomcat networking ssl spring-boot


    【解决方案1】:

    如果您可以使用浏览器或 curl(例如)连接,那么我怀疑问题出在客户端。您说您必须忽略浏览器中的证书违规行为,这是一种气味,然后您说您“创建了一个新的 SSL 证书”。由于凡人实际上不可能创建受信任的证书,这意味着您安装了自签名或其他不完整的证书,我会冒险猜测客户端将不允许通过与不受信任的证书的连接进行访问(为了好原因)?

    【讨论】:

    • 是的,我也有同样的想法。让我相信这不是问题的原因是我使用的是在本地实例上以相同方式创建的自签名证书。并且移动扫描枪能够加载该 webapp 的实例。有什么额外的想法吗?我非常感谢您的快速响应。
    • 另外我忘了补充说 Fin 是由服务器而不是客户端发送的。如果客户端出于安全原因拒绝通信,客户端不会发送 FIN 数据包吗?
    【解决方案2】:

    结果证明这与 redhat/java 错误有关。当扫描枪接触到具有正确版本组合以导致错误的服务器实例时,服务器抛出由有问题的库引起的 SSL 异常。由于日志记录的配置方式,我没有看到这些异常。

    这是一个指向该错误的链接,供可能在我之后阅读此内容的人使用。

    https://bugzilla.redhat.com/show_bug.cgi?id=1022017

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-03
      • 2012-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多