使用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证书的,说明配置成功
常见问题
问:--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证书有什么用?
答: 好处多多。
- 普通HTTPS证书是需要域名的,买域名要花钱,现在可以不花这个钱。
- 很多服务是简单的服务,不需要挂载域名,但是又想要安全,有了证书就可以解决。
- 最重要的一点,有一些服务是必须要https才能使用的,以前必须要域名。而在中国,域名想要解析到服务器上,是必须进行备案的,过程很麻烦。现在可以省去这一步,至少在开发测试的时候可以。
问: 这个证书的有效期多久?
答: 160小时,6.5天多一点。
问: 160小时很短,证书短时间就会过期,维护会不会很麻烦?
答: 不会,acme.sh就是干自动续签这个事的,当证书快过期时,它会自动续签。
如有问题,欢迎评论区进行讨论