免费泛域名证书获取
let’s encrypt由ISRC公益组织发起, 提供免费的开放的证书签发服务, 并且得到了包括Mozilla, Cisco, Chrome等公司或机构的支持. 目前它也支持签发泛域名证书
使用acme.sh
申请let’s encrypt证书最简单的方式是通过acme.sh
. acme.sh
是国人开发的shell脚本, 能够通过调用域名商API的方式自动生成dns txt解析实现域名鉴权, 相对于官方的certbot的方式更加傻瓜化.(其实官方的certbot已经足够自动化了, 有兴趣不妨试试)
使用acme.sh
之前最好切换到非管理员用户
获取acme.sh
curl https://get.acme.sh | sh
执行以上指令后会在用户home目录下创建.acme.sh
目录, 并将目录下的脚本alias为acme.sh
获取域名商接口Key和密钥
这里以从阿里云购买的grunmin.tech域名为例 进入阿里云api接口页面, 复制api key和密钥到shell
export Ali_Key=""
export Ali_Secret=""
开始获取
acme.sh --issue --dns dns_cx -d grunmin.tech -d *.grunmin.tech
记得不能只是一个通配域名, 两个域名都必须输入, 否则可能会出现验证不通过问题
通过之后根据输出可以看到证书文件存放在~/.acme.sh/grunmin.tech/
目录下, 输出如下
Your cert is in /home/grunmin/.acme.sh/grunmin.tech/grunmin.tech.cer
Your cert key is in /home/grunmin/.acme.sh/grunmin.tech/grunmin.tech.key
The intermediate CA cert is in /home/grunmin/.acme.sh/grunmin.tech/ca.cer
And the full chain certs is there: /home/grunmin/.acme.sh/grunmin.tech/fullchain.cer
执行该指令时候, crontab会自动添加一个计划任务到用户的crontab, 以定期更新证书(证书只有90天有效期).
安装证书
此时再执行
acme.sh --installcert -d grunmin.tech --key-file /etc/nginx/ssl/grunmin.tech.key --fullchain-file /etc/nginx/ssl/grunmin.tech.cer
将证书安装到指定目录. 这一步的目的的后期证书更新的时候自动拷贝到指定目录
配置反向代理
然后再配置nginx即可, 比如
server {
server_name blog.grunmin.tech;
listen 443 http2 ssl;
ssl on;
ssl_certificate /etc/nginx/ssl/grunmin.tech.cer;
ssl_certificate_key /etc/nginx/ssl/grunmin.tech.key;
root /data/blog/public;
}
最终效果
最终效果如图