访问localhost:3000出现EPROTO错误,SSL相关问题求助
问题背景
前端仓库闲置近一年,此前运行正常。近期执行npm run dev编译启动成功,但访问localhost:3000时触发EPROTO错误(errno: -100),怀疑与SSL过期或更新有关。已尝试删除node_modules重新安装,问题仍未解决。
终端报错信息
Error: write EPROTO 140704571122880:error:14094438:SSL routines:ssl3_read_bytes:tlsv1 alert internal error:../deps/openssl/openssl/ssl/record/rec_layer_s3.c:1544:SSL alert number 80 at WriteWrap.onWriteComplete [as oncomplete] (internal/stream_base_commons.js:94:16) { errno: -100, code: 'EPROTO', syscall: 'write', response: undefined }
Chrome控制台报错信息
Uncaught at WriteWrap.onWriteComplete [as oncomplete] (internal/stream_base_commons.js:94:16)
排查与解决步骤
检查本地SSL证书有效性
若项目配置了自定义SSL证书(如webpack-dev-server、vite的HTTPS配置),确认证书是否过期、路径是否正确。自签名证书可尝试用mkcert重新生成可信本地证书,覆盖旧证书后重启服务。升级Node.js版本
旧版Node.js内置的OpenSSL库可能存在兼容性问题,导致SSL握手失败。升级至LTS版本(如v18/v20),执行rm -rf node_modules package-lock.json && npm install重新安装依赖后启动项目。清理浏览器缓存与信任证书
清除浏览器SSL缓存(Chrome:设置-隐私和安全-清除浏览数据,勾选缓存文件与Cookie),切换至隐身模式访问排除插件干扰。若为自签名证书,访问时点击地址栏不安全提示,选择「高级-继续访问」手动信任。关闭代理/网络拦截工具
暂停VPN、Charles、Fiddler等代理工具,关闭本地防火墙或杀毒软件的网络拦截功能,避免SSL请求被拦截导致握手错误。升级开发服务器依赖
检查package.json中开发服务器依赖(如webpack-dev-server、vite、vue-cli-service)的版本,旧版本可能与新环境不兼容。执行npm update [依赖名]升级至稳定版,重启服务测试。
内容的提问来源于stack exchange,提问作者ajsaule

