证书3月一换很麻烦?一行命令让你解放双手

2024-08-26 22:44

本文主要是介绍证书3月一换很麻烦?一行命令让你解放双手,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

证书3月一换很麻烦?一行命令让你解放双手

问题

目前证书的大部分有效期都是3个月(免费),对于我们就需要每次在各大运营商平台进行重新申请,替换秘钥,虽然快到期的时候会提醒,但是还是很麻烦。

建议

如果你的nginx配置文件有多个,比如一个二级域名一个配置文件,我建议使用Certbot的手动模式,这样更好自己去管理

Certbot简介

CertbotCertbot 是一个由 Electronic Frontier Foundation(电子前线基金会,简称 EFF)开发的开源工具,主要用于自动获取和更新 Let’s Encrypt 颁发的 SSL/TLS 证书。它能够帮助网站管理员轻松地为其网站配置 HTTPS,提供更安全的数据传输。

Certbot 的主要功能

  1. 自动化获取证书:Certbot 能够自动与 Let’s Encrypt 交互,验证域名所有权并获取 SSL/TLS 证书。
  2. 自动配置 HTTPS:Certbot 可以自动配置 Web 服务器(如 Apache、Nginx),使其使用新获得的证书提供 HTTPS 服务。
  3. 自动续期:Let’s Encrypt 证书的有效期为 90 天,Certbot 会自动在证书到期前更新它们,确保 HTTPS 服务的持续性。
  4. 支持多种操作系统和 Web 服务器:Certbot 支持多种操作系统(如 Ubuntu、Debian、CentOS 等)和多种 Web 服务器(如 Apache、Nginx)。

使用 Certbot 的基本步骤

  1. 安装 Certbot:根据操作系统和 Web 服务器的类型,使用包管理器或直接下载方式安装 Certbot。
  2. 获取证书:通过 Certbot 命令行工具,指定域名并获取 SSL/TLS 证书。
  3. 配置 Web 服务器:Certbot 可以自动配置 Web 服务器,也可以手动配置。
  4. 测试和验证:确保 Web 服务器正确启用了 HTTPS,并验证证书的有效性。
  5. 自动续期:Certbot 会定期运行并检查证书的有效期,自动续期证书。

适用场景

  • 个人或小型网站:不需要购买商业证书,使用 Let’s Encrypt 提供的免费证书即可。
  • 希望自动管理证书的用户:Certbot 自动化的流程可以节省手动管理证书的时间和精力。

总的来说,Certbot 是一个强大且易于使用的工具,能够帮助网站管理员轻松地为其网站配置和管理 SSL/TLS 证书,提高网站的安全性。

自动配置(可忽略)

在CentOS上使用Certbot为Nginx配置SSL证书并设置自动续签的步骤如下:

1. 安装Certbot

首先,确保系统已更新:

sudo yum update -y

然后,安装EPEL(Extra Packages for Enterprise Linux)存储库:

sudo yum install epel-release -y

接下来,安装Certbot和Nginx插件:

sudo yum install certbot python2-certbot-nginx -y

2. 获取SSL证书

使用Certbot获取SSL证书。这里假设你的域名是example.com,请替换成你的实际域名:

sudo certbot --nginx -d example.com -d www.example.com

在运行此命令时,Certbot会自动配置Nginx以使用生成的SSL证书。按照提示完成域名验证。

3. 验证Nginx配置

Certbot成功生成证书后,它会自动更新Nginx的配置文件。你可以通过以下命令测试Nginx配置是否正确:

sudo nginx -t

如果配置正确,重启Nginx以应用更改:

sudo systemctl restart nginx

4. 设置自动续签

Certbot安装时通常会创建一个定时任务(cron job)来自动续签证书。你可以通过以下命令查看已存在的续签任务:

systemctl list-timers | grep certbot

如果没有自动续签任务,可以手动创建一个:

sudo crontab -e

然后添加以下内容,每天早上3:30自动续签证书:

30 3 * * * /usr/bin/certbot renew --quiet --nginx

5. 测试自动续签

可以手动测试自动续签是否有效:

sudo certbot renew --dry-run

如果没有错误提示,则自动续签配置成功。

6. 检查和更新证书

Certbot会在证书到期前自动更新证书。你可以通过以下命令查看证书的状态:

sudo certbot certificates

7. 监控和维护

定期检查Nginx和Certbot的日志,以确保证书续签正常运行。如果发现问题,可以手动更新证书或调整自动续签脚本。

这样,CentOS系统上的Nginx服务器就可以使用Let’s Encrypt的免费SSL证书,并且能够自动续签,确保网站的安全性和连续性。

手动配置(重点)

前提:新建挑战文件目录,默认是在/var/www/html/

# 创建挑战文件目录
mkdir -p /var/www/html/.well-known/acme-challenge/
# 赋予权限
chmod -R 755 /var/www/html/.well-known

manual 方式(不推荐)

命令:sudo certbot certonly --manual -d me.acowbo.fun

  • 工作原理
    • 使用 --manual 方式时,Certbot 会要求你手动执行一些操作来验证域名所有权。
    • Certbot 会给出一个需要创建的文件名称和内容,你需要手动将这个文件放置到你的 Web 服务器上指定的位置,或者通过 DNS 方式添加 TXT 记录。
    • 在完成这些手动步骤后,Certbot 将继续进行验证,验证通过后你将获得证书。
  • 适用场景
    • 如果你没有直接访问服务器的权限,或者没有正在运行的 Web 服务器(例如静态网站托管在第三方平台上),--manual 方式可能会更适合。
    • 适合临时获取证书,或者当自动化的验证方式无法使用时。
sudo certbot certonly --manual -d me.acowbo.fun

会出现如下图所示:

在这里插入图片描述

到了这一步你不可以点击回车,要现在/var/www/html/.well-known/acme-challenge/目录下新建截图的文件,然后再输入截图中的内容,试一下可以访问吗。可以访问就回车

如果出现问题,请看最下面的问题解决

webroot 方式

命令:sudo certbot certonly --webroot -w /var/www/html -d me.acowbo.fun

  • 工作原理
    • 使用 --webroot 方式时,Certbot 会在指定的 -w 参数后面的路径(例如 /var/www/html)下创建一个 .well-known/acme-challenge/ 文件夹,并在其中放置一个临时文件。
    • Let’s Encrypt 服务器随后会访问 http://me.acowbo.fun/.well-known/acme-challenge/ 下的临时文件来验证域名的所有权。
    • 验证通过后,Certbot 将获得证书并保存到本地。
  • 适用场景
    • 如果你的服务器已经有一个正在运行的 Web 服务器(如 Apache 或 Nginx),并且你能够将 Web 服务器的根目录路径指定为 -w 参数,那么 --webroot 方式会更自动化且方便。
    • 适合已经部署好并能够直接访问的域名。

结果如下

在这里插入图片描述

显示已经成功,并且到期为2024-11-21

配置nginx并重启

ssl_certificate /etc/letsencrypt/live/me.acowbo.fun/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/me.acowbo.fun/privkey.pem;

访问网站如下结果

在这里插入图片描述

问题解决

问题一:nginx找不到

The nginx plugin is not working; there may be problems with your existing configuration.
The error was: NoInstallationError("Could not find a usable 'nginx' binary. Ensure nginx exists, the binary is executable, and your PATH is set correctly.",)

出现这个错误通常意味着Certbot未能找到Nginx的可执行文件。这可能是由于Nginx未正确安装、未在系统路径中,或者其他配置问题引起的。以下是一些可能的解决方案:

1. 确认Nginx已安装

2. 检查Nginx可执行文件路径

确认Nginx可执行文件存在且可执行。通常情况下,Nginx可执行文件应位于/usr/sbin/nginx/usr/local/nginx/sbin/nginx

你可以使用以下命令查找Nginx可执行文件:

which nginx

如果找不到Nginx的路径,可以尝试查找:

sudo find / -name nginx

3. 更新系统路径

如果Nginx已安装但Certbot找不到它,你可能需要更新系统路径。

编辑你的~/.bashrc~/.bash_profile文件,添加Nginx的路径,例如:

export PATH=$PATH:/usr/local/nginx/sbin

然后重新加载文件:

source ~/.bashrc

问题二:nginx配置文件找不到

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Error while running nginx -c /etc/nginx/nginx.conf -t.nginx: [emerg] open() "/etc/nginx/nginx.conf" failed (2: No such file or directory)
nginx: configuration file /etc/nginx/nginx.conf test failedThe nginx plugin is not working; there may be problems with your existing configuration.
The error was: MisconfigurationError('Error while running nginx -c /etc/nginx/nginx.conf -t.\n\nnginx: [emerg] open() "/etc/nginx/nginx.conf" failed (2: No such file or directory)\nnginx: configuration file /etc/nginx/nginx.conf test failed\n',)

这里我建议你直接看手动续签部分

彩蛋之自动续签

这里你可以使用python或者说Linux自带的crontab,我这里只展示提供的脚本实现

在这里插入图片描述

如有需要可以关注下方公众号回复自动续签获取

ezgif-7-34ee1b78c3

这篇关于证书3月一换很麻烦?一行命令让你解放双手的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1109893

相关文章

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

30常用 Maven 命令

Maven 是一个强大的项目管理和构建工具,它广泛用于 Java 项目的依赖管理、构建流程和插件集成。Maven 的命令行工具提供了大量的命令来帮助开发人员管理项目的生命周期、依赖和插件。以下是 常用 Maven 命令的使用场景及其详细解释。 1. mvn clean 使用场景:清理项目的生成目录,通常用于删除项目中自动生成的文件(如 target/ 目录)。共性规律:清理操作

软考系统规划与管理师考试证书含金量高吗?

2024年软考系统规划与管理师考试报名时间节点: 报名时间:2024年上半年软考将于3月中旬陆续开始报名 考试时间:上半年5月25日到28日,下半年11月9日到12日 分数线:所有科目成绩均须达到45分以上(包括45分)方可通过考试 成绩查询:可在“中国计算机技术职业资格网”上查询软考成绩 出成绩时间:预计在11月左右 证书领取时间:一般在考试成绩公布后3~4个月,各地领取时间有所不同

利用命令模式构建高效的手游后端架构

在现代手游开发中,后端架构的设计对于支持高并发、快速迭代和复杂游戏逻辑至关重要。命令模式作为一种行为设计模式,可以有效地解耦请求的发起者与接收者,提升系统的可维护性和扩展性。本文将深入探讨如何利用命令模式构建一个强大且灵活的手游后端架构。 1. 命令模式的概念与优势 命令模式通过将请求封装为对象,使得请求的发起者和接收者之间的耦合度降低。这种模式的主要优势包括: 解耦请求发起者与处理者

linux 判断某个命令是否安装

linux 判断某个命令是否安装 if ! [ -x "$(command -v git)" ]; thenecho 'Error: git is not installed.' >&2exit 1fi

jenkins 插件执行shell命令时,提示“Command not found”处理方法

首先提示找不到“Command not found,可能我们第一反应是查看目标机器是否已支持该命令,不过如果相信能找到这里来的朋友估计遇到的跟我一样,其实目标机器是没有问题的通过一些远程工具执行shell命令是可以执行。奇怪的就是通过jenkinsSSH插件无法执行,经一番折腾各种搜索发现是jenkins没有加载/etc/profile导致。 【解决办法】: 需要在jenkins调用shell脚

Jenkins 插件 地址证书报错问题解决思路

问题提示摘要: SunCertPathBuilderException: unable to find valid certification path to requested target...... 网上很多的解决方式是更新站点的地址,我这里修改了一个日本的地址(清华镜像也好),其实发现是解决不了上述的报错问题的,其实,最终拉去插件的时候,会提示证书的问题,几经周折找到了其中一遍博文

Android逆向(反调,脱壳,过ssl证书脚本)

文章目录 总结 基础Android基础工具 定位关键代码页面activity定位数据包参数定位堆栈追踪 编写反调脱壳好用的脚本过ssl证书校验抓包反调的脚本打印堆栈bilibili反调的脚本 总结 暑假做了两个月的Android逆向,记录一下自己学到的东西。对于app渗透有了一些思路。 这两个月主要做的是代码分析,对于分析完后的持久化等没有学习。主要是如何反编译源码,如何找到

Linux命令(4):fg与bg命令

fg、bg、jobs、&、ctrl + z都是跟系统任务有关的,虽然现在基本上不怎么需要用到这些命令,但学会了也是很实用的 一.& 最经常被用到 这个用在一个命令的最后,可以把这个命令放到后台执行 二.ctrl + z 可以将一个正在前台执行的命令放到后台,并且暂停 三.jobs 查看当前有多少在后台运行的命令 四.fg 将后台中的命令调至前台继续运行 如果后台中有多个命令,可以

Linux命令(3):sz与rz命令

一般来说,linux服务器大多是通过ssh客户端来进行远程的登陆和管理的,使用ssh登陆linux主机以后,如何能够快速的和本地机器进行文件的交互呢,也就是上传和下载文件到服务器和本地; 与ssh有关的两个命令可以提供很方便的操作: sz:将选定的文件发送(send)到本地机器 rz:运行该命令会弹出一个文件选择窗口,从本地选择文件上传到服务器(receive) rz,sz是便是Linux