阿里云服务器采用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 ID
和AccessKey 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_ali
是acme.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.com
,68.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 服务以使证书生效。以下是命令的详细解释:
命令解析
-
/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
,使用时替换为自己域名即可。
-
--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 颁发的私钥文件。
-
--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
是包含证书和中间证书的文件。
-
--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三、预热…...
性能优化深度实践:突破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中,使用std::cout输出double类型时,可以通过<iomanip>头文件中的std::fixed和std::setprecision来控制小数位数的输出。以下是几种常见场景的解决方案: 1. 输出至少1位小数(不足补零) #include <…...

端午节互动网站
端午节互动网站 项目介绍 这是一个基于 Vue 3 Vite 开发的端午节主题互动网站,旨在通过有趣的交互方式展示中国传统端午节文化。网站包含三个主要功能模块:端午节介绍、互动包粽子游戏和龙舟竞赛游戏。 预览网站:https://duanwujiekuaile…...
[特殊字符] NAT映射类型详解:从基础原理到应用场景全解析
网络地址转换(NAT)是解决IPv4地址短缺的核心技术,通过IP地址映射实现内网与公网的通信。本文将系统梳理NAT映射的三大类型及其子类,助你全面掌握其工作机制与应用场景。 目录 🔧 一、基础NAT映射类型:按转…...

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

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

重温经典算法——插入排序
版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl 基本原理 插入排序是一种基于元素逐步插入的简单排序算法,其核心思想是将待排序序列分为已排序和未排序两部分,每次从未排序部分取出第一个元素&…...
在VirtualBox中打造高效开发环境:CentOS虚拟机安装与优化指南
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、为何选择VirtualBox CentOS组合? 对于程序员而言,构建隔离的开发测试环境是刚需。VirtualBox凭借其跨平台支持(W…...

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

【实证分析】上市公司全要素生产率+5种测算方式(1999-2024年)
上市公司的全要素生产率(TFP)衡量企业在资本、劳动及中间投入之外,通过技术进步、管理效率和规模效应等因素提升产出的能力。与单纯的劳动生产率或资本生产率不同,TFP综合反映了企业创新能力、资源配置效率和组织优化水平…...

弥散制氧机工作机制:高原低氧环境的氧浓度重构技术
弥散制氧机通过空气分离与智能扩散技术,将氧气均匀分布于封闭或半封闭空间,实现环境氧浓度的主动调控。其核心在于 “分子筛吸附动态均布智能反馈” 的协同作用机制,为高原、矿井、医疗等场景提供系统性氧环境解决方案。 一、空气分离&#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(CentOS 7.9) 上搭建 RabbitMQ 集群,基本思路是: 🗂️ 架构说明 主机角色IP节点名称A主节点10.152.132.1rabbitnode1B备节点10.152.132.2rabbitnode2 集群目标:两台 RabbitMQ 节点加…...

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

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

篇章二 数据结构——前置知识(二)
目录 1. 包装类 1.1 包装类的概念 1.2 基本数据类型和对应的包装类 1.3 装箱和拆箱 1.4 自动装箱和自动拆箱 1.5 练习 —— 面试题 2. 泛型 2.1 如果没有泛型——会出现什么情况? 2.2 语法 2.3 裸类型 1.没有写<> 但是没有报错为什么? …...
如果是在服务器的tty2终端怎么查看登陆服务器的IP呢
1. 如果是在服务器的tty2终端怎么查看登陆服务器的IP呢 在服务器的 tty2 或其他终端会话中,要查看与该服务器的连接相关的 IP 地址,可以使用几种命令来获取这些信息: 1.1 使用 who 命令: who 命令可以显示当前登录到服务器上的…...
Java求职面试:从核心技术到AI与大数据的全面考核
Java求职面试:从核心技术到AI与大数据的全面考核 第一轮:基础框架与核心技术 面试官:谢飞机,咱们先从简单的开始。请你说说Spring Boot的启动过程。 谢飞机:嗯,Spring Boot启动的时候会自动扫描组件&…...
ubuntu24.04与ubuntu22.04比,有什么新特性?
Ubuntu 24.04 LTS (Noble Numbat) 相较于 Ubuntu 22.04 LTS (Jammy Jellyfish) 带来了许多重要的新特性和改进。以下是一些关键的亮点: Linux Kernel: Ubuntu 24.04 LTS: 搭载了更新的 Linux Kernel 6.8(发布时)。 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热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…...

STM32 定时器输出比较深度解析:从原理到电机控制应用 (详解)
文章目录 定时器输出比较定时器通道结构输出比较通道(高级) PWM 信号原理输出比较 8 种工作模式互补输出概念极性选择内容 PWM硬件部分舵机直流电机及驱动简介 定时器输出比较 定时器通道结构 通道组成:定时器有四个通道,以通道一为例,中间是…...
用 NGINX 还原真实客户端 IP ngx_mail_realip_module
一、模块作用与使用前提 作用:解析 TCP 会话第一行的 PROXY 协议头,将客户端 IP/端口写回 NGINX 的内部变量,使后续 ngx_mail_proxy_module、认证模块、日志模块都能获取真实来源。 前提:监听指令中必须启用 proxy_protocol&…...