
Let’s Encrypt 签发 IP 证书
Let’s Encrypt 在 2025 年正式支持了 IP 证书的签发。We’ve Issued Our First IP Address Certificate
安装 acme.sh
(半)官方的工具 certbot 目前似乎并不打算支持 IP 证书的签发,会告诉你一段老黄历:

因此需要使用 acme.sh,这款工具目前已经支持了从 Let’s Encrypt 签发 IP 证书。
安装命令为:
curl https://get.acme.sh | sh -s email=my@example.com如果使用 wget 则是:
wget -O - https://get.acme.sh | sh -s email=my@example.com其中 my@example.com 需要替换成你自己的邮箱地址,主要是向 CA 注册使用。注意 acme.sh 不需要也不推荐使用 root 账户运行,因此运行上面的命令时务必不要添加 sudo。
安装完成后会自动将 acme.sh 添加为一个 alias,因此无需制定完整路径运行,不过重新登录或运行 .bashrc 前是不生效的。
配置 acme.sh 以使用 Let’s Encrypt
因为 acme.sh 收了 ZeroSSL 的钱,因此现在默认使用的是 ZeroSSL。如果要使用 Let’s Encrypt 需要进行配置:
acme.sh --set-default-ca --server letsencrypt签发证书
Let’s Encrypt 目前仅支持为 IP 地址签发短周期证书,也就是说有效期默认是 6 天,不能签发那种 90 天的证书。尝试签发 90 天证书会看到类似“CA 没有接受你的请求”一类的错误。
acme.sh --issue -d <IP 地址> -w <网站根目录> --certificate-profile shortlived --days 84特别要注意不要遗漏 --certificate-profile shortlived 这个参数,指的就是刚刚提到的短周期证书。
另外 --days 84 这个参数也不要忘记了,不然 acme.sh 会很蠢蛋的在“证书过期前30天”帮你续期,问题是这是个短周期证书,但 acme.sh 还拿 90 天算的,结果就是你证书过期了好几十天之后才会帮你续期……
至于为什么是“提前 84 天”我也不好说
不过我可以告诉你的是这个数字最终出来的不是证书过期前半天续期而是过期前两天……
签发之后 acme.sh 会自动添加一个 cronjob,因此无需手动配置自动续签。
签发好的证书会放在一个类似 ~/.acme.sh/1.1.45.14_ecc/ 的文件夹里,当然具体什么路径请以实际为准。
接下来就是去你的网页服务器里安装证书了。
测试
用 https://<你的 IP 地址> 的方式来访问网站,可以正常打开。查看证书信息:

注意到有效期确实是 6 天半。

在持续使用吗,效果如何?
问题:是否必须开放80端口?自定义其他端口行不行?
效果挺好的,但是 80 端口是必须的,非公网环境不建议折腾