前言
Certbot是一款免费且开源的自动化安全证书管理工具,由电子前沿基金会(EFF)开发和维护,是在Linux、Apache和Nginx服务器上配置和管理SSL/TLS证书的一种机制。Certbot可以自动完成域名的认证并安装证书。
一、 安装软件
1.1安装 Certbot
yum install epel-release -y
yum install certbot -y
如果提示
需要重新安装 python-urllib3
此时需要将原来的 Python 文件备份,或者删除,这里使用了备份
mv /usr/lib/python2.7/site-packages/urllib3/packages/ssl_match_hostname /usr/lib/python2.7/site-packages/urllib3/packages/ssl_match_hostname.bak
然后再执行安装 python-urllib3
yum install python-urllib3 -y
成功之后:
二、生成证书
域名分为主域名和泛域名;例如百度主域名为: baidu.com ; 百度其他的二级域名的泛域名为: *.baidu.com
执行以下命令生成证书:
# 泛域名:
certbot certonly -d *.使用自己的域名替换.com --manual --preferred-challenges dns
# 主域名:
certbot certonly -d 使用自己的域名替换.com --manual --preferred-challenges dns
会提示你输入邮箱,用来做想过通知,尽量使用自己的邮箱就行,不建议乱输入
一直点 y 同意使用协议,同意邮箱接收信息,然后会提示需要 配置 DNS TXT 解析记录
我这儿是阿里云,阿里云配置 DNS TXT 解析记录如下:
进入阿里云控制中心 ——》 找到域名解析设置 ——》 添加新纪录 :
记录类型选择 TXT-文本
主机记录填入控制台提供的二级域名: _acme-challenge
解析请求来源选择默认
记录值填入上面控制台打印出来的记录值: v4fa*********************8AoIeM(使用自己控制台的值,不要复制文档,文档仅供参考)
然后 保存,等待生效即可
配置好之后,按回车继续
等待结果相应:
此时,证书就已经生成成功了,但是只有三个月有效期
三、配置ngnix
我的域名都是使用ngnix反向代理的,所以这里就使用ngnix最配置
server {
listen 443 ssl;
server_name www.test.替换自己的域名.cn test.替换自己的域名.cn;
# ssl证书地址
ssl_certificate /etc/letsencrypt/live/yunyechuang.cn/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/yunyechuang.cn/privkey.pem;
# ssl验证相关配置
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;
ssl_prefer_server_ciphers on;
# 反向代理的服务
location /secretWJJ {
proxy_pass http://127.0.0.1:7011;
}
}
在 ngnix 目录下执行
# 检查NGINX配置是否正确
./sbin/nginx -t
文件正确,重启 NGINX
./sbin/nginx -s reload
使用 https 协议 再次访问你的域名,发现链接已经是安全的了
四、续期
Certbot 是使用的Let’s Encrypt申请的免费证书,只有 3 个月的有效期,到期之后我们需要再次续期才能继续使用 HTTPS 协议。
4.1 手动续期
你需要自己记录证书到期的时间,在证书到期之前,从新生成一个新的证书
certbot certonly -d *.替换自己的域名.com --manual --preferred-challenges dns
然后根据步骤三中的 DNS TXT 解析 步骤再配置一次即可,证书保存位置没有变化的话,NGNIX 不需要更新配置。
4.2 自动续期(待验证)
每次都手动配置 DNS 解析挺麻烦的,而且还容易遗忘,更新不及时容易造成服务崩坏。
certbot 提供了一个 hook,可以编写一个 Shell 脚本,在需要续期的时候让脚本调用 DNS 服务商的 API 接口动态添加 TXT 记录,验证完成后再删除此记录,达到自动续期的效果。
我使用的是阿里云服务,找到 justjavac 大神写好的脚本:
GitHub 项目 certbot-dns-aliyun
项目地址: https://github.com/justjavac/certbot-dns-aliyun
安装和使用指南大神在README 中有详细说明,一下部分内容也是从 README 中复制过来的(如有侵权请联系本人,立马删除)
4.2.1 使用 上诉脚本,需要配置阿里云凭证信息
点击阿里云头像 ——》 控制访问 ——》创建一个拥有DNS权限的用户
这个用户不用太多权限,所以有 OpenAPI 的调用访问即可
创建完成后,在用户界面能看到 用户对应的AccessKey ID和AccessKey Secret了(注意,记得保存这两个值,界面更新AccessKey Secret会消失),如果没有保存导致这两个值消失,点击新创建的用户名称,进入详情页,创建新的来替代
刷新界面后,可为用户添加权限
权限只需要有 阿里云的DNS 操作权限即可
进入阿里云主机控制台
1) 安装 aliyun cli 工具
wget https://aliyuncli.alicdn.com/aliyun-cli-linux-latest-amd64.tgz
tar xzvf aliyun-cli-linux-latest-amd64.tgz
sudo cp aliyun /usr/local/bin
rm aliyun
2) 将拥有 DNS 权限的角色配置到云服务器中
cd aliyun /usr/local/bin
aliyun configure --profile akProfile
配置会进入交互式内容,如下输入完成配置:
Configuring profile 'akProfile' in '' authenticate mode...
Access Key Id []: 在这里输入刚新建角色的 Access Key 然后回车进入下一项
Access Key Secret []: 在这里输入刚新建角色的 Access Key Secret 然后回车进入下一项
Default Region Id []: cn-hangzhou
Default Output Format [json]: json (Only support json))
Default Language [zh|en] en:
Saving profile[akProfile] ...Done.
出现如下界面,配置完成:
4.2.2 安装 certbot-dns-aliyun 插件
wget http://cdn.jsdelivr.net/gh/justjavac/certbot-dns-aliyun@main/alidns.sh
sudo cp alidns.sh /usr/local/bin
sudo chmod +x /usr/local/bin/alidns.sh
sudo ln -s /usr/local/bin/alidns.sh /usr/local/bin/alidns
rm alidns.sh
4.2.3 测试是否能正确申请
certbot certonly -d *.替换自己的域名.com --manual --preferred-challenges dns --manual-auth-hook "alidns" --manual-cleanup-hook "alidns clean" --dry-run
正式申请时去掉 --dry-run 参数:
certbot certonly -d *.example.com --manual --preferred-challenges dns --manual-auth-hook "alidns" --manual-cleanup-hook "alidns clean"
证书续期
certbot renew --manual --preferred-challenges dns --manual-auth-hook "alidns" --manual-cleanup-hook "alidns clean" --dry-run
自动续期,添加定时任务 crontab。
crontab -e
输入
1 1 */1 * * root certbot renew --manual --preferred-challenges dns --manual-auth-hook "alidns" --manual-cleanup-hook "alidns clean" --deploy-hook "nginx -s reload"
end
你还没有服务器和域名,感觉买个试试:
阿里云服务爆款特惠 https://www.aliyun.com/minisite/goods?userCode=6ccum0sw
如果还没有云服务,却想练练手的,可以尝试阿里云的试用服务器:
阿里云免费试用 https://free.aliyun.com?userCode=6ccum0sw