Nginx环境下无需开放80端口,使用Let’s Encrypt验证服务器所有权的方案咨询
Nginx环境下无需开放80端口,使用Let’s Encrypt验证服务器所有权的方案咨询
我太懂这种窘境了!之前80端口开放的时候,我一直用certbot --nginx -d domain_name这条命令一键搞定Let’s Encrypt证书申请和Nginx配置,全程顺畅得不行。但现在碰到客户不会开放80端口的情况,确实得换个验证思路——毕竟默认的HTTP-01验证是依赖80端口的,端口没开肯定过不了。
给你推荐几个靠谱的替代方案:
- DNS-01验证方式:这是最适配这种场景的方案,它不需要开放任何公网端口,只需要你能修改目标域名的DNS解析记录就行。
- 如果你的域名托管在支持Certbot插件的服务商(比如Cloudflare、AWS Route 53这些),可以直接用对应插件自动完成验证,以Cloudflare为例,命令大概是这样:
运行前需要先安装对应插件(比如certbot certonly --dns-cloudflare -d domain_namecertbot-dns-cloudflare),并配置好服务商的API密钥,全程会自动添加和删除验证用的TXT记录,不用手动操作。 - 如果没有对应服务商的插件,也可以用手动DNS验证,执行命令:
运行后Certbot会提示你添加一条特定的TXT记录到域名的DNS解析中,等这条记录全球生效(一般需要几分钟到几十分钟),再按回车继续,就能完成验证拿到证书了。certbot certonly --manual --preferred-challenges=dns -d domain_name
- 如果你的域名托管在支持Certbot插件的服务商(比如Cloudflare、AWS Route 53这些),可以直接用对应插件自动完成验证,以Cloudflare为例,命令大概是这样:
- 若客户能开放443端口的备选:可以试试TLS-ALPN-01验证,这个依赖443端口对外开放,用Certbot的命令是:
不过要是客户连443端口也无法开放,那还是DNS-01验证最稳妥。certbot certonly --nginx --preferred-challenges=tls-alpn-01 -d domain_name
拿到证书后,你依然可以用Certbot的Nginx插件自动配置站点,或者手动把证书路径写入Nginx的server块,后续的证书续期也可以用同样的验证方式自动完成。
备注:内容来源于stack exchange,提问作者achhainsan




