使用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"

### 如何在 Navicat 中为 MySQL 表添加外键 在外键管理方面,Navicat 提供了图形化界面以及 SQL 语句两种方式来实现外键的创建。以下是具体的操作说明: #### 图形化界面操作 通过 Navicat 的图形化界面可以方便地设置外键约束。以 `t_blog` 和 `t_blogType` 表为例,假设需要将 `t_blog.typeID` 设置为外键并关联到 `t_blogType.id`。 1. **打开表设计视图** 在 Navicat 中右键点击目标表(如 `t_blog`),选择“设计表”。这将进入表的设计模式[^4]。 2. **访问外键配置选项** 在表设计器窗口中找到“外键”标签页,通常位于底部或右侧工具栏。点击该标签页即可查看当前表已有的外键列表,并允许新增外键定义。 3. **填写外键参数** 新增一条记录用于描述新的外键关系: - **名**: 此处可留空,系统会在保存时自动生成唯一名称。 - **栏位**: 填写要设为外键的目标字段,即 `typeID`。 - **参考数据库**: 如果涉及跨库,则需指定;否则默认本数据库。 - **参考表**: 输入被参照的主表名称,此处应填入 `t_blogType`。 - **参考栏位**: 被参照的具体字段,对应于上述例子中的 `id` 字段。 - **删除时**: 定义当主表数据被删除时的行为。例如可以选择 `SET NULL` 或其他策略。 - **更新时**: 设定主表数据更改后的响应动作,比如采用 `CASCADE` 实现同步修改。 完成以上步骤后确认提交变更即可生效。 #### 使用 SQL 语句手动添加 对于熟悉 SQL 编程的人来说,也可以直接运行命令行脚本来达成相同目的。下面给出一段标准语法作为示范: ```sql ALTER TABLE t_blog ADD CONSTRAINT fk_tblog_type FOREIGN KEY (typeID) REFERENCES t_blogType(id) ON DELETE SET NULL ON UPDATE CASCADE; ``` 此条指令的作用在于向现有表格 `t_blog` 添加一个新的名为 `fk_tblog_type` 的外键限制条件,它绑定的是本地域内的另一个对象——`t_blogType` 表里的 `id` 列[^1]^。 需要注意存储引擎的选择会影响能否正常使用这些功能。只有基于 InnoDB 构建的数据集才全面兼容此类复杂的引用完整性机制[^2]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值