我有一个react前端(网站),它试图建立一个https WebSocket连接到我的java spring应用程序后端(运行在云虚拟机上)。我可以通过postman建立ws连接。但是当我使用相同的URL尝试从我的网站建立连接时,ws连接不起作用。x1c 0d1x这是我的后端配置:
import ...
@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer, WebSocketMessageBrokerConfigurer {
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/ticTacToe").setAllowedOrigins("*").withSockJS();
}
@Override
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
registry.addHandler(ticTacToeHandler(), "/ticTacToe")
.setAllowedOrigins("*");
}
@Override
public void configureMessageBroker(MessageBrokerRegistry config) {
config.enableSimpleBroker("/topic");
config.setApplicationDestinationPrefixes( "/app");
}
@Bean
public GameMessageHandler<TicTacToeGame> ticTacToeHandler() {
return new GameMessageHandler();
}
@Bean
public Class<TicTacToeGame> ticTacToeGameClass() {
return TicTacToeGame.class;
}
}
字符串
这是我的前端代码,WS被初始化:
export default function TicTacToeAPI({
nickname,
roomNumber,
setMenuState,
}: TicTacToeAPIProps) {
//websocket
const [websocket, setWebsocket] = useState(
new WebSocket("wss://150.230.148.196:8080/ticTacToe")
);
(...)
型
这个网址是https://belaschinke.com/projects/ticTacToe,如果你想自己看的话。
我不确定如何进一步调试这个问题/如何缩小来源范围。是否有选项可以更详细地查看网络流量?
我检查了网站的TLS证书(仍然有效).也刷新了证书,仍然没有变化.我尝试从多个网络连接.我也看了后端日志,但虽然 Postman 连接导致一些信息记录,当尝试从网站WS连接时,没有记录.
所以我将spring app的Logging级别设置为debug(应该在一开始就这样做),我得到了负责的错误:
springboot-app_1| 2023-12- 11 T07:44:03.706Z调试1 - [nio-8080-exec-8] o.a.t.util.net.NioEndpoint.handshake:从IP地址[23.6.34.54]和端口[61692] springboot-app_1进行客户端连接时握手失败|springboot-app_1| javax.net.ssl.SSLHandshakeException:接收到致命警报:certificate_unknown springboot-app_1| at java.base/sun.security.ssl.Alert. sslException(Alert.java:131)~[na:na] springboot-app_1| at java.base/sun.security.ssl.Alert. sslException(Alert.java:117)~[na:na] springboot-app_1| at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:358)~[na:na] springboot-app_1| at java.base/sun.security.ssl.Alert$AlertConsumer.consume(Alert.java:293)~[na:na] springboot-app_1| at java.base/sun.security.ssl.TransportContext.dispatch(TransportContext.java:204)~[na:na] springboot-app_1| at java.base/sun.security.ssl.SSLTransport.decode(SSLTransport.java:172)~[na:na] springboot-app_1| at java.base/sun.security.ssl.SSLEngineImpl.decode(SSLEngineImpl.java:736)~[na:na] springboot-app_1| at java.base/sun.security.ssl.SSLEngineImpl.readRecord(SSLEngineImpl.java:691)~[na:na] springboot-app_1| at java.base/sun.security.ssl.SSLEngineImpl.unwrap(SSLEngineImpl.java:506)~[na:na] springboot-app_1| at java.base/sun.security.ssl.SSLEngineImpl.unwrap(SSLEngineImpl.java:482)~[na:na] springboot-app_1| at java.base/javax.net.ssl.SSLEngine.unwrap(SSLEngine.java:679)~[na:na] springboot-app_1| at org.apache.tomcat.util.net.SecureNioChannel.handshakeUnwrap(SecureNioChannel. java:483)~[tomcat-embed-core-10.1.15.jar!/:na] springboot-app_1| at org.apache.tomcat.util.net.SecureNioChannel.handshake(SecureNioChannel el.java:213)~[tomcat-embed-core-10.1.15.jar!/:na] springboot-app_1| at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1719)~[tomcat-embed-core-10.1.15.jar!/:na] springboot-app_1|在org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)~[tomcat-embed-core-10.1.15.jar!/:na] springboot-app_1| at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)~[tomcat-embed-core-10.1.15.jar!/:na] springboot-app_1| at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)~[tomcat-embed-core-10.1.15.jar!/:na] springboot-app_1| at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)~[tomcat-embed-core-10.1.15.jar!/:na] springboot-app_1| at java.base/java.lang.Thread.run(Thread.java:833)~[na:na] springboot-app_1| springboot-app_1| 2023-12- 11 T07:44:03.709Z DEBUG 1 - [nio-8080-exec-8] o.apache.coyote.http11.Http11处理器:Socket:[org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper@39a4e37d:org.apache.tomcat.util.net.SecureNioWebel@6809af8c:java.nio.channels.SocketChannel[connected local=/172.18.0.3:8080 remote=/23.6.34.54:61692]],输入状态:[CLOSED],输出状态:[CLOSED]
我仍然不知道为什么它会失败,因为我的网站说要有一个有效的tls证书:
1条答案
按热度按时间ldxq2e6h1#
原来我仍然在我的后端应用程序上使用自签名证书,Postman接受了该证书,但Chrome拒绝了该证书。