# 前言
阿里云最近发短信给我,提示我之前免费申请的SSL证书要到期了。借此机会,正好将acme.sh配置到服务器上,一劳永逸的解决证书问题。相较于在阿里云上申请证书,使用acme.sh的优势在于可以申请泛域名证书及可以自动续期。
下面我就记录一下我使用的步骤吧。我这里采用的是使用阿里云的API自动进行DNS方式的申请,不同的服务商命令有稍许不同,可以参考官方文档。
# 步骤
-
在阿里云控制台申请api https://ram.console.aliyun.com/users
-
在阿里云的角色控制里赋予刚刚申请的用户控制DNS的权限
AliyunDNSFullAccess
https://ram.console.aliyun.com/permissions -
安装acme.sh
1
curl https://get.acme.sh | sh -s email=my@example.com
-
配置API环境
1 2
export Ali_Key="xxxx" export Ali_Secret="xxxxx"
这里是配置API环境,填入刚刚申请的密钥。这步只需要做一次,acme.sh会将其保存下来。
-
生成证书,这里填入刚刚申请API得到的密钥
1
acme.sh --issue --dns dns_ali -d lbqaq.top -d "*.lbqaq.top"
通过上面命令,可以申请到包含
lbqaq.top
和*.lbqaq.top
这两个DNS记录的证书。这里如果有*
,是需要加双引号的,我之前没加就报错了。 -
复制证书到nginx目录
1 2 3 4
acme.sh --install-cert -d lbqaq.top \ --key-file /usr/local/nginx/conf/cert/lbqaq.top.key \ --fullchain-file /usr/local/nginx/conf/cert/lbqaq.top.pem \ --reloadcmd "nginx -s reload"
这里
key-file
对应的是Nginx配置里的ssl_certificate_key
,fullchain-file
对应的是ssl_certificate
-
接下来修改Nginx配置文件即可
附上我的模板
1 2 3 4 5 6 7 8 9 10 11 12 13 14
#如果不是https就跳转至https if ($server_port !~ 443){ rewrite ^(/.*)$ https://$host$1 permanent; } ssl_certificate ./cert/lbqaq.top.pem; ssl_certificate_key ./cert/lbqaq.top.key; ssl_session_timeout 5m; #表示使用的加密套件的类型。 ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; #表示使用的TLS协议的类型。 ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; add_header Strict-Transport-Security "max-age=31536000";
# 常用命令
在附上一些我用到的一些acme.sh相关的命令。才不是水字数呢
acme.sh --list
查看已申请的证书acme.sh --remove -d example.com
删除指定的证书