Next.js(PM2+Nginx部署)遇ERR_TLS_CERT_ALTNAME_INVALID错误如何解决?
解决Error [ERR_TLS_CERT_ALTNAME_INVALID]:主机名与证书备用名称不匹配问题
根本原因
当前scimagine.com域名使用的SSL证书仅包含auth.scimagine.com子域,Node.js/浏览器会严格验证主机名与证书的备用名称(altnames)是否一致,不匹配时就会触发该错误。
解决方案
1. 为scimagine.com生成正确的SSL证书
- 若使用Let's Encrypt等工具,重新生成包含
scimagine.com及所需子域的证书,确保证书备用名称包含DNS:scimagine.com和DNS:auth.scimagine.com。 - 更新Nginx配置中
ssl_certificate和ssl_certificate_key的路径,指向新证书文件。 - 验证Nginx配置语法:
sudo nginx -t,无问题后重启服务:sudo systemctl restart nginx
2. 检查Nginx配置是否误用子域证书
- 打开
scimagine.com对应的Nginx配置文件(通常在/etc/nginx/sites-available/或/etc/nginx/conf.d/目录)。 - 确认配置中的
ssl_certificate和ssl_certificate_key未指向auth.scimagine.com的证书,而是对应scimagine.com的有效证书。 - 检查SSL跳转、反向代理等区块,确保所有涉及
scimagine.com的配置都使用正确证书。 - 验证配置并重启Nginx:
sudo nginx -t && sudo systemctl restart nginx
3. 临时跳过证书验证(仅测试环境使用)
- 生产环境绝对禁止,仅用于本地测试:
- 在Next.js请求代码中添加证书验证跳过:
const https = require('https'); const agent = new https.Agent({ rejectUnauthorized: false }); // 请求时使用该agent fetch('https://scimagine.com/api/xxx', { agent }); - 或通过PM2启动时设置环境变量:
NODE_TLS_REJECT_UNAUTHORIZED=0 pm2 start your-nextjs-entry-file.js
- 在Next.js请求代码中添加证书验证跳过:
内容的提问来源于stack exchange,提问作者Kiril
相关产品推荐
相关产品推荐

