说明

阿里云的证书有效期是90天,且只能手动续期,Let’s Encrypt虽然也为90天,但是可以一键续期,这样的话就相当于永久有效了,不用再去手动操作

要从Let’s Encrypt获得证书,您需要选择一个要使用的 ACME 客户端软件。 例如官方推荐的客户端 Certbot 、或者使用得最多的 acme.sh

这里使用acme.sh来实现

安装acme.sh

安装参见acmesh-official/acme.sh

中文文档

一键安装命令curl https://get.acme.sh | sh -s email=my@example.com安装完成后会在用户目录下生成acme.sh文件夹,就是程序位置了

由于国内有时候并不能访问github,因此,国内就不能用acme.sh的一键安装了。

需要配置IP

vim /etc/hosts

1
2
185.199.108.133 https://raw.githubusercontent.com
192.30.255.112 https://github.com

或者国内的gitee,通过git clone的方式
git clone https://gitee.com/neilpang/acme.sh.git

引用

如果没有git命令,则需要安装gityum install git

部署

阿里云部署

申请阿里解析

申请完成后记得保存 秘钥,以后就查询不到了

申请完成

点击用户登录名称,进去配置

点击权限管理,新增授权

6b2463219330ad07495e7f1f7978d329

权限策略处搜索DNS,选择AliyunDNSFullAccess 系统策略 管理云解析(DNS)的权限

b084de60a751ea943726a356bea99d24

然后点击确认授权

申请证书

执行命令

1
acme.sh --issue --server letsencrypt --dns dns_ali -d '*.lqingyu.com'

申请好的域名相关的证书会放在工程目录下的域名对应的文件夹中,如我的*.lqingyu.com 文件夹

1afd47468cceac3b0d1495b014fa0b1e

在acme中还搜集了其他的不少可以一键部署的, 可以参考官方的使用方法 How to use DNS API
最终都会配置在工程路径下的account.conf

普通域名部署

有的没有自动部署API的,就只能手动部署了,以后快过期了也需要手动执行

申请证书

  • 首先执行acme.sh --issue --server letsencrypt --dns -d '*.liukewen.cn' --yes-I-know-dns-manual-mode-enough-go-ahead-please(可以看下是否需要添加 –nginx参数),这里会生成 dns解析需要的配置DomainTXT value,在域名解析里面配置好
  • 然后再执行acme.sh --renew -d '*.liukewen.cn' --yes-I-know-dns-manual-mode-enough-go-ahead-please(可以看下是否需要添加 –nginx参数) ,就会生成成功

5c6b6a72eb4b9e173d029ba603e88f12

b3497ef99aecde45c5fe52e15dcd3011

解析到Nginx中

执行以下命令,将秘钥文件复制到Nginx配置路径下(自定义路径,后面需要找到这文件)

1
2
3
4
acme.sh --install-cert -d '*.liukewen.cn' \
--key-file '/etc/nginx/cret/all.liukewen.cn.key.pem' \
--fullchain-file '/etc/nginx/cret/all.liukewen.cn.cert.pem' \
--reloadcmd "service nginx force-reload"

其中key-file是key的文件,fullchain-file是cert的文件

(一个小提醒, 这里用的是 service nginx force-reload, 不是 service nginx reload, 据测试, reload 并不会重新加载证书, 所以用的 force-reload)
Nginx 的配置 ssl_certificate 使用 /etc/nginx/ssl/fullchain.cer ,而非 /etc/nginx/ssl/.cer ,否则 SSL Labs 的测试会报 Chain issues Incomplete 错误。

在Nginx的 nginx.conf中需要使用https的地方配置这两个文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
server {
listen 443 ssl;

server_name a.liukewen.cn;

ssl_certificate /etc/nginx/cret/all.liukewen.cn.cert.pem;
ssl_certificate_key /etc/nginx/cret/all.liukewen.cn.key.pem;

ssl_session_cache shared:SSL:10m;
ssl_session_timeout 5m;

ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;

ssl_prefer_server_ciphers on;

location / {
root /root/kewen-own/web/dist;

#设置虚拟主机默认访问的网页
index index.html index.htm;
}
}

引用

自动化部署证书 acme.sh 使用教程

https://github.com/acmesh-official/acme.sh