给你的域名申请一个泛域名证书
# 简介
你还在为个人域名的证书而烦恼嘛?试试 Let’s Encrypt 吧,它能提供免费的泛域名证书,让你的子域名都能有一个安全的小锁头,非常适合因国内云计算厂商 ssl 证书数量限制而困扰的小伙伴,快来试试吧。
先介绍一下这次主角:letsencrypt.org , 是一个免费的、自动化的、开放的证书颁发机构。截至 2018 年 9 月,它的全球 SSL 证书市场份额已超过 50%,得到主流浏览器和厂商的认可与支持。Let’s Encrypt 证书提供免费的申请,但每次申请到的 SSL 证书有效期只有 90 天,可以通过脚本实现提前自动续约达到自动化永久免费使用的目的。
利用 Let’s Encrypt 免费提供泛域名证书的申请,我们可以借助服务器脚本实现到期续签,自动刷新过期时间。
# 准备
一个域名
一台服务器(用于申请证书以及运行续签脚本)
本教程以申请 aqcoder.cn(腾讯云)以及 notifyou.top(阿里云)的泛域名证书为例
# 下载仓库
下载仓库:
git clone https://github.com/acmesh-official/acme.sh.git
下载仓库 (加速):
git clone https://gitclone.com/github.com/acmesh-official/acme.sh.git
# 上传acme.sh
上传 acme.sh 到服务器 /root 目录,使用 root 用户执行后面的命令(acme.sh 也有说明可以使用其他用户运行,但为确保一些权限问题,先使用 root 用户运行成功,再尝试使用其他用户)
# 执行安装命令
sh acme.sh --install
# 申请阿里云key和Secret
# 配置secretkey和secretid
域名服务商申请 SecretId 和 SecretKey,阿里云的查看这里,腾讯云的查看这里
将上述的 SecretKey 和 SecretId 写到 ~/..bash_profile,保存方法:https://github.com/acmesh-official/acme.sh/wiki/dnsapi
.bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
PATH=$PATH:$HOME/bin
#腾讯云
export DP_Id="A1111111111111111s"
export DP_Key="F11111111111111111b"
#阿里云
export Ali_Key="L1111111111111111111t"
export Ali_Secret="p1111111111111111C"
export PATH
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 申请证书
#腾讯云
sh acme.sh --issue --dns dns_dp -d aqcoder.cn -d *.aqcoder.cn
#阿里云
sh acme.sh --issue --dns dns_ali -d aqcoder.cn -d *.aqcoder.cn
2
3
4
5
出现错误是因为还没有通过 Let’s Encrypt 验证,而 Let’s Encrypt 提供两种方式验证,一个是 HTTP 文件验证,一个是 DNS-API 验证,这里推荐使用 DNS-API 验证
# 添加解析
阿里云添加 TXT 解析
腾讯云添加 TXT 解析
# 重新运行
稍等片刻重新运行,记得添加 --renew 参数
#腾讯云
sh acme.sh --issue --dns dns_dp -d aqcoder.cn -d *.aqcoder.cn --renew
#阿里云
sh acme.sh --issue --dns dns_ali -d aqcoder.cn -d *.aqcoder.cn --renew
2
3
4
5
# 查看定时任务
crontab -e
可以看到,acme.sh 已经生成一个定时任务了
# 拷贝证书
sh acme.sh --install-cert -d aqcoder.cn \
--key-file /etc/ssl/aqcoder.cn/aqcoder.cn.key \
--fullchain-file /etc/ssl/aqcoder.cn/aqcoder.cn.cer \
--reloadcmd 'service nginx force-reload'
#cer证书windows用的比较多
#linux另外一种格式证书
acme.sh --install-cert -d zzppjj.top \
--cert-file /data/acme/zzppjj.top/cert.pem \
--key-file /data/acme/zzppjj.top/key.pem \
--fullchain-file /data/acme/zzppjj.top/fullchain.pem \
--reloadcmd "echo \$(date -d \"\$current\" +%s) > /data/acme/zzppjj.top/time.log"
#另一种创建方式
~/.acme.sh/acme.sh --installcert -d jiasu01.quantchatai.top --key-file /root/cert/jiasu01.key --fullchain-file /root/cert/jiasu01.crt
#crt证书linux系统比较多
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
拷贝证书可以让 acme.sh 申请到的证书复制到指定目录,执行后拷贝证书的操作也会在定时任务中。
# 测试
# 添加解析
# nginx配置
zzppjj.top
#test.aqcoder.cn
server {
listen 80;
server_name test.zzppjj.top;
rewrite ^(.*)$ https://$host$request_uri;
}
server {
listen 443 ssl;
server_name test.zzppjj.top;
ssl_certificate /etc/ssl/aqcoder.cn/aqcoder.cn.cer;
ssl_certificate_key /etc/ssl/aqcoder.cn/aqcoder.cn.key;
ssl_session_cache shared:SSL:4m;
ssl_session_timeout 10m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
charset utf-8;
location / {
proxy_pass http://127.0.0.1:5704;
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 访问成功,出现https安全小锁头
[原文链接](给你的域名申请一个泛域名证书吧 | 枫叶 (opens new window))
# 参考文章
Let’s Encrypt 免费泛域名 SSL 证书申请及自动续签 (opens new window))
第一次使用acme.sh 手动生成证书 (opens new window)
← 网络工具 tcpdump抓包教程→