使用acme.sh签发Let's Encrypt的IP SSL证书-2025年末正式版


目录

Let’s Encrypt 近期发布了公告,免费的IP SSL证书终于正式上线了。有了它,我们就可以通过https访问ip了,再也不怕不安全了。

本文以Nginx为例,手把手教学如何使用acme.sh签发Let’s Encrypt的IP SSL证书。后续会更新Caddy如果配置Let’s Encrypt的IP SSL证书

前提条件是有公网IP和可公网访问的80端口。

想要在局域网下配置或者80端口不能对外开放的环境下配置的,基本拜拜了。

下面进行正式讲解。

安装acme.sh

安装命令如下,如果已安装最新版则可跳过。

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

如果是之前安装的老版本,建议更新到最新版。

# 更新命令
acme.sh --upgrade

签发证书

命令中的1.1.1.1需要改成你的ip

acme.sh --issue -d 1.1.1.1 \
--webroot /var/www/html \
--server letsencrypt \
--certificate-profile shortlived \
--days 5

复制证书到指定目录

命令中的1.1.1.1需要改成你的ip

mkdir -p /etc/nginx/ssl

acme.sh --install-cert -d 1.1.1.1  \
--key-file       /etc/nginx/ssl/ip.key  \
--fullchain-file /etc/nginx/ssl/ip.cer \
--reloadcmd     "systemctl reload nginx"

修改nginx配置,添加ssl

server {
        listen 80 default_server;

        listen 443 ssl default_server; # 添加这行
        ssl_certificate /etc/nginx/ssl/ip.cer; # 添加这行
        ssl_certificate_key /etc/nginx/ssl/ip.key; # 添加这行

        root /var/www/html;
        index index.html index.htm index.nginx-debian.html;
        server_name _;
        location / {
                try_files $uri $uri/ =404;
        }

}

运行

nginx -s reload

打开浏览器测试

可以看到如下图,用ip打开也是有https证书的,说明配置成功

p1
p2

常见问题

--webroot /var/www/html这个为什么要这么写?

:为了方便,上面是以 Nginx 默认的 webroot 目录为例子。实际环境中,80端口可能已经被绑定了其他的服务。这个时候,我们可以把/var/www/html改成任意目录,比如/var/my-test,同时在 Nginx的配置文件里,配置80端口的地方,加上

location ~ ^/.well-known/acme-challenge/ {
    add_header Content-Type text/plain;
    root /var/my-test;
}

: IP证书有什么用?

: 好处多多。

  1. 普通HTTPS证书是需要域名的,买域名要花钱,现在可以不花这个钱。
  2. 很多服务是简单的服务,不需要挂载域名,但是又想要安全,有了证书就可以解决。
  3. 最重要的一点,有一些服务是必须要https才能使用的,以前必须要域名。而在中国,域名想要解析到服务器上,是必须进行备案的,过程很麻烦。现在可以省去这一步,至少在开发测试的时候可以。

: 这个证书的有效期多久?

: 160小时,6.5天多一点。


: 160小时很短,证书短时间就会过期,维护会不会很麻烦?

: 不会,acme.sh就是干自动续签这个事的,当证书快过期时,它会自动续签。


如有问题,欢迎评论区进行讨论