无域名仅IP访问Amazon Lightsail时SSL证书验证失败问题咨询
核心原因
所有纳入浏览器、操作系统默认信任列表的公共CA(证书颁发机构),2016年之后就全停了裸公网IP的免费SSL证书签发服务,可购买的公网IP专属SSL证书价格是普通域名证书的10倍以上,性价比极低。你当前没有绑定专属域名,仅靠公网IP申请证书时,不管走HTTP验证、DNS验证还是TLS验证通道,都过不了所有权校验——所有证书审核逻辑的前提是申请者对证书绑定的主体(域名/IP)有完全控制权,公网IP你只有实例层面的使用权没有归属权,自然通不过审核。就算你强行在本地生成自签证书绑定到服务,因为证书不在公共信任链里,所有用户访问时都会提示连接不安全。
可行解决方案
按实用性、落地成本从高到低排序:
- 方案1(生产环境首选,总成本最低):绑定专属域名后申请免费可信SSL证书
先通过任意域名注册渠道买一个域名(最低几块钱/年即可),在域名解析控制台添加A记录,把域名指向你Lightsail实例的公网IP,等解析全球生效后二选一配置证书:- 用Lightsail原生证书服务:进入Lightsail控制台的网络板块,选择新建SSL/TLS证书,填入你绑定的域名,按照提示把对应的DNS校验CNAME记录加到域名解析配置里,验证通过后直接把证书绑定到你的实例/前置负载均衡即可,证书由AWS自动续期,不需要手动维护。
- 实例本地申请证书:如果你的Node.js服务直接对外暴露,先确保80端口没有被占用、可正常公网访问,安装certbot工具后执行命令
certbot certonly --standalone -d 你绑定的域名,验证通过后会在本地生成可信的证书、私钥文件,把文件路径配置到Node.js的HTTPS服务启动参数里即可,后续加个系统定时任务执行certbot renew就能自动完成证书续期。
- 方案2(仅本地测试用,禁止生产环境使用):自签证书+手动信任
如果暂时不想注册域名,仅做内部功能测试,可以直接在服务器上用openssl生成自签证书,执行命令:openssl req -x509 -newkey rsa:4096 -keyout server.key -out server.crt -days 365 -nodes -subj '/CN=你的实例公网IP'
把生成的server.key和server.crt配置到Node.js的HTTPS配置中启动服务。此时所有设备首次访问都会提示不安全,你需要在每台需要访问服务的设备上,手动把server.crt导入到系统/浏览器的受信任根证书存储区,导入后访问就不会弹出安全警告。注意这种方式生成的证书仅在手动导入过的设备上被信任,外部陌生用户访问依然会报连接不安全,且证书到期后需要手动重新生成替换。 - 避坑提醒:不要尝试用Lightsail默认分配的
*.compute.amazonaws.com二级域名申请可信证书,这个域名的所有权归AWS,你没有对应DNS解析的修改权限,根本过不了CA的所有权验证,纯浪费时间。
不要尝试找所谓的“裸IP免费SSL证书”资源,这类证书要么不在浏览器默认信任链里,要么是钓鱼站点伪造的恶意证书,部署后反而有数据泄露、流量劫持的风险。
内容的提问来源于stack exchange,提问作者Aşkın TEMEL
相关产品推荐
相关产品推荐

