使用acme.sh为网站部署RSA与ECC通配符证书

由于网站的证书即将过期,需要更新,记录一下证书的更新过程。

即将过期的旧证书

1、安装acms.sh

acme.sh官网地址http://acme.sh,会跳转至项目的Github地址,按照文档进行安装

1
curl https://get.acme.sh | sh -s email=koalarong@outlook.com

或者通过git下载安装

1
2
3
git clone https://github.com/acmesh-official/acme.sh.git
cd acme.sh
./acme.sh --install -m koalarong@outlook.com

安装成功后退出终端,重新登录,即可运行acme.sh

1
2
3
acme.sh --version
https://github.com/acmesh-official/acme.sh
v3.0.2

其他高级安装选项请参考Acme.sh官方文档 How-to-install

2、使用DNS API方式签署证书

可参考https://github.com/acmesh-official/acme.sh/wiki/dnsapi,了解不同DNS提供商的API使用方法,由于我的域名目前在阿里云备案并配置解析,使用阿里云的api进行配置https://github.com/acmesh-official/acme.sh/wiki/dnsapi#11-use-aliyun-domain-api-to-automatically-issue-cert

访问阿里云RAM 访问控制,安全起见使用子用户AccessKey,选择创建用户,为acme.sh单独创建用户,访问方式选择Open API调用访问,

创建成功后会显示AccessKeyID和AccessKeySecret,保存好这两段字符,可下载CSV文件保存到本地,并注意安全防止泄露

设置变量来让acme.sh使用,信息会被保存在~/.acme.sh/account.conf文件中

1
2
export Ali_Key="AccessKeyID"
export Ali_Secret="AccessKeySecret"

设置完成后开始签署RSA证书,采用2048位的RSA密钥,证书包含二级根域名以及三级通配符域名,2048位密钥已可以满足绝大部分情况下的使用需求,

1
2
acme.sh --issue --dns dns_ali -d koalarong.com -d "*.koalarong.com" -k 2048
#注意替换为你的域名

等待脚本完成证书签署后会提示各文件保存位置

1
2
3
4
[Thu 27 Jan 2022 02:26:49 PM CST] Your cert is in: /home/koalarong/.acme.sh/koalarong.com/koalarong.com.cer #证书文件
[Thu 27 Jan 2022 02:26:49 PM CST] Your cert key is in: /home/koalarong/.acme.sh/koalarong.com/koalarong.com.key #私钥文件
[Thu 27 Jan 2022 02:26:49 PM CST] The intermediate CA cert is in: /home/koalarong/.acme.sh/koalarong.com/ca.cer #中间链证书
[Thu 27 Jan 2022 02:26:49 PM CST] And the full chain certs is there: /home/koalarong/.acme.sh/koalarong.com/fullchain.cer #含中间链的证书文件

之后签署ECC证书,采用256位的ECC密钥,安全性相当于3072位的RSA密钥

1
acme.sh --issue --dns dns_ali -d koalarong.com -d "*.koalarong.com" -k ec-256

签署完成后同样会提示各文件保存位置

1
2
3
4
[Thu 27 Jan 2022 02:43:52 PM CST] Your cert is in: /home/koalarong/.acme.sh/koalarong.com_ecc/koalarong.com.cer
[Thu 27 Jan 2022 02:43:52 PM CST] Your cert key is in: /home/koalarong/.acme.sh/koalarong.com_ecc/koalarong.com.key
[Thu 27 Jan 2022 02:43:52 PM CST] The intermediate CA cert is in: /home/koalarong/.acme.sh/koalarong.com_ecc/ca.cer
[Thu 27 Jan 2022 02:43:52 PM CST] And the full chain certs is there: /home/koalarong/.acme.sh/koalarong.com_ecc/fullchain.cer

至此证书文件全部签署完成

3、安装证书至Nginx

根据官方文档,进行证书的安装,会自动将证书文件安装到指定目录,并每60天更新一次,其中 –reloadcmd 较为重要,执行定时任务时会运行此命令,重新启动Web服务器,达到更新证书的目的,下面是在我的服务器上使用Docker运行Nginx的安装命令

1
2
3
4
acme.sh --install-cert -d koalarong.com -d "*.koalarong.com" \
--key-file ~/webapp/nginx/cert.d/koalarong.com.rsa.key \
--fullchain-file ~/webapp/nginx/cert.d/koalarong.com.rsa.cer \
--reloadcmd "docker exec docker-nginx nginx -s reload"

ECC证书同理

1
2
3
4
acme.sh --install-cert -d koalarong.com -d "*.koalarong.com" --ecc \
--key-file ~/webapp/nginx/cert.d/koalarong.com.ecc.key \
--fullchain-file ~/webapp/nginx/cert.d/koalarong.com.ecc.cer \
--reloadcmd "docker exec docker-nginx nginx -s reload"

如果为第一次安装,需要修改Nginx配置,配置如下

1
2
3
4
5
6
7
8
9
10
server {
......

ssl_certificate /etc/nginx/cert.d/koalarong.com.rsa.cer;
ssl_certificate_key /etc/nginx/cert.d/koalarong.com.rsa.key;
ssl_certificate /etc/nginx/cert.d/koalarong.com.ecc.cer;
ssl_certificate_key /etc/nginx/cert.d/koalarong.com.ecc.key;

......
}

重新登录网站可以看到证书已完成更新

使用现代浏览器访问,公钥为256位ECC

由于找不到上古版本的浏览器,暂时无法演示RSA证书

参考链接:

开始使用 ECC 证书

acme.sh部署RSA、ECC双证书(使用阿里云API)

使用acme.sh为网站部署RSA与ECC通配符证书

https://blog.koalarong.com/posts/37bf4901.html

作者

Koala Rong

发布于

2022-01-27

许可协议

评论