阿里云服务器 使用Certbot申请免费 HTTPS 证书及自动续期

前言

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

### 实现阿里云SSL证书的自动续期配置 #### 使用 Certbot 和 Aliyun CLI 进行 SSL 证书自动续期 为了实现阿里云 SSL 证书的自动续期,可以采用 `Certbot` 结合 `Aliyun DNS API` 的方式来完成这一过程。具体来说: 安装必要的工具包是第一步,在此过程中需要先部署 `aliyun cli` 工具以及 `certbot-dns-aliyun` 插件[^1]。 ```bash pip install --upgrade pip pip install certbot-dns-aliyun ``` 接着设置环境变量以便于后续操作中调用阿里云API接口所需的身份验证信息。 ```bash export ALIBABA_CLOUD_ACCESS_KEY="your-access-key" export ALIBABA_CLOUD_SECRET_KEY="your-secret-key" ``` 申请新的 SSL 证书可以通过执行如下命令来进行,这里指定了域名解析服务商为阿里云DNS,并设置了相应的参数用于指定要保护的具体域名单元。 ```bash certbot certonly \ --dns-aliyun \ --dns-aliyun-propagation-seconds 60 \ -d example.com -d www.example.com ``` 对于已经存在的证书文件夹路径 `/etc/letsencrypt/live/example.com/` 下面包含了私钥和公钥等重要资料,这些都将被用来配合Nginx或其他Web服务器软件一起工作以提供HTTPS服务支持。 为了让整个流程更加自动化,还可以编写一个简单的脚本来定期检查并尝试更新现有的SSL证书。通常情况下会将此类任务安排到系统的定时任务计划当中去执行,比如Linux下的Cron Jobs就是一种非常方便的选择之一。 编辑crontab文件加入下面这行代码可以让系统每天凌晨两点钟自动检测是否有可用的新版证书可供替换旧版本使用。 ```bash 0 2 * * * /usr/bin/certbot renew --quiet && systemctl reload nginx ``` 上述命令不仅实现了对Let's Encrypt颁发给我们的短期有效期SSL凭证的有效管理;同时也确保了当有新版本发布时能及时获取最新安全补丁从而更好地维护站点安全性。 最后需要注意的是自2023年起,阿里云官方已将其所提供的免费型SSL产品生命周期缩短至90天以内,因此建议广大开发者朋友们尽早规划好各自的证书轮换策略以免影响线上业务正常运转[^2]。 通过以上介绍的方法,可以有效地简化SSL证书管理和维护的工作量,提高效率的同时也增强了网站的安全防护能力[^3]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值