群晖DSM下套件及系统网页服务器ssl证书自动更新
关键字: DSM ssl 证书
起因
群晖下自建服务(alist3)和系统服务在外部网络访问需要加ssl安全证书来实现基础的传输保护。
申请证书和续期手动操作都还好,不算太麻烦,但是每个应用单独证书需要复制和重启,再配合服务重启一套下来就比较麻烦了,于是有了这篇文章和末尾的ssl自动续期和证书自动复制及服务自动重启脚本。
方案
免费ssl证书的申请,一般是let's encrypt 或者 Trust Asia ,泛域名三个月续期。手动操作比较繁琐,且三个月操作一次更加的繁琐。
自动化ssl续期/申请工具有:
- acme.sh (基于linux原生shell,不需要额外的安装其他东西,但是可能一些非常规linux 系统下会有问题,比如群晖内linux)
- certbot (基于python,可以用acme代理认证或者直接域名服务商dns更新,大部分云厂商都有插件支持)
- keyManager (Windows下,可以自动部署到服务器)
- ......
本来打算直接用acme.sh,但是不知道为什么我这边群晖下(ssh 登录群晖终端) acme.sh 总是openssl报错,懒得去动系统内的依赖(openssl动了可能影响很多东西),搜了下发现certbot也完整实现了acme协议,基于python实现的。
安装 certbot(直接pip 安装就行) 以及 ssl续期 网上有很多教程,就不详细介绍了,脚本中域名和路径、accesskey等自行更改。
# ssh
ssh 192.168.1.100# root权限
sudo su -# 插件按需安装就行
pip3 install certbot certbot-dns-aliyun certbot-dns-cloudflare certbot-auth-dnspod# 这里用阿里云演示
### 配置文件
mkdir -p /etc/letsencrypt/cat > /etc/letsencrypt/credentials.ini <<EOF
dns_aliyun_access_key = 12345678
dns_aliyun_access_key_secret = 1234567890abcdef1234567890abcdef
EOFchmod 644 /etc/letsencrypt/credentials.ini# 申请命令
certbot certonly \
--authenticator=dns-aliyun \
--dns-aliyun-credentials=' /etc/letsencrypt/credentials.ini' \
-d example.com\
-d "*.example.com"# 手动续期
cerbot renew -q
流程及脚本
这里来讲一下本文的主要目的:
1. 自动续期脚本
2. 复制证书并重启alist
3. 复制证书并重启 nginx
具体路径自己更改
#! /bin/bashis_updated="false"check_file_md5_and_replace(){file1="$1"file2="$2"# 检查文件是否存在if [ ! -f "$file1" ] || [ ! -f "$file2" ]; thenecho "Error: Both files must exist."return 1fi# 计算文件的MD5摘要md5_file1=$(md5sum "$file1" | awk '{print $1}')md5_file2=$(md5sum "$file2" | awk '{print $1}')# 比较MD5摘要if [ "$md5_file1" != "$md5_file2" ]; thenecho "MD5 mismatch. Copying $file1 to $file2."cp "$file1" "$file2"is_updated="true"echo "Copy complete."elseecho "MD5 match. No action needed."fi
}# 需要续期的域名,自行修改
domain=example.comssl_cert=/etc/letsencrypt/live/${domain}/cert.pem
ssl_chain=/etc/letsencrypt/live/${domain}/chain.pem
ssl_fullchain=/etc/letsencrypt/live/${domain}/fullchain.pem
ssl_privkey=/etc/letsencrypt/live/${domain}/privkey.pem# renew ssl certs
/usr/bin/certbot renew -q# update alist3 certs
target_ssl_fullchain=/volume1/@appdata/alist3/cert.crt
target_ssl_privkey=/volume1/@appdata/alist3/pri.key
check_file_md5_and_replace ${ssl_fullchain} ${target_ssl_fullchain}
if [ "$is_updated" = "true" ]; thensynopkg restart alist3is_updated="false"
fi
check_file_md5_and_replace ${ssl_privkey} ${target_ssl_privkey}# update syno default certs
target_path=/usr/syno/etc/certificate/_archive/VpBstU
target_ssl_cert=${target_path}/cert.pem
target_ssl_chain=${target_path}/chain.pem
target_ssl_fullchain=${target_path}/fullchain.pem
target_ssl_privkey=${target_path}/privkey.pemcheck_file_md5_and_replace ${ssl_cert} ${target_ssl_cert}
if [ "$is_updated" = "true" ]; thensystemctl restart nginx
fi
check_file_md5_and_replace ${ssl_chain} ${target_ssl_chain}
check_file_md5_and_replace ${ssl_fullchain} ${target_ssl_fullchain}
check_file_md5_and_replace ${ssl_privkey} ${target_ssl_privkey}# 查看证书信息
# openssl x509 -in VpBstU/fullchain.pem -text -noout|grep DNS
群晖下套件采用 synopkg 管理
系统服务使用 systemctl 管理
参考来源
使用 Certbot 自动申请并续订阿里云 DNS 免费泛域名证书_tabsp的博客-CSDN博客
Certbot免费证书的安装·使用·自动续期_certbot renew_BlackRockZero的博客-CSDN博客
查看 PEM DER 格式证书命令_centos查看pem证书命令_maimang09的博客-CSDN博客
相关文章:
群晖DSM下套件及系统网页服务器ssl证书自动更新
关键字: DSM ssl 证书 起因 群晖下自建服务(alist3)和系统服务在外部网络访问需要加ssl安全证书来实现基础的传输保护。 申请证书和续期手动操作都还好,不算太麻烦,但是每个应用单独证书需要复制和重启,再配合服务重启一套下来就…...

【Flink】Flink架构及组件
我们学习大数据知识的时候,需要知道大数据组件如何安装以及架构组件,这将帮助我们更好的了解大数据组件 对于大数据Flink,架构图图下: 整个架构图有三种关键组件 1、Client:负责作业的提交。调用程序的 main 方法&am…...
React Navigation 开发准备
需要 React Native 使用 React Navigation 的话,我们需要首先安装如下几个包: npm install react-navigation/native npm install react-native-screens react-native-safe-area-context开发之前做一些处理 如果您使用的是 Mac 并针对 iOS 进行开发&am…...
前端面试:【前端安全】安全性问题与防范措施
嗨,亲爱的前端开发者!在构建Web应用程序时,确保安全性是至关重要的。本文将深入讨论前端开发中的安全性问题,并提供一些防范措施,以确保你的应用程序和用户数据的安全性。 前端安全性问题: 跨站脚本攻击&am…...

[Linux]进程
文章目录 1. 进程控制1.1 进程概述1.1.1 并行和并发1.1.2 PCB1.1.4 进程状态1.1.5 进程命令 1.2 进程创建1.2.1 函数1.2.2 fork() 剖析 1.3 父子进程1.3.1 进程执行位置1.3.2 循环创建子进程1.3.3 终端显示问题1.3.4 进程数数 1.4 execl和execlp函数1.4.1 execl()1.4.2 execlp(…...
01-jupyter notebook的使用方法
一、Tab补全 在shell中输入表达式,按下Tab,会搜索已输入变量(对象、函数等等)的命名空间: 除了补全命名、对象和模块属性,Tab还可以补全其它的。当输入看似文件路径时 (即使是Python字符串&…...

pytestx容器化执行引擎
系统架构 前端、后端、pytest均以Docker容器运行服务,单独的容器化执行引擎,项目环境隔离,即用即取,用完即齐,简单,高效。 前端容器:页面交互,请求后端,展示HTML报告 后…...

(动态规划) 剑指 Offer 42. 连续子数组的最大和 ——【Leetcode每日一题】
❓ 剑指 Offer 42. 连续子数组的最大和 难度:简单 输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。 要求时间复杂度为 O(n)。 示例1: 输入: nums [-2,1,-3,4,-1,2,1,-5,4] 输出: 6 解释: 连续子数组 [4,-1…...

OLED透明屏曲面技术:创新突破引领显示行业未来
OLED透明屏曲面技术作为一项重要的显示技术创新,正在成为显示行业的焦点,其引人注目的优势和广泛应用领域使其备受关注。 本文将详细介绍OLED透明屏曲面技术的优势、应用领域以及市场前景,同时展望其未来的发展趋势,以期带给读者…...

视频云存储/安防监控EasyCVR视频汇聚平台分发rtsp流时,出现“用户已过期”提示该如何解决?
视频云存储/安防监控EasyCVR视频汇聚平台基于云边端智能协同,支持海量视频的轻量化接入与汇聚、转码与处理、全网智能分发、视频集中存储等。音视频流媒体视频平台EasyCVR拓展性强,视频能力丰富,具体可实现视频监控直播、视频轮播、视频录像、…...

调用paddleocr接口实现文本检测与识别,并在图像中显示识别结果
目录 一、按照官网步骤安装paddlepaddle和paddleocr(paddlepaddle我安装的是cpu版本) 二、运行下面的脚本 三、图像结果 一、按照官网步骤安装paddlepaddle和paddleocr(paddlepaddle我安装的是cpu版本) doc/doc_ch/quickstart.md PaddlePaddle/PaddleOCR - Gitee.com 二、…...
如何提升winform程序性能
提升WinForms程序性能是一个关键的优化任务,以下是一些可以帮助你提升性能的方法: 1. **UI延迟加载:** 如果你的WinForms界面很复杂,可以考虑将不必要的UI元素延迟加载,只在需要时加载,以减少启动时间和内…...

按钮权限控制
搜索关键字: 自定义指令传参| "自定义指令""dataset"|自定义指令dataset| "Vue""directives"|vue按钮权限实现 1、完整代码: <template> <div> <el-breadcrumb separator-class"el-icon…...
【脚本式设置环境变量】
在linux系统中,如果我打开一个软件需要如下操作,那将会是一件很麻烦的事情 cd dir #软件的文件路径 conda deactivate conda activate chatgpt python main.py【首先写一个chatgpt.sh脚本内容如下】 #!/bin/bash cd dir conda run -n chatgpt python m…...

软件开发bug问题跟踪与管理
一、Redmine 项目管理和缺陷跟踪工具 官网:https://www.redmine.org/ Redmine 是一个开源的、基于 Web 的项目管理和缺陷跟踪工具。它用日历和甘特图辅助项目及进度可视化显示,同时它又支持多项目管理。Redmine 是一个自由开源软件解决方案,…...

springboot+mp完成简单案例
目录 1.框架搭建 2.前端搭建 3.后端编写 需求:完成简单的连表条件查询以及添加即可 1.框架搭建 1.创建springboot项目 2.相关依赖 <!--web依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boo…...

cuml机器学习GPU库 sklearn升级版AutoDL使用
CUML库 最近在做机器学习任务的时候发现我自己的数据集太大,直接用sklearn 跑起来时间很长,然后问GPT得知了有CUML库,后来去研究了一下,发现这个库只支持linux系统,从官网直接获取下载命令基本上也实现不了最后&#…...

C语言练习题Day1
从今天开始分享C语言的练习题,每天都分享,差不多持续16天,看完对C语言的理解可能更进一步,让我们开始今天的分享吧! 题目一 执行下面的代码,输出结果是() int x5,y7; void swap()…...

使用kubeadm安装和设置Kubernetes(k8s)
用kubeadm方式搭建K8S集群 kubeadm是官方社区推出的一个用于快速部署kubernetes集群的工具。 这个工具能通过两条指令完成一个kubernetes集群的部署: # 创建一个 Master 节点 kubeadm init# 将一个 Node 节点加入到当前集群中 kubeadm join <Master节点的IP和端口…...
Docker安装延迟队列插件
下载插件地址:https://www.rabbitmq.com/community-plugins.html 插件上传服务器 选择跟我们rabbitmq版本一致或者小于的插件即可。版本可在web管理首页查看。 将下载的插件上传到Linux系统上,使用 docker 命令将插件复制到容器内部 plugins目录下 do…...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战
前言 现在我们有个如下的需求,设计一个邮件发奖的小系统, 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其…...
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...

vscode(仍待补充)
写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh? debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序
一、开发环境准备 工具安装: 下载安装DevEco Studio 4.0(支持HarmonyOS 5)配置HarmonyOS SDK 5.0确保Node.js版本≥14 项目初始化: ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)
引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

【Java_EE】Spring MVC
目录 Spring Web MVC 编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 编辑参数重命名 RequestParam 编辑编辑传递集合 RequestParam 传递JSON数据 编辑RequestBody …...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战
“🤖手搓TuyaAI语音指令 😍秒变表情包大师,让萌系Otto机器人🔥玩出智能新花样!开整!” 🤖 Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制(TuyaAI…...

Spring数据访问模块设计
前面我们已经完成了IoC和web模块的设计,聪明的码友立马就知道了,该到数据访问模块了,要不就这俩玩个6啊,查库势在必行,至此,它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据(数据库、No…...
Element Plus 表单(el-form)中关于正整数输入的校验规则
目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入(联动)2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...
Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信
文章目录 Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket(服务端和客户端都要)2. 绑定本地地址和端口&#x…...