DigitalOcean部署Web应用启用SSL后,访问Droplet IP遇NET::ERR_CERT_COMMON_NAME_INVALID错误
解决NET::ERR_CERT_COMMON_NAME_INVALID错误的实用方案
嘿,这个问题我太熟了!你遇到的NET::ERR_CERT_COMMON_NAME_INVALID错误,核心原因其实很直白——你的SSL证书是专门给*.domain.com这类域名颁发的,压根没包含你的Droplet IP地址。当你直接用IP访问时,浏览器会严格校验证书里的域名和你访问的地址是否匹配,不匹配自然就触发安全警告了。
下面给你几个可行的解决思路,按推荐程度排序:
方案1:用绑定证书的域名访问(最推荐)
既然你的Nginx配置里server_name设的是sub.domain.com,而且证书也是对应这个域名的,那直接用sub.domain.com访问你的Web应用就完全没问题。前提是你已经把这个子域名解析到了Droplet的IP地址上(在域名服务商的DNS后台添加A记录就行)。这是生产环境下的标准做法,既合规又省心。
方案2:给Droplet IP单独申请SSL证书(仅特殊场景用)
如果你确实有必须用IP访问的需求,那得给你的Droplet公网IP单独申请SSL证书。这里给你说下具体步骤:
- 首先,Let's Encrypt这类免费CA是支持给公网IP颁发证书的,但需要用DNS-01挑战(因为IP没法用HTTP-01验证方式)。
- 操作步骤:
- 先安装Certbot和对应你域名服务商的DNS插件(比如Cloudflare、Godaddy都有专门的Certbot插件)
- 运行Certbot命令发起证书申请,比如:
certbot certonly --manual --preferred-challenges dns -i nginx --server https://acme-v02.api.letsencrypt.org/directory --agree-tos -m your-email@example.com --cert-name your-droplet-ip - 按照命令行提示,在你的域名DNS管理后台添加一条TXT记录完成验证
- 验证通过后,在Nginx里新增一个专门对应IP的server块:
server { listen 443 ssl; server_name 你的-droplet-ip地址; ssl_certificate /etc/letsencrypt/live/你的-ip/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/你的-ip/privkey.pem; # 这里添加你的应用根目录、反向代理等原有配置 } - 最后重启Nginx生效:
sudo systemctl restart nginx
方案3:临时跳过浏览器警告(仅测试用)
如果只是自己临时测试,你可以在浏览器的警告页面点击“高级”选项,然后选择“继续前往IP地址”(不同浏览器的文字表述可能略有不同)。但这个方法只适合自己测试用,绝对不能用于生产环境——普通用户访问时会遇到同样的警告,严重影响信任度。
内容的提问来源于stack exchange,提问作者Valip
相关产品推荐
相关产品推荐

