文章目录
- 前言
- 什么是 ACME 协议?
- ACME 使用指南
- 安装
- 下载
- 使用 `gitee` 下载
- 设置别名(非必要)
- 注册账号
- 更改证书生成方式
- 生成证书
- 重新生成证书并认证
- 安装 SSL 证书
- 使用 SSL 证书
- 验证
- 配置证书自动续期
- 证书续期命令
- 自动续期
- 查看添加的定时任务 `crontab -l`
- 总结
- 个人简介
前言
- 随着互联网安全的重要性日益增加,SSL 证书已成为保护用户数据和隐私的必备工具。然而,许多免费 SSL 证书的有效期仅为三个月,这就意味着网站管理员需要频繁地更新证书。频繁的手动更新不仅耗时费力,还容易因为疏忽而导致证书过期,从而影响网站的正常运行。
- 起初我需要每三个月手动更新证书,不仅费时费力还容易忘记,一个偶然的机会我发现了
ACME
这个工具,实现了 SSL 证书自动续期,让我告别焦虑,解放双手,下面就让我来介绍一下这个有意思的工具。
什么是 ACME 协议?
- ACME(Automatic Certificate Management Environment)协议是由 Let’s Encrypt 推出的自动化 SSL 证书管理协议。通过 ACME 协议,网站管理员可以轻松地自动申请、更新和管理 SSL 证书,完全告别手动操作的烦恼。
ACME 使用指南
安装
下载
curl https://get.acme.sh | sh
或者
wget -O - https://get.acme.sh | sh
- 由于acme.sh下载地址在国外,国内用户可能会出现下载超时无法安装的情况,下面介绍通过从gitee上下载安装包的安装方式
使用 gitee
下载
git clone https://gitee.com/neilpang/acme.sh.git
cd acme.sh
设置别名(非必要)
- 修改 shell 配置文件中,例如 .bashrc、.bash_profile 或 .zshrc 等
vim ~/.bashrc
alias acme.sh=/root/acme.sh/acme.sh
// 使更改立即生效
source ~/.bashrc
注册账号
acme.sh --register-account -m email@expmple.com
更改证书生成方式
- acme被ZeroSSL收购,其默认的证书方式为ZeroSSL,但此证书生成时会携带邮箱,因此更换为letsencrypt。
- 当然,也可以在生成证书时加一个–server参数来决定生成什么证书
--server letsencrypt
。
生成证书
- 使用
acme.sh --issue
命令生成证书,但生成证书的同时会进行域名的所有权的验证。 acme.sh 有两种方式验证:http 和 dns 验证。 - 注意:如果需要生成泛域名(*.a.com)的证书,不能使用HTTP认证域名,需要改用DNS认证的方式,本文介绍
dns
的方式。
acme.sh --issue --dns -d mydomain.com \
--yes-I-know-dns-manual-mode-enough-go-ahead-please
- 将上述txt解析添加到域名管理面板中
重新生成证书并认证
acme.sh --renew -d mydomain.com \
--yes-I-know-dns-manual-mode-enough-go-ahead-please
安装 SSL 证书
- 默认生成的证书都会放在安装目录下:~/.acme.sh/。然而,不要在服务器中直接引用该目录下的证书文件,也不要手动将证书文件拷贝到具体的 web 服务器中,因为手动拷贝会导致之后的证书更新流程无法完全自动化。
- 正确的方式是使用 acme.sh 的安装证书命令,这样 acme.sh 会自动将证书文件拷贝到指定的目录中,并记录下拷贝命令。在之后的自动更新过程中,acme.sh 会执行该拷贝步骤,从而实现证书更新流程的完全自动化。
acme.sh --install-cert -d xxx \
--cert-file xxx \
--key-file xxx \
--fullchain-file xxx\
--reloadcmd xxx // 服务重新加载命令
- 由于我使用的是 docker 运行的 nginx ,因此我的重载命令是
docker container restart nginx
,如果你直接使用 nginx 可以使用命令service nginx force-reload
。
使用 SSL 证书
- 上述命令会将证书按照在我们的指定目录,接下来我们只需要在 web 服务器中使用即可。
- 以 nginx 为例:
server {
listen 443 ssl;
ssl_certificate /etc/nginx/cert_file/fullchain.pem;
ssl_certificate_key /etc/nginx/cert_file/key.pem;
# ...
}
- 第一次配置需要重新执行一次
acme.sh --install-cert
命令重启 web 服务。
验证
- 打开我们配置的网站,发现完美的绿色,强迫症患者不再焦虑。
配置证书自动续期
- 如果我们使用
curl https://get.acme.sh | sh
方式安装,续期任务会自动在定时任务中配置;如果使用gitee
则需要我们手动配置。
证书续期命令
- ACME 支持使用
acme.sh --cron
命令进行证书续期。
自动续期
- 为了实现自动续期,我们只需要将续期命令添加到定时任务即可。使用
crontab -e
添加定时任务。
设置每月执行一次的定时任务(每月第一天)
0 0 1 * * acme.sh --cron > /root/acme.sh/acme_cron.log 2>&1
查看添加的定时任务 crontab -l
总结
- 通过使用
acme.sh
工具,我们轻松实现 SSL 证书的自动申请和更新,不再需要为频繁的手动操作而烦恼。这不仅提高了工作效率,还确保了网站的安全性和稳定性。告别手动更新 SSL 证书的焦虑。
个人简介
👋 你好,我是 Lorin 洛林,一位 Java 后端技术开发者!座右铭:Technology has the power to make the world a better place.
🚀 我对技术的热情是我不断学习和分享的动力。我的博客是一个关于Java生态系统、后端开发和最新技术趋势的地方。
🧠 作为一个 Java 后端技术爱好者,我不仅热衷于探索语言的新特性和技术的深度,还热衷于分享我的见解和最佳实践。我相信知识的分享和社区合作可以帮助我们共同成长。
💡 在我的博客上,你将找到关于Java核心概念、JVM 底层技术、常用框架如Spring和Mybatis 、MySQL等数据库管理、RabbitMQ、Rocketmq等消息中间件、性能优化等内容的深入文章。我也将分享一些编程技巧和解决问题的方法,以帮助你更好地掌握Java编程。
🌐 我鼓励互动和建立社区,因此请留下你的问题、建议或主题请求,让我知道你感兴趣的内容。此外,我将分享最新的互联网和技术资讯,以确保你与技术世界的最新发展保持联系。我期待与你一起在技术之路上前进,一起探讨技术世界的无限可能性。
📖 保持关注我的博客,让我们共同追求技术卓越。