acme 证书管理
参考:官方文档
1. 证书申请
1.1 acme安装
- 命令行直接自动下载安装
curl https://get.acme.sh | sh
- 手动下载安装
网络不好可以手动下载上传,下载最新的acme安装包
https://github.com/Neilpang/acme.sh/archive/master.tar.gz
如果没有安装 socat,安装socat(可选)
yum install socat -y
安装
tar -zvxf acme.sh-master.tar.gz
cd acme.sh-master
./acme.sh --install
1.2 注册账户
acme.sh --register-account -m 邮箱地址
acme现在使用ZeroSSL,不注册账户会提示如下错误:
[Fri Nov 19 15:03:11 CST 2021] No EAB credentials found for ZeroSSL, let’s get one
[Fri Nov 19 15:03:11 CST 2021] acme.sh is using ZeroSSL as default CA now.
1.3 DNS 管理API访问配置
我这里使用的是阿里云,其他类似,参考:官方文档。
- 用户头像下拉选择 AccessKey 管理
- 创建子账户
AccessKey可以调用OpenApi进行一些操作,为了安全,使用创建个子用户,授予DNS管理权限即可。
- 创建并授权
创建用户,完成之后,会自动分配AccessKeyID 和 AccessKeySecret,复制下来保存。
授权
我这里已经选择过了,所以是灰色的,未选择点击 管理云解析(DNS)的权限放右边即可。
1.4 申请证书
1.4.1 添加环境变量
回到服务器
添加上面的的key和Secret到系统环境变量,追加在~/.bashrc文件中即可,在申请证书的时候,acme 会保存到账户信息中
# 编辑文件
vim ~/.bashrc
export Ali_Key="AccessKeyID"
export Ali_Secret="AccessKeySecret"
# 保存退出,并使环境变量生效
source ~/.bashrc
1.4.2 申请泛域名
acme.sh --issue --dns dns_ali -d xxx.com -d '*.xxx.com'
2. Nginx配置
主要是这三行
这里我是用了软连接放着了nginx配置下,真实地址如下:
key.pem => /root/.acme.sh/xxx.com/xxx.com.key
cert.pem => /root/.acme.sh/xxx.com/fullchain.cer
ssl_certificate /etc/nginx/xxx.com/fullchain/cert.pem;
ssl_certificate_key /etc/nginx/xxx.com/key.pem;
ssl_trusted_certificate /etc/nginx/xxx.com/fullchain/cert.pem;
server {
listen 80;
server_name www.xxx.com xxx.com;
rewrite ^(.*) https://$host$1 permanent;
}
server {
# 后来版本这样配置,以前是ssl on; 会提示警告:
# nginx: [warn] the "ssl" directive is deprecated
listen 443 ssl;
server_name www.xxx.com xxx.com;
gzip on;
gzip_min_length 1k;
gzip_comp_level 9;
gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
gzip_vary on;
gzip_disable "MSIE [1-6]\.";
ssl_certificate /etc/nginx/xxx.com/fullchain/cert.pem;
ssl_certificate_key /etc/nginx/xxx.com/key.pem;
ssl_trusted_certificate /etc/nginx/xxx.com/fullchain/cert.pem;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
root /var/www/static-web/xxxxxx;
index index.html;
location ~* ^.+\.(jpg|jpeg|gif|png|ico|css|js|pdf|txt){
root /var/www/static-web/xxxxxx;
}
}
3. 更新证书
证书有效期3个月,正常通过脚本启动会自动添加定时任务
25 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null
如果更新失败或者发现证书失效,则需要更新acme
- 自动更新
acme.sh --upgrade
- 手动更新,参考第一节acme安装。
- 最后执行更新证书命令
acme.sh --cron --force --debug 2