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; 
}

最终效果

最终效果如图 效果图