Certbot是一款免费且开源的自动化安全证书管理工具,由电子前沿基金会(EFF)开发和维护,是在Linux、Apache和Nginx服务器上配置和管理SSL/TLS证书的一种机制。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最配置
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
./sbin/nginx -s reload
使用 https 协议 再次访问你的域名,发现链接已经是安全的了
Certbot 是使用的Let’s Encrypt申请的免费证书,只有 3 个月的有效期,到期之后我们需要再次续期才能继续使用 HTTPS 协议。
你需要自己记录证书到期的时间,在证书到期之前,从新生成一个新的证书
certbot certonly -d *.替换自己的域名.com --manual --preferred-challenges dns
然后根据步骤三中的 DNS TXT 解析 步骤再配置一次即可,证书保存位置没有变化的话,NGNIX 不需要更新配置。
每次都手动配置 DNS 解析挺麻烦的,而且还容易遗忘,更新不及时容易造成服务崩坏。
certbot 提供了一个 hook,可以编写一个 Shell 脚本,在需要续期的时候让脚本调用 DNS 服务商的 API 接口动态添加 TXT 记录,验证完成后再删除此记录,达到自动续期的效果。
我使用的是阿里云服务,找到 justjavac 大神写好的脚本:
GitHub 项目 certbot-dns-aliyun
项目地址: https://github.com/justjavac/certbot-dns-aliyun
安装和使用指南大神在README 中有详细说明,一下部分内容也是从 README 中复制过来的(如有侵权请联系本人,立马删除)
点击阿里云头像 ——》 控制访问 ——》创建一个拥有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.
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
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"
你还没有服务器和域名,感觉买个试试:
阿里云服务爆款特惠 https://www.aliyun.com/minisite/goods?userCode=6ccum0sw
如果还没有云服务,却想练练手的,可以尝试阿里云的试用服务器:
阿里云免费试用 https://free.aliyun.com?userCode=6ccum0sw