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

原始链接在: 【教程】使用 Let's Encrypt 签发免费的 IP 地址证书 - 小众软件

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

简单粗暴,直接开始。

[!tips] 注意
以下教程以 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;

重启服务器,就好啦。

自动续签

因为证书有效期很短,所以需要设置一个 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 中,需要以这样的方式重启一下,这次彻底结束。


原文:【教程】使用 Let's Encrypt 签发免费的 IP 地址证书 - 小众软件

一个问题

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

3 个赞

这样就不需要域名也能跑ssl/tls啦。比如 https://1.1.1.1

唉,要是可以给 127.0.0.1 和 192.168.1.1 签发证书,就可以把自建的 dns 改造成 doh 啦!

局域网内只能自签

也不是,我都忘了,有这个:

2 个赞

要是能给内网ip直接颁发个可信证书就好了

NAS部署bitwarden密码管理器 bitwarden要求必须使用https 且随着版本更新以后肯定所有版本都要求证书必须可信

如果能直接使用内网IP+受信证书 就可以不用买域名了 密码管理器只要内网里同步完成,脱离局域网时 只要能够填充基本就够用了,而且隔离外网也更安全.

自己颁发证书,然后手动添加信任也可以实现,但某些操作系统下是否能成我就不清楚了,添加完以后怎么删除,我就更不清楚了 :sweat_smile:

不知道能不能用于免备案。要是不行,用于tailscale的derp也不错,现在是用自签的ip证书

https://crt.sh/?id=23207538162 其实只有6天,我去crt.sh看过了,let’s encrypt的IP证书应该是只有6天,会忽略比6天长的日期。

1 个赞

我测试了 只有6天 更多的天数 没用
不知道怎么测试出60的 希望公布一下 :joy:

应该是我弄错了。我不确定当天为何看到60天,但今天看不到了:see_no_evil_monkey:

所以还是自签,只不过他这个是自动安装根证书

今天看着这篇文章搞了一下经历了一番曲折终于成功了