You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Axios向Node.js服务器发起HTTPS请求时遇ERR_SSL_PROTOCOL_ERROR错误求助

解决Node.js HTTPS服务器的ERR_SSL_PROTOCOL_ERROR问题

核心排查方向及解决步骤

1. 修复证书链完整性问题

你的HTTPS服务器配置里只用了certificate.pem,但Certbot颁发的证书通常需要包含中间证书的fullchain.pem才能让客户端完整验证信任链。把服务器配置里的cert路径换成fullchain文件:

const options = {
  key: fs.readFileSync('/path/to/private-key.pem'),
  // 替换成fullchain.pem
  cert: fs.readFileSync('/path/to/fullchain.pem'),
  // 先注释掉自定义ciphers,用默认值测试
  // ciphers: '...'
};

2. 分离服务器HTTPS与数据库SSL配置

你给MySQL配置的SSL和服务器的HTTPS是完全独立的两个服务,当前问题出在服务器的HTTPS连接上,先暂时注释掉数据库的SSL配置,排除干扰:

const db = mysql.createPool({
  host: "123.456.789.012",
  user: "myuser",
  port: "3306",
  password: "mypassword",
  database: "mydb",
  // 暂时注释,先解决HTTPS问题
  // ssl: {
  //   ca: fs.readFileSync('/path/to/ca.crt'),
  //   key: fs.readFileSync('/path/to/private-key.pem'),
  //   cert: fs.readFileSync('/path/to/certificate.pem')
  // }
});

3. 检查证书文件的路径与权限

确保Node.js进程有读取证书文件的权限,比如用以下命令验证:

ls -l /path/to/private-key.pem /path/to/fullchain.pem

如果权限不足,执行:

chmod 644 /path/to/private-key.pem /path/to/fullchain.pem

同时确认路径是绝对路径,避免相对路径导致的文件找不到问题。

4. 验证客户端请求的正确性

  • 确保Axios请求的是https://yourdomain.com:8081(注意是HTTPS,不是HTTP)
  • 如果是本地测试,不要用localhost访问,因为你的证书是绑定域名的,域名不匹配会触发SSL错误,改用域名访问或者配置hosts映射

5. 简化HTTPS配置,排除自定义cipher干扰

你配置的cipher列表过于复杂,可能存在客户端不支持的加密套件,先去掉自定义ciphers配置,使用Node.js默认的加密套件集合,再测试连接。

6. 检查服务器端口与防火墙

确认服务器的8081端口已经对外开放(云服务器的安全组、本地防火墙都要放行),可以用telnet yourdomain.com 8081测试端口是否可达。


内容的提问来源于stack exchange,提问作者jaime

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 09:53:14