我在一个WebRTC信令应用程序中使用了WebRTC。它工作得很好,每个测试人员都可以在浏览器中使用它。但我发现了一个案例,一个人无法通过websockets连接到我的服务。这个人使用的是TP-链接M7350,这是一个迷你Wifi路由器,里面有SIM卡(沃达丰)。我在我的应用程序中进行了研究和调试,并尝试了几种方法来捕捉错误。但我发现,这与我的应用程序或websockets无关,它似乎与TomCat / Spring本身有关。通过这个简单的spring引导web应用程序,我能够重现这个问题:
https://github.com/mxk1011/springboot-mini-demo
这是一个非常简单的web应用程序,在一个控制器中访问/test时输出“我活着”。
我在一个与我的应用程序无关的新服务器上克隆了这个应用程序,用ufw打开端口443,然后用mvn -U clean spring-boot:run启动它。在我测试的所有不同的网络中,当我在服务器上访问/test时,我能够看到“我还活着”,我使用了不同的WiFis和移动电话的热点。但是,当我用沃达丰SIM切换到这个TP-Link路由器的WiFI时,我得到的是:
ERR_CONNECTION_TIMED_OUT在我的Chrome和所有其他浏览器中。
我把路由器中的SIM卡换成了Telekom SIM卡,然后重新启动。我能够访问页面,看到“我还活着”。把沃达丰卡放进我的手机,我无法打开页面,也有一个超时。当我用沃达丰卡连接到路由器时,我打开了我电脑上的任何VPN,我就能够正确地访问它。
因此,由于某些原因,这一单一的沃达丰SIM卡导致我无法连接到这个迷你网络服务器与上面的Github链接。
为了更好地调试,我将日志级别更改为跟踪。下面是当您能够连接到页面时所发生的事情:
https://github.com/mxk1011/springboot-mini-demo/blob/master/works.log
当我将沃达丰SIM卡连接到服务器时,就会发生这种情况:
https://github.com/mxk1011/springboot-mini-demo/blob/master/fails.log
在我的生产应用程序中,我使用了“让我们加密”的证书,在本例中,我在商店中使用了一个自签名密钥(参见github,它是我用来测试的)。在演示服务器上使用“让我们加密证书”不会改变我也尝试过的任何事情。
我不知道为什么会失败。我从这个路由器+ SIM卡上得到的人每天都在用它工作,一点问题也没有。我还能够将文件推送到GitHub,并用它打开这个StackOverflow线程。基本上,这个演示应用程序+我自己的是我发现的唯一不能正确使用它的页面。周一,我将去一家零售店,再买一张沃达丰SIM卡,看看这是否是沃达丰的一个普通问题,还是这个SIM的任何特定问题--我不得不说,我不是这方面的专家。因此,我在这里打开这个线程,希望有人知道我如何解决这个问题,因为当这个问题发生在一个设备/路由器上时,它可能发生在很多设备/路由器上,我需要我的服务为所有客户服务。谢谢大家的提前,我希望提供的这些信息能有所帮助。
编辑我知道很可能,设备之间的某些东西,从沃达丰到应用程序都阻止了请求,没有什么可怪Spring /引导的。但是,正如您在日志中所看到的,来自路由器的IP入口有一个不可阻挡的请求。如果您可能没有解决我的问题的解决方案,那么您可能有一个想法,可以通过在服务器/客户端上使用任何工具/脚本来了解更多的信息吗?我对任何想法都是开放的。谢谢!
编辑2以证明中间没有阻塞,我在同一台机器上设置了一个带有https的简单nginx服务器,并在端口443打开它。通过路由器+沃达丰SIM,我能够通过https连接到它。因此,对我来说,失败的关键似乎是Spring / Java部分。
编辑3 --我现在试着通过curl -vvv访问服务器,以便通过这个命令获得更多信息。我用它访问了服务器,但得到了以下响应:
*   Trying 1.2.3.x...
* TCP_NODELAY set
* Connected to xxx.com (1.2.3.x) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
*   CAfile: /etc/ssl/cert.pem
  CApath: none
* TLSv1.2 (OUT), TLS handshake, Client hello (1):
* TLSv1.2 (IN), TLS handshake, Server hello (2):
* TLSv1.2 (IN), TLS handshake, Certificate (11):
* TLSv1.2 (OUT), TLS alert, unknown CA (560):
* SSL certificate problem: self signed certificate
* Closing connection 0
curl: (60) SSL certificate problem: self signed certificate
More details here: https://curl.haxx.se/docs/sslcerts.html
curl failed to verify the legitimacy of the server and therefore could not
establish a secure connection to it. To learn more about this situation and
how to fix it, please visit the web page mentioned above.很公平,我需要一份证书。我添加了一个脚本来获得一个加密证书,并将其转换为上面的pkcs12。生成它之后,我将它复制到类路径中,然后重新启动。我再次做了curl -vvv myhost.com,并且我能够毫无问题地访问:
*   Trying x.x.x.x...
* TCP_NODELAY set
* Connected to myhost.com (x.x.x.x) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
*   CAfile: /etc/ssl/cert.pem
  CApath: none
* TLSv1.2 (OUT), TLS handshake, Client hello (1):
* TLSv1.2 (IN), TLS handshake, Server hello (2):
* TLSv1.2 (IN), TLS handshake, Certificate (11):
* TLSv1.2 (IN), TLS handshake, Server key exchange (12):
* TLSv1.2 (IN), TLS handshake, Server finished (14):
* TLSv1.2 (OUT), TLS handshake, Client key exchange (16):
* TLSv1.2 (OUT), TLS change cipher, Change cipher spec (1):
* TLSv1.2 (OUT), TLS handshake, Finished (20):
* TLSv1.2 (IN), TLS change cipher, Change cipher spec (1):
* TLSv1.2 (IN), TLS handshake, Finished (20):
* SSL connection using TLSv1.2 / ECDHE-RSA-AES256-GCM-SHA384
* ALPN, server did not agree to a protocol
* Server certificate:
*  subject: CN=myhost.com
*  start date: Jun 21 10:08:36 2020 GMT
*  expire date: Sep 19 10:08:36 2020 GMT
*  subjectAltName: host "myhost.com" matched cert's "myhost.com"
*  issuer: C=US; O=Let's Encrypt; CN=Let's Encrypt Authority X3
*  SSL certificate verify ok.
> GET /test HTTP/1.1
> Host: myhost.com
> User-Agent: curl/7.64.1
> Accept: */*
> 
< HTTP/1.1 200 
< Vary: Origin
< Vary: Access-Control-Request-Method
< Vary: Access-Control-Request-Headers
< Content-Type: text/plain;charset=UTF-8
< Content-Length: 11
< Date: Sun, 21 Jun 2020 11:11:27 GMT
< 
* Connection #0 to host myhost.com left intact
I am alive!* Closing connection 0当在任何浏览器中打开相同的URL时,此SIM卡都会失败。其他所有的网络,没问题。
发布于 2020-06-23 15:37:13
经过长时间的调试,我终于找到了一个解决方案。显然,由于某种原因,沃达丰网络阻塞了与使用SSL运行我的应用程序的服务器的连接。通过向应用程序属性添加以下内容,它最终可以通过请求:
server.ssl.ciphers=ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384
server.http2.enabled=true我希望这能帮助其他面临类似问题的人。
https://stackoverflow.com/questions/62492639
复制相似问题