使用Certbot申请免费 HTTPS 证书及自动续期

原文

前言

Certbot是一款免费且开源的自动化安全证书管理工具,由电子前沿基金会(EFF)开发和维护,是在Linux、Apache和Nginx服务器上配置和管理SSL/TLS证书的一种机制。Certbot可以自动完成域名的认证并安装证书。

一、 安装软件
1.1安装 Certbot
yum install epel-release -y
yum install certbot -y

如果提示

img

需要重新安装 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

成功之后:

img

二、生成证书

域名分为主域名和泛域名;例如百度主域名为: baidu.com ; 百度其他的二级域名的泛域名为: *.baidu.com
执行以下命令生成证书:

# 泛域名:
certbot certonly -d *.使用自己的域名替换.com --manual --preferred-challenges dns
 
# 主域名:
certbot certonly -d 使用自己的域名替换.com --manual --preferred-challenges dns

会提示你输入邮箱,用来做想过通知,尽量使用自己的邮箱就行,不建议乱输入

img

一直点 y 同意使用协议,同意邮箱接收信息,然后会提示需要 配置 DNS TXT 解析记录

img

我这儿是阿里云,阿里云配置 DNS TXT 解析记录如下:

进入阿里云控制中心 ——》 找到域名解析设置 ——》 添加新纪录 :
记录类型选择 TXT-文本
主机记录填入控制台提供的二级域名: _acme-challenge
解析请求来源选择默认
记录值填入上面控制台打印出来的记录值: v4fa*********************8AoIeM(使用自己控制台的值,不要复制文档,文档仅供参考)
然后 保存,等待生效即可

img

配置好之后,按回车继续
等待结果相应:

img

此时,证书就已经生成成功了,但是只有三个月有效期

三、配置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

img

文件正确,重启 NGINX

./sbin/nginx -s reload

使用 https 协议 再次访问你的域名,发现链接已经是安全的了

img

四、续期

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 的调用访问即可

img

创建完成后,在用户界面能看到 用户对应的AccessKey ID和AccessKey Secret了(注意,记得保存这两个值,界面更新AccessKey Secret会消失),如果没有保存导致这两个值消失,点击新创建的用户名称,进入详情页,创建新的来替代

img

刷新界面后,可为用户添加权限

img

权限只需要有 阿里云的DNS 操作权限即可

img

进入阿里云主机控制台
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.

出现如下界面,配置完成:

img

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"

### 在 LNMP 环境中使用 Certbot 申请和配置 SSL 证书 #### 准备工作 确保服务器已正确安装并运行 Nginx 和其他组件。对于 MySQL 的安装过程中遇到依赖缺失的情况,可以按照提示通过 `yum install perl` 来解决相关问题[^1]。 #### 安装 Certbot 及其插件 为了简化操作流程,在 CentOS 或 RHEL 类系统上推荐采用 EPEL 源来获取最新版本的 Certbot 工具及其 Nginx 插件: ```bash sudo yum install epel-release sudo yum install certbot python2-certbot-nginx ``` #### 获取 SSL 证书 执行命令让 Certbot 自动完成域名验证以及证书签发过程,并自动修改 Nginx 配置文件以启用 HTTPS 访问: ```bash sudo certbot --nginx -d example.com -d www.example.com ``` 注意需将上述命令中的 domain 替换成实际使用的域名。 #### 测试与验证 重启 Nginx 服务使更改生效之后,可以通过浏览器访问 https://example.com 来测试新部署的 SSL 连接是否正常工作。同时也可以利用在线工具如 SSLLabs 对站点安全性进行全面评估。 #### 设置定期更新机制 Let's Encrypt 发放的免费证书有效期只有三个月左右,因此建议设定定时任务来自动化续订流程: ```bash echo "0 3 * * * root /usr/bin/certbot renew --quiet" | sudo tee -a /etc/crontab > /dev/null ``` 此条目表示每天凌晨三点钟尝试刷新即将过期的证书。 #### 修改现有 Nginx 配置支持强制跳转至 HTTPS 为了让用户始终能够通过安全连接浏览网页,可以在原有基础上加入如下指令到 server 块内部: ```nginx server { listen 80; server_name example.com; # Redirect all HTTP requests to HTTPS with a permanent redirect. return 301 https://$host$request_uri; } ``` 这样当有人试图通过 http 方式打开页面时会被重定向到对应的 https 地址上去。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值