WSS连接127.0.0.1:8080失败,求助排查TLS/SSL证书配置问题
排查WSS连接失败的具体方向
1. 验证证书的SAN字段是否包含目标IP
你用mkcert localhost 127.0.0.1 ::1生成了证书,但需要确认证书实际包含127.0.0.1作为Subject Alternative Name(SAN):
- 进入Python项目的certs目录,执行终端命令:
openssl x509 -in cert.pem -text -noout | grep -A 10 "Subject Alternative Name" - 输出中必须显示
IP Address:127.0.0.1,如果缺失,重新生成证书并替换现有文件。
2. 查看浏览器控制台的详细错误信息
浏览器给出的错误提示过于简略,打开开发者工具(F12):
- 在网络标签中找到WSS请求,查看失败的具体原因(比如
NET::ERR_CERT_COMMON_NAME_INVALID、NET::ERR_SSL_PROTOCOL_ERROR等) - 控制台标签会显示TLS握手失败的详细日志,这是定位问题的核心依据。
3. 调整Python SSL上下文配置
websockets库对SSL上下文有特定要求,尝试补充配置:
ssl_context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER) # 强制使用现代TLS版本和兼容加密套件 ssl_context.min_version = ssl.TLSVersion.TLS_1_2 ssl_context.set_ciphers('ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384') ssl_context.load_cert_chain(ssl_cert, keyfile=ssl_key)
4. 测试端口监听与直接连通性
- 确认Python服务确实在监听8080端口:
# Linux/macOS lsof -i :8080 # Windows netstat -ano | findstr :8080 - 用
wscat工具绕开浏览器测试WSS连接:
先安装工具:npm install -g wscat,再执行:
工具会输出具体错误,比如证书不被信任或连接超时。wscat -c wss://127.0.0.1:8080
5. 检查证书文件权限
确保Python进程能读取证书文件:
- Linux/macOS下执行:
chmod 644 certs/cert.pem certs/key.pem - Windows右键证书文件,确认当前用户拥有读取权限。
6. 重新确认mkcert根证书信任状态
执行mkcert -install,强制将根证书安装到系统和浏览器信任列表;之后在浏览器的证书设置中(如Chrome的chrome://settings/certificates),检查是否存在mkcert生成的根证书。
内容的提问来源于stack exchange,提问作者Sannan - Move to Codidact
相关产品推荐
相关产品推荐

