终于 Let’s Encrypt 正式支持1为 IP 地址签发免费 SSL 证书了🎉今天以 acme.sh 为例跟大家分享如何自动申请 IP 地址证书。
Let’s Encrypt 默认只会签发普通域名证书,九十天过期。如果想签发 IP 证书,需要指定 ACME profile。这些 profile 可以简单理解为证书类型参数,可以在签发证书时指定。不过目前还有些 ACME 客户端不支持 profile 参数。好在 acme.sh 已经支持了2。
我们先看看 Let’s Encrypt 支持哪些 profile
~# acme.sh --list-profiles --server letsencrypt
[Thu Dec 18 03:27:15 UTC 2025] Fetching profiles from LetsEncrypt.org (https://acme-v02.api.letsencrypt.org/directory)...
name info
--------------------------------------------------------------------
classic https://letsencrypt.org/docs/profiles#classic
shortlived https://letsencrypt.org/docs/profiles#shortlived
tlsclient https://letsencrypt.org/docs/profiles#tlsclient
tlsserver https://letsencrypt.org/docs/profiles#tlsserver
一共有四种 profile,第一种 classic 就是我们一直在用九十天域名证书。第二种 shortlived 顾名思义就是短期证书。签发 IP 地址证书就需要用这种。
IP 地址证书有效期为7天,只能通过 HTTP-01 来验证控制权,也就是说你需要在 IP 地址对应的主机上监听 80 端口处理相关的 HTTP 请求。
好,现在给出签发命令:
wget https://raw.githubusercontent.com/acmesh-official/acme.sh/refs/heads/master/acme.sh
bash /root/acme.sh --issue --server letsencrypt \
--cert-profile shortlived --days 5 \
-w /var/www/html \
-d 192.9.228.95 \
-d 2603:c024:c00c:9e00:1::
需要注意以下几点:
- 通过
--cert-profile参数指定 shortlived profile,只有这个 profile 才能签发 IP 证书 - 通过
--days参数指定证书更新时间,因为 IP 地址证书7天有效,更新时间需要小于7 - 通过
-d参数指定 IP 地址,同时支持 IPv4 和 IPv6 地址,一张证书内可以有多个地址
如果一切顺利,acme.sh 会输出以下结果:
[Thu Dec 18 03:10:14 UTC 2025] Using CA: https://acme-v02.api.letsencrypt.org/directory
[Thu Dec 18 03:10:14 UTC 2025] Creating domain key
[Thu Dec 18 03:10:14 UTC 2025] The domain key is here: /root/.acme.sh/192.9.228.95_ecc/192.9.228.95.key
[Thu Dec 18 03:10:14 UTC 2025] Multi domain='IP:192.9.228.95,IP:2603:c024:c00c:9e00:1::'
[Thu Dec 18 03:10:15 UTC 2025] Getting webroot for domain='192.9.228.95'
[Thu Dec 18 03:10:15 UTC 2025] Getting webroot for domain='2603:c024:c00c:9e00:1::'
[Thu Dec 18 03:10:15 UTC 2025] Verifying: 192.9.228.95
[Thu Dec 18 03:10:15 UTC 2025] Pending. The CA is processing your order, please wait. (1/30)
[Thu Dec 18 03:10:19 UTC 2025] Success
[Thu Dec 18 03:10:19 UTC 2025] Verifying: 2603:c024:c00c:9e00:1::
[Thu Dec 18 03:10:19 UTC 2025] Pending. The CA is processing your order, please wait. (1/30)
[Thu Dec 18 03:10:23 UTC 2025] Success
[Thu Dec 18 03:10:23 UTC 2025] Verification finished, beginning signing.
[Thu Dec 18 03:10:23 UTC 2025] Let's finalize the order.
[Thu Dec 18 03:10:23 UTC 2025] Le_OrderFinalize='https://acme-v02.api.letsencrypt.org/acme/finalize/1373445436/459962244086'
[Thu Dec 18 03:10:24 UTC 2025] Downloading cert.
[Thu Dec 18 03:10:24 UTC 2025] Le_LinkCert='https://acme-v02.api.letsencrypt.org/acme/cert/06115654d6ba3e23ef457b9702144ed8d4c7'
[Thu Dec 18 03:10:24 UTC 2025] Cert success.
-----BEGIN CERTIFICATE-----
MIIDWjCCAuGgAwIBAgISBhFWVNa6PiPvRXuXAhRO2NTHMAoGCCqGSM49BAMDMDIx
CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQswCQYDVQQDEwJF
ODAeFw0yNTEyMTgwMjExNTNaFw0yNTEyMjQxODExNTJaMAAwWTATBgcqhkjOPQIB
BggqhkjOPQMBBwNCAASPeCK5wzDZ6oKlfdBUKEeCugUqbPRjLhUz+QnkRBwCND0P
iwa46hznydDC7Tnr4SZyuyyxB7TadBRu2IazzjiJo4ICBzCCAgMwDgYDVR0PAQH/
BAQDAgeAMBMGA1UdJQQMMAoGCCsGAQUFBwMBMAwGA1UdEwEB/wQCMAAwHwYDVR0j
BBgwFoAUjw0TovYuftFQbDMYOF1ZjiNykcowMgYIKwYBBQUHAQEEJjAkMCIGCCsG
AQUFBzAChhZodHRwOi8vZTguaS5sZW5jci5vcmcvMCQGA1UdEQEB/wQaMBiHBMAJ
5F+HECYDwCTADJ4AAAEAAAAAAAAwEwYDVR0gBAwwCjAIBgZngQwBAgEwLQYDVR0f
BCYwJDAioCCgHoYcaHR0cDovL2U4LmMubGVuY3Iub3JnLzcyLmNybDCCAQ0GCisG
AQQB1nkCBAIEgf4EgfsA+QB3AFyld9Kbf4uvQZ7Y7Kv7bcuuw4U3AtV0bxdNrTyT
SqlqAAABmy9v75UAAAQDAEgwRgIhAIVRQSFgaZVT9QGN7ROMerub81JLSreQXSoV
44t7Z3NEAiEAj2m8/7D+Wo50AmkXc4kjpwGL1hWcDRtJonSwYdslRbIAfgClyXiS
XVdGF4KHDdiJZgtcVWSLfQBA8uwHaFHRiGkZ9wAAAZsvb/BWAAgAAAUAK/36rAQD
AEcwRQIhALXh6Th8JO6SUXGE/iYhIyMqrtLxDfvch1svRzi13eUHAiB1ruEmAlqz
xgI7Km6aKOLpYmb2f/BMv4igDUX+hEFMjTAKBggqhkjOPQQDAwNnADBkAjAFP8Ub
HdSJ10tYdoIVbwFsspy+xAuOlW7xzkp22t4xOofAYEQqzTz1jQB1gZm6wQkCME65
q4MrmwlWfGO3sDmxn7QYMR9hj9Bc06ZhQrQQeNxqkXFEGjXZ2UtdbAfqBIKwsA==
-----END CERTIFICATE-----
[Thu Dec 18 03:10:24 UTC 2025] Your cert is in: /root/.acme.sh/192.9.228.95_ecc/192.9.228.95.cer
我们也可以查看当前已经签发的证书列表:
$ acme.sh --list
Main_Domain KeyLength SAN_Domains Profile CA Created Renew
192.9.228.95 "ec-256" 2603:c024:c00c:9e00:1:: shortlived LetsEncrypt.org 2025-12-18T03:10:24Z 2026-02-15T03:10:24Z
这是我的第一张 IP 地址证书
https://crt.sh/?q=bdd2cbdc676e55925552fc39f05ba1b0457b13b7c4babca37f5ec74a8078c970
这是 IPv4 测试站 https://192.9.228.95/
这是 IPv6 测试站 https://[2603:c024:c00c:9e00:1::]/
在使用上,IP 证书跟域名证书几乎没有区别。这是我的 Nginx 配置:
server {
listen 443 ssl default_server;
listen [::]:443 ssl default_server;
ssl_certificate /root/.acme.sh/192.9.228.95_ecc/fullchain.cer;
ssl_certificate_key /root/.acme.sh/192.9.228.95_ecc/192.9.228.95.key;
server_name 192.9.228.95;
server_name 2603:c024:c00c:9e00:1::;
root /var/www/html;
location / {
try_files $uri $uri/ @ruby =404;
}
}
唯一需要注意的是 IP 地址网站需要设置为 default_server 不然访问时会展示默认网站内容。
最后说一下为什么要用 IP 地址证书。
一般 IP 地址很难记忆,而且有时候可能会被屏蔽,所以才有了域名。一方面域名容易记,另一方面,如果 IP 被封之后还可以换新的地址。所以,一直以来直接给 IP 地址签发 SSL 证书的应用场景并不多。因而 IP 地址证书几乎都需要付费才能获得。
但是,随着相关部门对网络管控越来越严格,基于 SNI 的屏蔽技术开始普及。也就是说,他们可以直接屏蔽域名🤦♂️这导致很多场景下只能使用临时域名或者直接使用 IP 地址。还有一种场景是 DoH,使用域名除了容易被封之外,另一个问题是会增大解析延迟,所以大部分服务都支持通过 IP 地址直接访问 HTTPS 服务。
宝塔面板添加计划任务,每五天执行一次更新续期



