当前位置: 首页 > article >正文

阿里云服务器采用crontab定时任务使acme.sh全自动化申请续签免费SSL证书,并部署在Linux宝塔网站和雷池WAF

阿里云服务器安装Linux宝塔面板用于部署网站,又安装了雷池WAF用于防护网站,网站访问正常。可以参考文章:Linux服务器安装Linux宝塔面板并部署wordpress网站以及雷池WAF

本文介绍使用 acme.sh 通过 DNS API 全自动申请和续签免费Let’s Encrypt SSL 证书,本文只做单域名详细介绍。

一、安装 acme.sh

1.使用SSH远程登陆阿里云服务器,本文以root账户登陆介绍,your_email@example.com替换成自己邮箱即可。

# 使用一键脚本安装
curl https://get.acme.sh | sh -s email=your_email@example.com

在这里插入图片描述
从上面可以看到acme.sh安装到了路径/root/.acme.sh/acme.sh

2.重新加载环境变量和切换CA证书类型

# 重新加载环境变量
source ~/.bashrc#  CA证书类型默认使用ZeroSSL,切换成Let's Encrypt
acme.sh --set-default-ca --server letsencrypt

3.安装成功后,终端输入acme.sh -h便可以看到帮助命令。

二、配置阿里云DNS API

1.通过阿里云服务器提供的API,让acme.sh自动创建域名验证记录以申请域名证书。首先登陆阿里云控制台 - 访问控制 RAM - 身份管理 - 用户 - 创建用户

在这里插入图片描述
2.填写登录名称,勾选使用永久AccessKey访问,确定
在这里插入图片描述

在这里插入图片描述
完成后,分别复制AccessKey IDAccessKey Secret的值,保存并一定做好备份!

3.按照下图,选中这个用户,点击下方的添加权限。搜索DNS,选择AliyunDNSFullAccess点击确认添加权限
在这里插入图片描述
4.在终端中配置环境变量(复制到终端中执行):

export Ali_Key="LTAI5txxxxxxxxxxxxx"
export Ali_Secret="TJHStNFrxxxxxxxxxxxxxxxxxxx"
三、申请SSL证书

本文只介绍单域名证书申请命令:(本例演示域名:www.test.com,使用时替换为自己域名即可。)

/root/.acme.sh/acme.sh --issue --dns dns_ali -d www.test.com

命令解析

  • /root/.acme.sh/acme.sh:这是 acme.sh 客户端的安装路径。通常情况下,acme.sh 会安装在用户的主目录下的 .acme.sh 文件夹中。
  • --issue:表示申请证书。
  • --dns dns_ali:指定使用阿里云的 DNS API 来验证域名所有权。dns_aliacme.sh 内置的阿里云 DNS 插件。
  • -d www.test.com:指定要申请证书的域名, 本例演示域名:www.test.com,使用时替换为自己域名即可。
四、部署SSL证书到Web服务器(Linux宝塔面板)

存放acme申请签发的SSL证书目录(root账户的家目录是/root),acme默认安装路径/root/.acme.sh/acme.sh
SSL证书默认存储在 ~/.acme.sh/www.test.com_ecc/,用root账户登陆,所以SSL证书默认存储在/root/.acme.sh/www.test.com_ecc/,
acme申请签发的SSL证书-密钥(KEY)文件路径: /root/.acme.sh/www.test.com_ecc/www.test.com.key;acme申请签发的SSL证书-证书(cer)文件路径: /root/.acme.sh/www.test.com_ecc/fullchain.cer

但需手动执行命令复制到Web 服务器目录。

注意:确保证书存放的目录已创建

在部署SSL证书之前,我们首先要确定原有ssl证书的位置。一般在你的nginx配置文件中,登陆Linux宝塔面板后台可以查看:

在这里插入图片描述

可以看到ssl证书的路径:(本例演示域名:www.test.com68.162.x.x是服务器IP,也是网站根目录名称。)

ssl_certificate    /www/server/panel/vhost/cert/68.162.x.x/fullchain.pem;
ssl_certificate_key    /www/server/panel/vhost/cert/68.162.x.x/privkey.pem;

所以部署SSL证书到 Web 服务器(Linux宝塔面板)命令如下:

/root/.acme.sh/acme.sh --install-cert -d www.test.com \
--key-file "/www/server/panel/vhost/cert/68.162.x.x/privkey.pem"  \
--fullchain-file "/www/server/panel/vhost/cert/68.162.x.x/fullchain.pem" \
--reloadcmd "service nginx force-reload"

这段命令是用于安装 SSL 证书的,具体是通过 acme.sh 脚本将 Let’s Encrypt 颁发的 SSL 证书安装到指定的路径,并重新加载 Nginx 服务以使证书生效。以下是命令的详细解释:

命令解析

  1. /root/.acme.sh/acme.sh --install-cert -d www.test.com

    • /root/.acme.sh/acme.sh:指定 acme.sh 脚本的路径。acme.sh 是一个用于自动化申请和管理 Let’s Encrypt SSL 证书的工具。
    • --install-cert:表示安装证书。
    • -d www.test.com:指定需要安装证书的域名,这里是 www.test.com,本例演示域名:www.test.com,使用时替换为自己域名即可。
  2. --key-file "/www/server/panel/vhost/cert/68.162.x.x/privkey.pem"

    • --key-file:指定私钥文件的路径。
    • "/www/server/panel/vhost/cert/68.162.x.x/privkey.pem":私钥文件的完整路径。privkey.pem 是 Let’s Encrypt 颁发的私钥文件。
  3. --fullchain-file "/www/server/panel/vhost/cert/68.162.x.x/fullchain.pem"

    • --fullchain-file:指定证书链文件的路径。
    • "/www/server/panel/vhost/cert/68.162.x.x/fullchain.pem":证书链文件的完整路径。fullchain.pem 是包含证书和中间证书的文件。
  4. --reloadcmd "service nginx force-reload"

    • --reloadcmd:指定在证书安装完成后需要执行的命令。
    • "service nginx force-reload":强制重新加载 Nginx 服务,使 SSL 证书生效。
五、部署SSL证书到雷池WAF

雷池WAF的默认SSL证书目录/data/safeline/resources/nginx/certs,雷池WAF安装SSL证书,要求WAF版本 >= 7.2.0,获取证书后覆盖上述文件即可,WAF定时更新:WAF默认每小时刷新一次证书内容

在这里插入图片描述

可以参考雷池WAF官方给出的说明:如何在雷池 WAF 通过文件更新 SSL 证书

所以部署SSL证书到雷池WAF命令如下:

cp /root/.acme.sh/www.test.com_ecc/fullchain.cer /data/safeline/resources/nginx/certs/cert_1.crt
cp /root/.acme.sh/www.test.com_ecc/www.test.com.key /data/safeline/resources/nginx/certs/cert_1.key
六、使用Linux shell写成全自动执行脚本

经过前面五个步骤,可以成功更新SSL证书了。但是手动执行命令繁琐,经过多次实际测试调试脚本,我们可以使用Linux Shell脚本acme_deploy_ssl.sh实现全自动化申请续签免费SSL证书,并部署在Linux宝塔网站和雷池WAF。

只需要修改前面2个变量WEB_DOMAIN和WEB_ROOT_NAME值

==================================================

#网站申请SSL证书的域名(www.test.com替换成自己实际域名即可
WEB_DOMAIN=“www.test.com”
#网站根目录名称(68.162.x.x替换成自己实际网站根目录名称即可
WEB_ROOT_NAME=“68.162.x.x”

==================================================

acme_deploy_ssl.sh脚本如下:

#功能:acme.h自动申请签发SSL证书,Linux宝塔网站和雷池WAF更新SSL证书的shell脚本
#!/bin/bash#网站申请SSL证书的域名(www.test.com替换成自己实际域名即可)
WEB_DOMAIN="www.test.com"
#网站根目录名称(68.162.x.x替换成自己实际网站根目录名称即可)
WEB_ROOT_NAME="68.162.x.x"#1.存放acme申请签发的SSL证书目录(root账户的家目录是/root),acme默认安装路径/root/.acme.sh/acme.sh
#2.acme申请签发的SSL证书-密钥(KEY)文件,Your cert key is in: /root/.acme.sh/www.test.com_ecc/www.test.com.key
#3.acme申请签发的SSL证书-证书(cer)文件,And the full-chain cert is in: /root/.acme.sh/www.test.com_ecc/fullchain.cer
CERT_DIR="/root/.acme.sh/${WEB_DOMAIN}_ecc"
#Linux宝塔面板的SSL证书目录
BT_SSL_DIR="/www/server/panel/vhost/cert"
#雷池WAF的默认SSL证书目录
WAF_SSL_DIR="/data/safeline/resources/nginx/certs"cd ~current_datetime=$(date "+%Y-%m-%d %H:%M:%S")
echo "$current_datetime acme开始申请签发SSL证书......"#acme申请签发SSL证书
/root/.acme.sh/acme.sh --issue --dns dns_ali -d "$WEB_DOMAIN"sleep 15 #延时15s#判断acme是否申请签发SSL证书成功?
if [ -f "$CERT_DIR/fullchain.cer" ] && [ -f "$CERT_DIR/${WEB_DOMAIN}.key" ]; thencurrent_datetime_1=$(date "+%Y-%m-%d %H:%M:%S")current_datetime_2=${current_datetime_1//:/-}current_datetime_2=${current_datetime_2// /_}echo "$current_datetime_1 acme申请签发SSL证书成功"#Linux宝塔面板安装SSL证书/root/.acme.sh/acme.sh --install-cert -d "$WEB_DOMAIN" \--key-file "$BT_SSL_DIR/$WEB_ROOT_NAME/privkey.pem"  \--fullchain-file "$BT_SSL_DIR/$WEB_ROOT_NAME/fullchain.pem" \--reloadcmd "service nginx force-reload"current_datetime_1=$(date "+%Y-%m-%d %H:%M:%S")echo "$current_datetime_1 Linux宝塔网站更新SSL证书成功"sleep 10 #延时10s#雷池WAF安装SSL证书,要求WAF版本 >= 7.2.0,获取证书后覆盖上述文件即可,WAF默认每小时刷新一次证书内容cp "$CERT_DIR/fullchain.cer" "$WAF_SSL_DIR/cert_1.crt"cp "$CERT_DIR/${WEB_DOMAIN}.key" "$WAF_SSL_DIR/cert_1.key"current_datetime_1=$(date "+%Y-%m-%d %H:%M:%S")echo "$current_datetime_1 雷池WAF更新SSL证书成功"#备份,重命名acme申请签发的SSL证书文件mv "$CERT_DIR/fullchain.cer" "$CERT_DIR/${current_datetime_2}_fullchain.pem"mv "$CERT_DIR/${WEB_DOMAIN}.key" "$CERT_DIR/${current_datetime_2}_${WEB_DOMAIN}.key"
elsecurrent_datetime=$(date "+%Y-%m-%d %H:%M:%S")echo "$current_datetime acme申请签发SSL证书失败"
fisleep 30 #30s后关闭脚本
exit 0
七、Linux Shell脚本acme_deploy_ssl.sh上传到云服务器测试

1.使用FileZilla远程上传工具,把Linux Shell脚本acme_deploy_ssl.sh上传到云服务器的家目录~下:/root,使用命令ls -l查看下/root目录下文件及权限。

在这里插入图片描述
使用下面命令给acme_deploy_ssl.sh文件添加执行权限

chmod +x acme_deploy_ssl.sh

chmod 755 acme_deploy_ssl.sh

再次使用命令ls -l查看下acme_deploy_ssl.sh文件已有执行权限。

3.使用下面命令运行acme_deploy_ssl.sh

./acme_deploy_ssl.sh

在这里插入图片描述

在这里插入图片描述
可以看到acme.h申请签发SSL证书,并把SSL证书部署到Linux宝塔面板和雷池WAF的运行过程。

4.登陆Linux宝塔面板,查看SSL证书到期时间,已成功续签SSL证书

在这里插入图片描述
5.登陆雷池WAF,查看SSL证书到期时间,已成功续签SSL证书
在这里插入图片描述

八、添加crontab定时任务实现无人自动部署

如果我们使用 curl https://get.acme.sh | sh 方式安装,默认续期任务会自动在定时任务中配置。一定要注释掉acme.h默认续期任务,添加自己的续期任务。

#设置每月执行一次的续期定时任务(每月第一天)
0 0 1 * * /root/acme_deploy_ssl.sh &>> /root/.acme.sh/acme_ssl.log

关于crontab定时任务知识可以参考文章:

Linux系统通过编辑crontab来设置定时任务—定时关机


相关文章:

阿里云服务器采用crontab定时任务使acme.sh全自动化申请续签免费SSL证书,并部署在Linux宝塔网站和雷池WAF

阿里云服务器安装Linux宝塔面板用于部署网站,又安装了雷池WAF用于防护网站,网站访问正常。可以参考文章:Linux服务器安装Linux宝塔面板并部署wordpress网站以及雷池WAF 本文介绍使用 acme.sh 通过 DNS API 全自动申请和续签免费Let’s Encry…...

day40 python图像数据与显存

目录 一、图像数据的处理与预处理 (一)图像数据的特点 (二)数据预处理 二、神经网络模型的定义 (一)黑白图像模型的定义 (二)彩色图像模型的定义 (三)…...

Python+VR:如何让虚拟世界更懂你?——用户行为分析的实践

友友们好! 我是Echo_Wish,我的的新专栏《Python进阶》以及《Python!实战!》正式启动啦!这是专为那些渴望提升Python技能的朋友们量身打造的专栏,无论你是已经有一定基础的开发者,还是希望深入挖掘Python潜力的爱好者,这里都将是你不可错过的宝藏。 在这个专栏中,你将会…...

【华为鸿蒙电脑】首款鸿蒙电脑发布:MateBook Fold 非凡大师 MateBook Pro,擎云星河计划启动

文章目录 前言一、HUAWEI MateBook Fold 非凡大师(一)非凡设计(二)非凡显示(三)非凡科技(四)非凡系统(五)非凡体验 二、HUAWEI MateBook Pro三、预热&#xf…...

性能优化深度实践:突破vue应用性能

一、性能优化深度实践:突破 Vue 应用性能边界 1. 虚拟 DOM 性能边界分析 核心原理: 虚拟 DOM 是 Vue 的核心优化策略,通过 JS 对象描述真实 DOM 结构。当状态变化时: 生成新虚拟 DOM 树Diff 算法对比新旧树差异仅更新变化的真实…...

服务器定时任务查看和编辑

在 Ubuntu 系统中,查看当前系统中已开启的定时任务主要有以下几种方式,分别针对不同类型的定时任务管理方式(如 crontab、systemd timer 等): 查看服务器定时任务 一、查看用户级别的 Crontab 任务 每个用户都可以配…...

SpringBoot Controller接收参数方式, @RequestMapping

一. 通过原始的HttpServletRequest对象获取请求参数 二. 通过Spring提供的RequestParam注解,将请求参数绑定给方法参数 三. 如果请求参数名与形参变量名相同,直接定义方法形参即可接收。(省略RequestParam) 四. JSON格式的请求参数(POST、PUT) 主要在PO…...

double怎么在c/c++中输出保留输出最小精度为一位

在C中&#xff0c;使用std::cout输出double类型时&#xff0c;可以通过<iomanip>头文件中的std::fixed和std::setprecision来控制小数位数的输出。以下是几种常见场景的解决方案&#xff1a; ​​1. 输出至少1位小数&#xff08;不足补零&#xff09;​​ #include <…...

端午节互动网站

端午节互动网站 项目介绍 这是一个基于 Vue 3 Vite 开发的端午节主题互动网站&#xff0c;旨在通过有趣的交互方式展示中国传统端午节文化。网站包含三个主要功能模块&#xff1a;端午节介绍、互动包粽子游戏和龙舟竞赛游戏。 预览网站&#xff1a;https://duanwujiekuaile…...

[特殊字符] NAT映射类型详解:从基础原理到应用场景全解析

网络地址转换&#xff08;NAT&#xff09;是解决IPv4地址短缺的核心技术&#xff0c;通过IP地址映射实现内网与公网的通信。本文将系统梳理NAT映射的三大类型及其子类&#xff0c;助你全面掌握其工作机制与应用场景。 目录 &#x1f527; 一、基础NAT映射类型&#xff1a;按转…...

react-color-palette源码解析

项目中用到了react-color-palette组件&#xff0c;以前对第三方组件都是不求甚解&#xff0c;这次想了解一下其实现细节。 简介 react-color-palette 是一个用于创建颜色调色板的 React 组件。它提供了一个简单易用的接口&#xff0c;让开发者可以轻松地创建和管理颜色调色板。…...

在 Ubuntu 上安装 NVM (Node Version Manager) 的步骤

NVM (Node Version Manager) 是一个用于管理多个 Node.js 版本的工具&#xff0c;它允许您在同一台设备上安装、切换和管理不同版本的 Node.js。以下是在 Ubuntu 上安装 NVM 的详细步骤&#xff1a; 安装前准备 可先在windows上安装ubuntu 参考链接&#xff1a;https://blog.…...

重温经典算法——插入排序

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl 基本原理 插入排序是一种基于元素逐步插入的简单排序算法&#xff0c;其核心思想是将待排序序列分为已排序和未排序两部分&#xff0c;每次从未排序部分取出第一个元素&…...

在VirtualBox中打造高效开发环境:CentOS虚拟机安装与优化指南

&#x1f525;「炎码工坊」技术弹药已装填&#xff01; 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、为何选择VirtualBox CentOS组合&#xff1f; 对于程序员而言&#xff0c;构建隔离的开发测试环境是刚需。VirtualBox凭借其跨平台支持&#xff08;W…...

塔能科技:为多行业工厂量身定制精准节能方案

在当今追求可持续发展的时代&#xff0c;工厂能耗精准节能成为众多企业关注的焦点。塔能科技凭借先进的技术和丰富的经验&#xff0c;服务于广泛的行业客户&#xff0c;其中55.5%来自世界500强和上市公司。针对不同行业工厂的特点和需求&#xff0c;塔能提供了一系列行之有效的…...

【实证分析】上市公司全要素生产率+5种测算方式(1999-2024年)

上市公司的全要素生产率&#xff08;TFP&#xff09;衡量企业在资本、劳动及中间投入之外&#xff0c;通过技术进步、管理效率和规模效应等因素提升产出的能力。与单纯的劳动生产率或资本生产率不同&#xff0c;TFP综合反映了企业创新能力、资源配置效率和组织优化水平&#xf…...

弥散制氧机工作机制:高原低氧环境的氧浓度重构技术

弥散制氧机通过空气分离与智能扩散技术&#xff0c;将氧气均匀分布于封闭或半封闭空间&#xff0c;实现环境氧浓度的主动调控。其核心在于 “分子筛吸附动态均布智能反馈” 的协同作用机制&#xff0c;为高原、矿井、医疗等场景提供系统性氧环境解决方案。 一、空气分离&#x…...

[Python] 避免 PyPDF2 写入 PDF 出现黑框问题:基于语言自动匹配系统字体的解决方案

在使用 Python 操作 PDF 文件时,尤其是在处理中文、日语等非拉丁字符语言时,常常会遇到一个令人头疼的问题——文字变成“黑框”或“方块”,这通常是由于缺少合适的字体支持所致。本文将介绍一种自动选择系统字体的方式,结合 PyPDF2 模块解决此类问题。 一、问题背景:黑框…...

《基于Keepalived+LVS+Web+NFS的高可用集群搭建》

目 录 1 项目概述 1.1 项目背景 1.2 项目功能 2 项目的部署 2.1 部署环境介绍 2.2 项目的拓扑结构 2.3 项目环境调试 2.4 项目的部署 2.5 项目功能的验证 2.6 项目对应服务使用的日志 3 项目的注意事项 3.1 常见问题与解决方案 3.2 项目适用背…...

RabbitMQ搭建集群

要在 Windows 或 Linux&#xff08;CentOS 7.9&#xff09; 上搭建 RabbitMQ 集群&#xff0c;基本思路是&#xff1a; &#x1f5c2;️ 架构说明 主机角色IP节点名称A主节点10.152.132.1rabbitnode1B备节点10.152.132.2rabbitnode2 集群目标&#xff1a;两台 RabbitMQ 节点加…...

时间序列预测算法中的预测概率化笔记

文章目录 1 预测概率化的前情提要2 预测概率化的代码示例3 预测概率化在实际商业应用场景探索3.1 智能库存与供应链优化 1 预测概率化的前情提要 笔者看到【行业SOTA&#xff0c;京东首个自研十亿级时序大模型揭秘】提到&#xff1a; 预测概率化组件&#xff1a;由于大部分纯时…...

2025-05-28 Python深度学习8——优化器

文章目录 1 工作原理2 常见优化器2.1 SGD2.2 Adam 3 优化器参数4 学习率5 使用最佳实践 本文环境&#xff1a; Pycharm 2025.1Python 3.12.9Pytorch 2.6.0cu124 ​ 优化器 (Optimizer) 是深度学习中的核心组件&#xff0c;负责根据损失函数的梯度来更新模型的参数&#xff0c;使…...

篇章二 数据结构——前置知识(二)

目录 1. 包装类 1.1 包装类的概念 1.2 基本数据类型和对应的包装类 1.3 装箱和拆箱 1.4 自动装箱和自动拆箱 1.5 练习 —— 面试题 2. 泛型 2.1 如果没有泛型——会出现什么情况&#xff1f; 2.2 语法 2.3 裸类型 1.没有写<> 但是没有报错为什么&#xff1f; …...

如果是在服务器的tty2终端怎么查看登陆服务器的IP呢

1. 如果是在服务器的tty2终端怎么查看登陆服务器的IP呢 在服务器的 tty2 或其他终端会话中&#xff0c;要查看与该服务器的连接相关的 IP 地址&#xff0c;可以使用几种命令来获取这些信息&#xff1a; 1.1 使用 who 命令&#xff1a; who 命令可以显示当前登录到服务器上的…...

Java求职面试:从核心技术到AI与大数据的全面考核

Java求职面试&#xff1a;从核心技术到AI与大数据的全面考核 第一轮&#xff1a;基础框架与核心技术 面试官&#xff1a;谢飞机&#xff0c;咱们先从简单的开始。请你说说Spring Boot的启动过程。 谢飞机&#xff1a;嗯&#xff0c;Spring Boot启动的时候会自动扫描组件&…...

ubuntu24.04与ubuntu22.04比,有什么新特性?

Ubuntu 24.04 LTS (Noble Numbat) 相较于 Ubuntu 22.04 LTS (Jammy Jellyfish) 带来了许多重要的新特性和改进。以下是一些关键的亮点&#xff1a; Linux Kernel: Ubuntu 24.04 LTS: 搭载了更新的 Linux Kernel 6.8&#xff08;发布时&#xff09;。 Ubuntu 22.04 LTS: 发布时…...

Flutter Container组件、Text组件详解

目录 1. Container容器组件 1.1 Container使用 1.2 Container alignment使用 1.3 Container border边框使用 1.4 Container borderRadius圆角的使用 1.5 Container boxShadow阴影的使用 1.6 Container gradient背景颜色渐变 1.7 Container gradient RadialGradient 背景颜色渐…...

Telegram平台分发其聊天机器人Grok

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…...

STM32 定时器输出比较深度解析:从原理到电机控制应用 (详解)

文章目录 定时器输出比较定时器通道结构输出比较通道(高级) PWM 信号原理输出比较 8 种工作模式互补输出概念极性选择内容 PWM硬件部分舵机直流电机及驱动简介 定时器输出比较 定时器通道结构 通道组成&#xff1a;定时器有四个通道&#xff0c;以通道一为例&#xff0c;中间是…...

用 NGINX 还原真实客户端 IP ngx_mail_realip_module

一、模块作用与使用前提 作用&#xff1a;解析 TCP 会话第一行的 PROXY 协议头&#xff0c;将客户端 IP/端口写回 NGINX 的内部变量&#xff0c;使后续 ngx_mail_proxy_module、认证模块、日志模块都能获取真实来源。 前提&#xff1a;监听指令中必须启用 proxy_protocol&…...