Spring Boot+原生JS配置WebSocket遇ERR_CERT_AUTHORITY_INVALID错误求助
问题解决指南
核心原因
错误net::ERR_CERT_AUTHORITY_INVALID本质是浏览器不认可当前使用的SSL证书(自签名证书默认不在浏览器信任列表内),另外你的后端配置了SockJS但前端用原生WebSocket连接,也可能导致协议兼容问题。
具体解决方案
1. 手动信任自签名证书
浏览器会拦截未被信任的SSL证书,先通过HTTPS访问一次服务地址完成信任:
- 打开浏览器访问
https://localhost:8443,此时会提示“不安全”,选择“高级”→“继续前往localhost”(不同浏览器操作略有差异),将该证书添加到浏览器信任列表。 - 完成后再刷新你的Group Call页面,WSS连接即可正常建立。
2. 修正SockJS与前端连接的匹配问题
你的后端WebSocket配置启用了SockJS(withSockJS()),但前端用原生WebSocket对象连接,这会导致协议不兼容。请改用SockJS客户端库连接:
- 先在前端页面引入SockJS脚本:
<script src="https://cdn.jsdelivr.net/npm/sockjs-client@1/dist/sockjs.min.js"></script> - 替换原WebSocket初始化代码:
var socket = new SockJS('https://localhost:8443/gg'); // 后续业务逻辑保持不变(如监听open/close/message事件)
3. 正确切换到WS(非加密)协议
若想使用未加密的WS协议,需确保后端关闭SSL配置:
- 修改
application.properties:# 注释或删除SSL相关配置 # server.ssl.key-store=classpath:keystore.jks # server.ssl.key-store-password=123 # server.ssl.key-password=123 # 改用非SSL端口 server.port=8080 - 前端连接代码改为:
var ws = new WebSocket('ws://localhost:8080/gg');
4. 生成符合规范的自签名证书
如果需要长期使用自签名证书,可重新生成包含正确信息的证书(确保CN与访问域名/IP一致):
- 使用keytool命令生成:
keytool -genkeypair -alias tomcat -keyalg RSA -keysize 2048 -storetype PKCS12 -keystore keystore.p12 -validity 3650 -ext SAN=DNS:localhost,IP:127.0.0.1 - 修改
application.properties对应配置为PKCS12格式:server.ssl.key-store=classpath:keystore.p12 server.ssl.key-store-password=你的密码 server.ssl.key-store-type=PKCS12 server.ssl.key-alias=tomcat - 导出证书并导入浏览器信任存储,彻底解决证书信任问题。
内容的提问来源于stack exchange,提问作者Валерий Альбертович
相关产品推荐
相关产品推荐

