2024年 SSL 安全证书免费申请方法,非自签证书,含自动续签,nodejs提取续签日志

注意1:

如果一个域名一定时间内申请超过5次,会被锁定至少1周时间,还有就是一个IP一天太频繁发起安全证书,也有可能被锁订单

前提条件

需要将要认证ssl的域名配置nginx的80端口,域名解析到指定的服务器IP,否则无法认证。

服务器测试环境

CentOS7.9 的nginx,域名是 ssl.域名.com

步骤

  1. 安装EPEL和Certbot: 先安装EPEL存储库,然后安装Certbot和Certbot Nginx插件。
sudo yum install epel-release -y
sudo yum install certbot python2-certbot-nginx -y
  1. 运行Certbot: 使用Certbot获取并安装SSL证书,指定域名为 ssl.域名.top。
    当然,您可以使用命令行选项一次性执行Certbot命令,以避免交互式输入。以下是修改后的Certbot命令,其中包含所有必要的信息:
sudo certbot certonly --standalone -d ssl.域名.com --non-interactive --agree-tos --email 88888888@qq.com

在这个命令中:
● --non-interactive 选项使Certbot以非交互模式运行。
● --agree-tos 选项表示您同意Let’s Encrypt的服务条款。
● --email 88888888@qq.com 用您的电子邮件地址,以接收证书过期提醒等通知。
如果Nginx配置没有问题并且已经正确安装,您可以继续进行以下步骤配置Nginx使用生成的证书。

● 指定证书保存路径:
● 默认情况下,Certbot会将证书保存到 /etc/letsencrypt/live/ssl.域名.com/ 目录中。这个路径包括以下文件:
● fullchain.pem:完整的证书链
● privkey.pem:私钥
● cert.pem:证书
● chain.pem:CA证书链

nginx配置

# 自申请安全证书
server {
    listen 443 ssl;
    server_name ssl.域名.com;  # 更改为你的域名

    ssl_certificate /etc/letsencrypt/live/ssl.域名.com/fullchain.pem;  # 证书链文件
    ssl_certificate_key /etc/letsencrypt/live/ssl.域名.com/privkey.pem;  # 私钥文件

    ssl_session_timeout 1d;
    ssl_session_cache shared:MozSSL:10m;  # 可以使用 Mozilla 的推荐设置

    # SSL 配置-安全设置
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384';
    ssl_prefer_server_ciphers on;

    # 启用 HSTS(可选,但推荐)
    # 添加这个头部可以让浏览器记住通过 HTTPS 而不是 HTTP 访问站点
    add_header Strict-Transport-Security "max-age=63072000" always;

    # 其它配置...
    location / {
        root /var/www/html;  # 确认你的网站文件存放路径
        index index.html index.htm;
    }
}

重启nginx后,查看网站和证书
在这里插入图片描述

设置自动续签

自动续签通常通过设置一个定时任务(cron job)来实现。这是一个常见的设置例子:

编辑 crontab

crontab -e
进入后,在最后一行加上下面的执行语句和备注

# 添加下面这行到 crontab 中,让 Certbot 每天两次检查并续签证书,实际上1天检查一次就够了
0 */12 * * * certbot renew --quiet

然后保存

这个 cron job 会每 12 小时运行一次 certbot renew 命令,自动检查所有证书,并尝试续签那些即将过期的证书。使用 --quiet 参数可以减少命令输出,只在重要时刻通知用户。

注意事项
确保服务器的防火墙和安全设置允许 Certbot 进行必要的外部连接,尤其是到 Let’s Encrypt 的服务器。
如果你的网站配置发生变化,可能需要更新 Certbot 的验证设置。
使用自动续签时,应定期检查日志文件以确保续签过程中没有错误发生。

工作原理
自动检查:Certbot 会自动检查每个证书的到期时间,并确定是否需要续签。
续签所有证书:如果任何证书在下次运行时将在接近到期(通常是 30 天内),Certbot 会自动尝试续签。
无需额外配置:这个 cron job 不需要为每个域名进行单独配置。它适用于 Certbot 管理的所有证书。

确认设置
你可以通过以下命令手动运行一次续签命令来确认设置是否生效,并查看是否有任何错误或需要手动解决的问题:

certbot renew --dry-run

这个 --dry-run 选项会模拟续签过程而不会实际更新任何证书,它用来确保你的续签过程可以正常运行。

日志和监控
日志文件:Certbot 的操作会生成日志文件,通常位于 /var/log/letsencrypt 目录下。定期检查这些日志可以帮助你了解续签过程中的任何问题。

监控续签状态:建议你也设置一些监控措施来确保重要域名的证书确实被续签,如使用外部服务监控 HTTPS 状态或编写简单的脚本检查证书有效期。

在这里插入图片描述
从日志输出中可以看到,在执行 certbot renew --dry-run 的过程中,有一个证书续签成功,另一个失败。失败的主要原因是 Certbot 无法找到或执行 Nginx 的二进制文件。其他失败情况请自行寻找原因。

nodejs 获取哪些域名续签失败或不需要续签的域名信息

Certbot 日志保存在以下路径

/var/log/letsencrypt/letsencrypt.log

编写nodejs代码

const fs = require('fs');
const path = require('path');
//日志文件保存
const filePath = "node_log.txt";
// Certbot日志文件路径
const logFilePath = '/var/log/letsencrypt/letsencrypt.log';
// 读取日志文件内容
const output = fs.readFileSync(logFilePath, 'utf8');
// 解析需要记录的信息
const lines = output.split('\n');
const importantLines = lines.filter(line => line.includes('expires on') || line.includes('parsefail'));
// 写入文件
const logContent = importantLines.join('\n') + '\n';
fs.writeFileSync(filePath, logContent, {
	flag: 'a'
});
console.log(`Certbot信息已保存到 ${filePath}`);

运行以上代码后,保存提取的日志记录到当前目录的node_log.txt 文件,内容如下

2024-08-26 15:02:01,702:DEBUG:certbot.display.util:Notifying user:   /etc/letsencrypt/live/ssl.yczl.top/fullchain.pem expires on 2024-11-22 (skipped)
2024-08-26 15:02:01,702:DEBUG:certbot.display.util:Notifying user:   /etc/letsencrypt/renewal/ssl.iplan.top.conf (parsefail)

至此,可以根据提前的日志信息,改造自己的nodejs代码,可以用于记录每个域名的过期时间或是否续签成功的情况,方便管理

(结束)

  • 7
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值