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

导入ACM的自签名SSL证书在Nginx中无法正常工作

解决思路

核心问题:自签名证书不受浏览器信任

你通过openssl x509 -signkey生成的是自签名证书——这类证书没有经过全球浏览器信任的根证书颁发机构(CA)签发,浏览器默认会标记为“连接不安全”,这是问题的根本原因。


具体解决方向

1. 替换为受信任CA签发的证书(生产/公网访问推荐)

放弃自签名证书,改用受信任的CA证书:

  • 通过AWS ACM申请免费公有证书:在ACM控制台选择“请求证书”,输入test.mydomain.com作为域名,选择DNS验证(Route53会自动添加验证记录,无需手动操作)。证书签发后,推荐搭配ALB(应用负载均衡)使用:将ACM证书绑定到ALB的443端口,ALB转发流量到EC2的80端口,Nginx只需监听80端口即可,无需在EC2上部署证书。
  • 若要直接在EC2部署,可使用Let's Encrypt的certbot工具申请免费证书,工具会自动完成证书签发和Nginx配置。

2. 临时解决:信任自签名证书(仅本地测试用)

如果仅用于个人测试,可手动将mycert.crt导入浏览器的信任列表:

  • 打开浏览器证书管理页面,找到“受信任的根证书颁发机构”,导入你的mycert.crt文件。
  • 注意:该方式仅对你的浏览器生效,其他用户访问仍会报错,不适合公网场景。

3. 检查Nginx配置正确性

  • 确认证书文件路径/path/to/certs/mycert.crt和/path/to/certs/mycert.key准确,且Nginx进程有读取权限:执行chmod 644 /path/to/certs/*和chown nginx:nginx /path/to/certs/*调整权限。
  • 执行nginx -t验证配置文件合法性,无语法错误后重启Nginx:systemctl restart nginx。

4. 诊断证书问题细节

用openssl命令查看证书状态,定位具体报错原因:

openssl s_client -connect test.mydomain.com:443
  • 查看输出中的Verify return code字段:
    • 若为18 (self signed certificate):确认是自签名证书问题,按方向1解决。
    • 若为20 (unable to get local issuer certificate):说明缺少中间证书,需将中间证书追加到mycert.crt文件末尾。
    • 若为0 (ok)但浏览器仍报错:清除浏览器缓存后重试。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 20:49:59