前言
SSL证书很贵,阿里云更新免费ssl证书策略,每三个月就会过期重签。期望一个免费、方便的SSL证书产品。Let’s Encrypt完美解决此问题。
Let’s Encrypt简介
Let’s Encrypt,知名的证书颁发机构,开放、免费、自动续期,绝大多数浏览器都支持。
前期准备
- centos服务器,安装好nginx
- 阿里云购买域名,并做好解析到服务器
- 在阿里云上建一个用户,添加权限
AliyunDNSFullAccess
即:管理云解析(DNS)的权限,保存AccessKey ID
和AccessKey Secret
备用
下载和安装
常用certbot和acme.sh管理证书,本例使用acme.sh
- 下载
# 下载
wget -O acme.sh-master.tar.gz https://codeload.github.com/acmesh-official/acme.sh/tar.gz/master
# 解压
tar -zxvf acme.sh-master.tar.gz
# 安装
cd acme.sh-master
# 替换你的邮箱
./acme.sh --install -m xx@qq.com
# 查看版本
./acme.sh --version
# 添加bash,方便操作,非必须
alias acme.sh=~/.acme.sh/acme.sh
- 配置阿里云dns信息
# 编辑acme配置
vi /root/.acme.sh/account.conf
增加一下配置,添加阿里云管理dns的访问秘钥
SAVED_Ali_Key='your AccessKey ID'
SAVED_Ali_Secret='your AccessKey Secret'
USER_PATH='/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin'
生成证书并配置nginx
- 生成证书
# 生成证书,可以只生成一个主域名证书,会默认支持二级域名
acme.sh --issue --dns dns_ali -d xxx.com --keylength ec-256
# 如果这里直接写通配符,亲测(踩坑)只支持二级域名
# acme.sh --issue --dns dns_ali -d *.xxx.com
--keylength ec-256
- 安装证书
也就是把证书安装到一个位置
# 此处在安装之后重启了nginx
acme.sh --install-cert -d xxx.com \
--key-file /usr/local/nginx/ssl/xxx.com.key \
--fullchain-file /usr/local/nginx/ssl/fullchain.cer \
--reloadcmd "systemctl reload nginx"
去指定位置/usr/local/nginx/ssl/
即可看到证书。
这里要求nginx被安装未服务
- 配置到nginx
在nginx配置文件中添加ssl配置
server {
listen 443 ssl;
server_name xxx.com www.xxx.com;
ssl_certificate /usr/local/nginx/ssl/fullchain.cer;
ssl_certificate_key /usr/local/nginx/ssl/www.com.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
root html;
index index.html index.htm;
}
}
此处生成的是通配符证书,任何二级域名都可以被认证
特别注意:通配符域名支持二级域名,三级域名需要单独依次生成。
自动续签
默认配置后自动续签,可以查看定时任务。
crontab -l
# 输出
41 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null
验证自动续签
# 1. 强制更新证书
acme.sh --renew -d lisi.fun --force
# 查看nginx状态是否启动
systemctl status nginx
查看输出是否存在reload日志:
发现更新证书的时候,重启了nginx,证书更新也正常。