1. 说明
acme.sh 可以方便地快速申请免费 SSL 证书,并且定期自动更新。是非常好用的工具。
我曾经是使用阿里云的免费证书,当时期限是1年,每次手动申请、下载证书、scp上传服务器、重启服务器nginx,非常麻烦。
再加上近期免费证书的期限进一步缩短成了3个月,使这个麻烦进一步扩大。
研究了一下,发现 acme.sh 实在太方便了
2. 配合 nginx 使用
2.1 安装 acme.sh
配合 nginx 使用
首先需要安装 acme.sh
curl https://get.acme.sh | sh
安装完成后,acme.sh
脚本会自动添加到 ~/.acme.sh/
目录中,并自动配置好环境变量。
可以尝试 acme.sh 运行一下看看是否能成功运行。
2.2 邮箱注册
将下方 youremail@gmail.com 替换为你的邮箱后运行
acme.sh --register-account -m youremail@gmail.com
2.3 配置 Nginx
acme可以用域名验证的方式验证域名所有权。
为此需要简单配置一下 nginx 的配置文件(在 /etc/nginx/sites-enabled/ 下,没有可以 vi 建一个)使能够被 SSL 证书颁发方访问到你的域名下的特定验证用的文件
server {
listen 80;
server_name pangruitao.com www.pangruitao.com; # 替换为你的域名
location /.well-known/acme-challenge/ {
root /var/www/html; # 这个目录是 acme.sh 验证时使用的目录
try_files $uri =404;
}
}
重启 nginx 使配置生效
systemctl restart nginx
2.4 申请证书
将下面域名替换为你的后运行
acme.sh --issue -d pangruitao.com -d www.pangruitao.com --webroot /var/www/html
看到以下内容则代表运行成功
2.5 配置证书至 Nginx
个人习惯使用 key 和 pem 两文件。可以用 acme.sh 导出,只需简单运行即可
将下面域名换成你的
acme.sh --install-cert -d pangruitao.com \
--key-file /root/certs/pangruitao.com/pangruitao.com.key \
--fullchain-file /root/certs/pangruitao.com/pangruitao.com.pem \
--reloadcmd "systemctl reload nginx"
最后修改 nginx 配置,使 nginx 的所有流量使用此证书并且都走 https
server {
listen 80;
server_name pangruitao.com www.pangruitao.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name pangruitao.com www.pangruitao.com;
ssl_certificate /root/certs/pangruitao.com/pangruitao.com.pem;
ssl_certificate_key /root/certs/pangruitao.com/pangruitao.com.key;
root /var/www/html;
location /.well-known/acme-challenge/ {
root /var/www/html; # 这个目录是 acme.sh 验证时使用的目录
try_files $uri =404;
}
location / {
try_files $uri $uri/ =404;
}
}
再最后重启一下 nginx
systemctl reload nginx
没意外的话,则应该已经生效了
2.6 自动续期
acme.sh
默认会自动续期证书,你可以在 /var/spool/cron/crontabs/
目录下找到 acme.sh
自动添加的 cron
任务
一般而言希望续期后自动重启 nginx,则需要运行一下
acme.sh --install-cert -d pangruitao.com \
--key-file /root/certs/pangruitao.com/pangruitao.com.key \
--fullchain-file /root/certs/pangruitao.com/pangruitao.com.pem \
--reloadcmd "systemctl reload nginx"
这个安装命令不仅仅会生成证书文件和重启nginx,还会把这些操作自动加到续期任务中