【教程】使用 Let’s Encrypt 签发免费的 IP 地址证书

Let’s Encrypt 在本周(2025年12月19日)开始正式提供 IP 地址证书的签发,依旧免费。
先不讨论 IP 证书有什么用,先实现签发 IP 证书这件事吧 😊

【教程】使用 Let's Encrypt 签发免费的 IP 地址证书 1

简单粗暴,直接开始。

以下教程以 Linux 为例,Windows 下请使用 wsl

注意

需要公网 IP 地址,需要 80/443 端口,无法为局域网签发(如果你有办法,请反馈给青小蛙)

另外,感谢 ㄞ 同学。

第一步:安装 / 升级 acme.sh

acme.sh 是著名的自动化证书签发程序,支持 Let’s Encrypt、ZeroSSL 等不同的证书提供商。

curl https://get.acme.sh | sh -s [email protected]

如果安装过,那么升级方式:./acme.sh upgrade

第二步:签发证书

第一种:独立方式

独立方式是服务器中本身没有 Web 服务,acme.sh 会自己运行一个 Web 服务来进行验证:

$ ./acme.sh --issue --server letsencrypt -d 64.23.194.105 --certificate-profile shortlived --days 3 --standalone

命令具体解析如下:

  • ./acme.sh:执行 acme.sh 脚本。
  • --issue:申请一个新证书。
  • --server letsencrypt:使用 Let’s Encrypt 服务器。
  • -d 64.23.194.105:证书申请的目标是 IP 地址 64.23.194.105(该IP用于测试,已被删除)
  • --certificate-profile shortlived:申请一个短期证书(最长90天?)。
  • --days 3:证书的有效期是 3 天。
  • --standalone:使用 standalone 模式验证,不依赖现有的 Web 服务器。(需要80/443端口)

关于最长期限,青小蛙测试了 60 天成功,所以应该还是 90 天。

第二种:服务器模式

服务器模式可以使用现有的服务器,比如已经在运行 Nginx,就可以直接用。好处是不中断现有服务。

感谢烧饼,这里有一个最简的 Nginx 配置:

server {
    listen 80 default_server;
    server_name _;
    location ~ ^/.well-known/(acme-challenge|pki-validation)/ {
        add_header Content-Type text/plain;
        root /wwwroot/letsencrypt;
    }
}

以上这一步的目的是让服务器可以接受当前 IP 地址的直接访问,让 Let’s Encrypt 验证这个 IP 地址是你在控制。

注意 root 后面的内容是你自己服务器的路径,单独创建一个空文件夹即可。

再运行:

& ./acme.sh --issue --server letsencrypt -d 64.23.194.105 -w /wwwroot/letsencrypt --certificate-profile shortlived --days 8

证书文件在哪里?

生成的证书默认保存在 /root/.acme.sh/64.23.194.105_ecc/ 路径下,你要使用的是:

  • /root/.acme.sh/64.23.194.105_ecc/64.23.194.105.key (私钥)
  • /root/.acme.sh/64.23.194.105_ecc/fullchain.cer (完整证书链)

比如在 Nginx 的配置文件中,就是这样写:

    ssl_certificate /root/.acme.sh/64.23.194.105_ecc/64.23.194.105.key;
    ssl_certificate_key /root/.acme.sh/64.23.194.105_ecc/fullchain.cer;

重启服务器,就好啦。

【教程】使用 Let's Encrypt 签发免费的 IP 地址证书 2

自动续签

因为证书有效期很短,所以需要设置一个 crontab 定时:

crontab -e
0 0 * * * /root/.acme.sh/acme.sh --cron --home /root/.acme.sh > /dev/null

就好了。(续签只能解决证书更新的问题,还要记得定时重启你的 Web 服务器啊)

一个例子

以小众软件为例,是这样的:

51 1 */10 * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" --reloadcmd "docker exec appinn-nginx-1 nginx -s reload"

因为小众软件的 Nginx 跑在 Docker 中,需要以这样的方式重启一下,这次彻底结束。


原文:https://www.appinn.com/letsencrypt-issue-ip-ssl-certificates/

一个问题

IP 地址证书到底有什么用?

写留言

Enable Notifications OK No thanks