acme.sh生成免费SSL证书
acme.sh 实现了 acme 协议,可以从 ZeroSSL,Let's Encrypt 等 CA 生成免费的证书
安装
curl https://get.acme.sh | sh -s email=user@abc.com
安装服务器位于中国大陆境内, 访问 github 可能会不成功. 所以安装可能会失败.
推荐从这里下载安装:
https://gitee.com/neilpang/acme.sh
安装步骤:
| Bash |
|---|
| git clone https://gitee.com/neilpang/acme.sh.git
cd acme.sh
./acme.sh --install -m user@abc.com
|
更新版本
acme.sh --upgrade
使用免费平台
我使用的是51SSL: https://www.51ssl.com
其他不演示,登录注册,找到ACME模块,配置域名授权

在ACME客户端那里,找到专属地址: https://acme.51ssl.com/v2/DV90/directory/0ehxxxxxxxxxxx5lzuo
申请证书
| Bash |
|---|
| acme.sh --issue \
-d abc.cn -d *.abc.cn \
--dns dns_dp \
--server https://acme.51ssl.com/v2/DV90/directory/0ehxxxxxxxxxxx5lzuo
|
部署到nginx
| Bash |
|---|
| acme.sh --install-cert -d abc.cn -d *.abc.cn \
--key-file /usr/local/openresty/nginx/ssl/abc.cn.key \
--fullchain-file /usr/local/openresty/nginx/ssl/abc.cn.pem \
--reloadcmd "/usr/local/openresty/nginx/sbin/nginx -s reload"
|
- 路径
/usr/local/openresty/nginx/ssl/是存放证书的位置,也可以直接安装到nginx目录
- 如果nginx是集群模式,还需要将
/usr/local/openresty/nginx/ssl/目录下证书copy到其他nginx主机
配置定时任务,更新证书
| Bash |
|---|
| # crontab -l
56 * * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null
|
手动更新, --force 可以强制更新
"/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" --force
其他命令
查看所有证书
acme.sh --list
查看证书信息
acme.sh --info -d abc.cn

删除证书
acme.sh --remove -d abc.cn
修改reload地址
如果需要修改nginx的重启命令,可以通过修改证书文件的Le_ReloadCmd
修改--reloadcmd的命令,配置文件/root/.acme.sh/abc.cn_ecc/abc.cn.conf

Le_ReloadCmd='__ACME_BASE64__START_L3Vzci9sb2NhbC9vcGVucmVzdHkvbmdpbngvc2Jpbi9uZ2lueCAgLXMgcmVsb2Fk__ACME_BASE64__END_'
使用base64编码存储,这里演示一下解码过程, 注意截取的编码从START__之后开始,__之前结束
解码:
| Bash |
|---|
| echo 'L3Vzci9sb2NhbC9vcGVucmVzdHkvbmdpbngvc2Jpbi9uZ2lueCAgLXMgcmVsb2Fk' | base64 -d
|
将新的重载命令进行base64编码
| Bash |
|---|
| echo -n "nginx -s reload" | base64
|

修改配置文件
vim /root/.acme.sh/abc.cn_ecc/abc.cn.conf
Le_ReloadCmd='__ACME_BASE64__START_bmdpbnggLXMgcmVsb2Fk__ACME_BASE64__END_'
重新查看证书信息

nginx配置SSL
| Bash |
|---|
| server {
listen 443 ssl;
server_name test.abc.cn;
ssl_certificate /usr/local/openresty/nginx/ssl/abc.cn.pem;
ssl_certificate_key /usr/local/openresty/nginx/ssl/abc.cn.key;
ssl_session_timeout 30m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://172.26.32.59:8080;
proxy_redirect off;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 50m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
fastcgi_param CONTENT_LENGTH $content_length;
}
}
|