手把手教你申请免费https证书 acme.sh
acme.sh 实现了 acme
协议, 可以从 letsencrypt 生成免费的证书.
主要步骤:
- 安装 acme.sh
- 生成证书
- copy 证书到 nginx
- 更新 acme.sh
1. 安装 acme.sh
curl https://get.acme.sh | sh
普通用户和 root 用户都可以安装使用。
这个命令会自动为你创建 cronjob, 每天 0:00 点自动检测所有的证书, 如果快过期了, 需要更新, 则会自动更新证书.
由于某些因素,GitHub的raw.githubusercontent.com域名解析被墙了。所以现在安装需要额外增加几个操作:
# 访问 https://www.ipaddress.com/查询 raw.githubusercontent.com, github.com的真实IP
sudo vi /etc/hosts
# 增加域名映射
185.199.108.133 raw.githubusercontent.com
185.199.109.133 raw.githubusercontent.com
185.199.110.133 raw.githubusercontent.com
185.199.111.133 raw.githubusercontent.com
140.82.112.3 github.com
# 生效
sudo /etc/init.d/network restart
创建一个alias方便调用
alias acme.sh=~/.acme.sh/acme.sh
2. 生成证书
v3 acme.sh 使用 Zerossl 作为默认证书颁发机构 (CA), 在颁发新证书之前需要进行账户注册(一次性)
域名验证的几种方式:
# 1 手动添加 dns 方式, 在域名上添加一条 txt 解析记录, 验证域名所有权.
# 生成相应的解析记录
acme.sh --issue -d www.baidu.com --dns --yes-I-know-dns-manual-mode-enough-go-ahead-please
# 在域名管理面板中添加这条 txt 记录即可, 等待解析完成之后, 重新生成证书
acme.sh --renew -d www.baidu.com --yes-I-know-dns-manual-mode-enough-go-ahead-please
# 2 dns api 秘钥需到域名管理面板获取
export Ali_Key="xxxxxx"
export Ali_Secret="xxxxxx"
acme.sh --issue --dns dns_ali -d www.baidu.com
这里仅演示手动添加dns方式
3.copy/安装证书
注意, 默认生成的证书都放在安装目录下: ~/.acme.sh/, 请不要直接使用此目录下的文件, 例如: 不要直接让 nginx 的配置文件使用这下面的文件. 这里面的文件都是内部使用, 而且目录结构可能会变化.
正确的使用方法是使用 --install-cert 命令,并指定目标位置, 然后证书文件会被copy到相应的位置, 例如:
acme.sh --install-cert -d www.baidu.com \
--key-file /etc/letsencrypt/live/www.baidu.com/privkey.pem \
--fullchain-file /etc/letsencrypt/live/www.baidu.com/fullchain.pem \
--reloadcmd "sudo /data/nginx/sbin/nginx -s reload"
- 安装
4.更新 acme.sh
目前由于 acme 协议和 letsencrypt CA 都在频繁的更新, 因此 acme.sh 也经常更新以保持同步.
升级 acme.sh 到最新版 :
acme.sh --upgrade
如果你不想手动升级, 可以开启自动升级:
acme.sh --upgrade --auto-upgrade
之后, acme.sh 就会自动保持更新了.
对你有用的话, 就帮忙点个赞吧 ~