能否使用Nginx Certbot为AWS默认EC2域名配置SSL证书?
报错信息
An unexpected error occurred:
The server will not issue certificates for the identifier :: Error creating new order :: Cannot issue for "ec2-34-237-242-160.compute-1.amazonaws.com": The ACME server refuses to issue a certificate for this domain name, because it is forbidden by policy
产生原因
- 所有主流ACME证书颁发机构(包括Let's Encrypt)的政策都明确禁止为公共云服务商持有、仅给用户临时使用的通用实例域名颁发公开信任的SSL证书。
compute-1.amazonaws.com是AWS官方所有的根域名,你仅对当前EC2实例对应的子域名有临时使用权,没有该根域名的所有权和控制权,CA机构无法完成域名所有权验证,因此直接拒绝发证。 - 这类公共云默认实例域名会随实例销毁、公网IP变更而失效,给这类域名发证存在极高的安全风险,容易被恶意利用搭建钓鱼网站、欺诈站点,因此所有公开信任的CA都将这类域名纳入了发证黑名单。
解决方法
- 推荐方案:注册属于你自己的独立域名,将域名解析到当前EC2实例的公网IP后,再使用Certbot为你自己持有控制权的独立域名申请SSL证书,完全符合CA的发证规则,证书会被所有浏览器默认信任。
- 临时测试方案:如果仅做本地测试不需要公开访问,可手动生成自签名SSL证书配置到Nginx中,生成命令参考:
openssl req -x509 -newkey rsa:4096 -keyout nginx.key -out nginx.crt -days 365 -nodes
生成的nginx.crt和nginx.key文件直接配置到Nginx的ssl_certificate和ssl_certificate_key参数即可,注意自签名证书不会被浏览器默认信任,访问时会弹出安全警告。
- AWS原生方案:如果使用AWS生态服务,可以申请AWS Certificate Manager(ACM)公开证书,绑定到EC2前端的ALB负载均衡器或CloudFront分发上,该方案同样要求你持有自己的独立域名才能完成验证。
内容的提问来源于stack exchange,提问作者Jose-xd
相关产品推荐
相关产品推荐

