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

使用 Acme.sh 自动生成和续签免费 SSL 证书(含通配符支持)

Acme.sh 是一个开源的脚本,能够从 ZeroSSLLet’s Encrypt 等证书颁发机构(CA)获取免费的 HTTPS 证书。该脚本特别简单易用,并且支持多种验证方式。下面将详细介绍使用 Acme.sh 生成、安装和更新证书的各个步骤。
Github地址
使用说明

1. 安装 Acme.sh

安装 Acme.sh 可以通过简单的命令实现,并且不限制于 root 用户。普通用户也能顺利完成安装。

  • 命令安装需要服务器能正常访问github
    curl https://get.acme.sh | sh -s email=my@example.com
    
    wget -O -  https://get.acme.sh | sh -s email=my@example.com
    
  • 从 GitHub 安装
    curl https://raw.githubusercontent.com/acmesh-official/acme.sh/master/acme.sh | sh -s -- --install-online -m  my@example.com
    
    wget -O -  https://raw.githubusercontent.com/acmesh-official/acme.sh/master/acme.sh | sh -s -- --install-online -m  my@example.com
    
  • git clone 并安装(推荐)
    git clone --depth 1 https://github.com/acmesh-official/acme.sh.git
    cd acme.sh
    ./acme.sh --install -m my@example.com
    
  • 高级安装
    git clone --depth 1 https://github.com/acmesh-official/acme.sh.git
    cd acme.sh
    ./acme.sh --install  \
    --home ~/myacme \
    --config-home ~/myacme/data \
    --cert-home  ~/mycerts \
    --accountemail  "my@example.com" \
    --accountkey  ~/myaccount.key \
    --accountconf ~/myaccount.conf \
    --useragent  "this is my client."
    
    你不需要把它们都设置好,只需设置你关心的那些就行了。
    解释:
    • –home是要在其中安装的自定义目录。默认情况下,它会安装到acme.sh~/.acme.sh
    • –config-home是一个可写文件夹,acme.sh 会把所有文件(包括证书/密钥、配置)都写入那里。默认情况下,它位于–home
    • –cert-home是用于保存您颁发的证书的自定义目录。默认情况下,它保存在 .–config-home
    • –accountemail是用于向 Let’s Encrypt 注册帐户的电子邮件,您将在此处收到续订通知电子邮件。
    • –accountkey是保存您账户私钥的文件。默认情况下,它保存在 .–config-home
    • –useragent是用于发送到 Let’s Encrypt 的用户代理标头值。
    • –nocron在没有 cronjob 的情况下安装 acme.sh

安装过程中,Acme.sh 会自动:

  • 将自身安装到用户的 home 目录中的 ~/.acme.sh/ 文件夹。
  • 在 shell 配置文件(如 .bashrc)中创建一个别名以便于调用:alias acme.sh=~/.acme.sh/acme.sh
  • 创建一个 cronjob 任务,每天 0:00 自动检测所有证书的有效期。若证书即将过期,将自动进行更新。

如果安装完成后遇到 -bash: acme.sh: command not found 错误,需执行 source ~/.bashrc

2. 生成证书

Acme.sh 支持 ACME 协议的所有验证方式,其中最常用的是 HTTP 验证和 DNS 验证。

  • HTTP 验证

    • 直接签发
      指定域名和网站根目录,Acme.sh 将自动在根目录下生成并删除验证文件,验证过程安全无副作用。
      acme.sh --issue -d mydomain.com -d www.mydomain.com --webroot /home/wwwroot/mydomain.com/
      
    • 使用 Apache 模式
      Acme.sh 可以智能地从 Apache 的配置中读取信息,自动完成验证,无须指定网站根目录。
      acme.sh --issue --apache -d example.com -d www.example.com -d cp.example.com
      
    • 使用 Nginx 模式
      同样,Acme.sh 也能智能地从 Nginx 的配置中读取信息完成验证。
      acme.sh --issue --nginx -d example.com -d www.example.com -d cp.example.com
      
    • 使用独立服务模式
      如果服务器上没有运行任何 Web 服务,且 80 端口空闲,Acme.sh 可以启动临时 Web 服务来完成验证。
      acme.sh --issue --standalone -d example.com -d www.example.com -d cp.example.com
      
    • 修改默认 CA
      若遇到证书申请卡在待处理状态,尝试将 CA 服务器改为 Let’s Encrypt。
      acme.sh --set-default-ca --server letsencrypt
      
  • DNS 验证

    • 手动验证
      若不能通过 Web 服务器自动验证,可手动在域名管理面板添加一条 TXT 记录以验证域名所有权。
      acme.sh --issue --dns -d example.com -d www.example.com -d cp.example.com
      
      之后需重新生成证书:
      acme.sh --renew -d example.com
      
    • 自动验证(DNS API)
      DNS 方式的真正强大之处在于可以使用域名解析商提供的 API 自动添加 TXT 记录,且在完成验证后删除对应的记录。
      acme.sh 目前支持超过一百家的 DNS API。
      Aliyun 为例,获取 API Key 并执行:
      export Ali_Key="LTAI5**************"
      export Ali_Secret="SkYA**************"
      
      现在我们可以签发通配符证书了:
      /root/.acme.sh/acme.sh --issue --dns dns_ali -d example.cn -d *.example.cn
      
      Ali_KeyAli_Secret将保存在 ~/.acme.sh/account.conf 中,并在需要时自动获取,无需手动再设置。
      更详细的 DNS API 用法: https://github.com/acmesh-official/acme.sh/wiki/dnsapi
3. 安装证书到服务
  • Apache 示例

    acme.sh --install-cert -d example.com \
    --cert-file /path/to/certfile/in/apache/cert.pem \
    --key-file /path/to/keyfile/in/apache/key.pem \
    --fullchain-file /path/to/fullchain/certfile/apache/fullchain.pem \
    --reloadcmd "service apache2 force-reload"
    
  • Nginx 示例

    acme.sh --install-cert -d example.com \
    --key-file /path/to/keyfile/in/nginx/key.pem \
    --fullchain-file /path/to/fullchain/nginx/cert.pem \
    --reloadcmd "service nginx reload"
    

Nginx 的配置项 ssl_certificate 需要使用 /etc/nginx/ssl/fullchain.cer ,而非 /etc/nginx/ssl/.cer ,否则 SSL Labs 的测试会报证书链问题(Chain issues Incomplete)。

默认情况下,证书每 60 天更新一次(可自定义)。更新证书后,Apache 或者 Nginx 服务会通过 reloadcmd 传递的命令自动重载配置。

注意:reloadcmd 非常重要。证书会自动申请续签,但是如果没有正确的 reloadcmd 命令,证书可能无法被重新应用到 Apache 或者 Nginx,因为配置没有被重载。

4. 查看已安装证书的信息

利用 Acme.sh 可以轻松查看任何已签发证书的详细信息。

acme.sh --info -d example.com

上述命令将显示证书的配置,包括证书的创建时间、下次续签时间以及用于自动更新服务配置的命令等。

5. 更新证书

证书每 60 天自动更新,无需用户手动操作。不过,也可以使用强制更新命令重新续签证书:

acme.sh --renew -d example.com --force
6. 修改 reloadcmd

修改 reloadcmd 虽然没有专门的命令,但可以通过重新安装证书时指定来实现。此外,证书信息存储在 ~/.acme.sh/example.com/example.conf 文件中,用 Base64 编码保存了 reloadcmd。理论上,可以直接编辑此文件并解码修改,但官方不推荐该方法,因为文件格式可能会变化。

7. 更新 Acme.sh

Acme.sh 持续开发中,为了获得最新的功能和修复,建议定期更新。

  • 手动更新

    acme.sh --upgrade
    
  • 自动更新
    开启自动更新,Acme.sh 将自动保持最新版本。

    acme.sh --upgrade --auto-upgrade
    

    随时关闭自动更新:

    acme.sh --upgrade --auto-upgrade 0
    
8. 出错怎么办?

遇到错误时,可以添加 --debug 参数获取更详细的调试信息,帮助诊断问题所在。

  • 基本调试
    acme.sh --issue ... --debug
    
  • 高级调试
    acme.sh --issue ... --debug 2
    

如在 DNS 验证中遇到超时问题,可能是网络环境问题,可以设置 HTTP 或 HTTPS 代理环境变量解决。

export http_proxy="socks5h://localhost:1081"
export https_proxy="socks5h://localhost:1081"

如果遇到更复杂的问题,可以参考官方提供的调试指南:https://github.com/acmesh-official/acme.sh/wiki/How-to-debug-acme.sh

以上是利用 Acme.sh 生成和管理证书的基本指南,但其功能远不止于此,更多高级用法可查看官方文档:https://github.com/acmesh-official/acme.sh/wiki/

相关文章:

使用 Acme.sh 自动生成和续签免费 SSL 证书(含通配符支持)

Acme.sh 是一个开源的脚本,能够从 ZeroSSL、Let’s Encrypt 等证书颁发机构(CA)获取免费的 HTTPS 证书。该脚本特别简单易用,并且支持多种验证方式。下面将详细介绍使用 Acme.sh 生成、安装和更新证书的各个步骤。 Github地址 使用…...

Android 图形系统之四:Choreographer

Choreographer 是 Android 系统中负责帧同步的核心组件,它协调输入事件、动画和绘制任务,以确保界面以固定频率(通常是每 16ms,一帧)流畅渲染。通过管理 VSYNC 信号和调度任务,Choreographer 是实现流畅 UI…...

CAP定理和BASE理论

CAP定理 CAP定理,也称为布鲁尔定理(Brewer’s Theorem),是分布式系统设计中的一个基本原理。它指出在分布式系统中,一致性(Consistency)、可用性(Availability)和分区容…...

笔记软件:我来、思源笔记、Obsidian、OneNote

最近wolai的会员到期了,促使我更新了一下笔记软件。 首先,wolai作为一个笔记软件,我觉得有很多做得不错的方面(否则我也不会为它付费2年了),各种功能集成得很全(公式识别这个功能我写论文的时候…...

试探互联网如何工作?

Reading: How_does_the_Internet_workhow-does-internet-work Watching:How the Internet Works in 5 Minutes Outline: 互联网通过全球互联的计算机和服务器网络工作,通过标准化协议进行通信。数据被分解成数据包,并使用互联…...

【c++笔试强训】(第三十篇)

目录 爱丽丝的⼈偶(贪⼼构造) 题目解析 讲解算法原理 编写代码 集合(排序) 题目解析 讲解算法原理 编写代码 爱丽丝的⼈偶(贪⼼构造) 题目解析 1.题目链接:登录—专业IT笔试面试备考平…...

微信小程序购物车全选反选功能以及合计

微信小程序基于Vant Weapp的购物车功能实现 1、单选 使用微信小程序原生表单组件checkbox和checkbox-group 注意&#xff1a;checkbox原生不支持bind:change事件&#xff0c;checkbox-group支持 <checkbox-group bindchange"handleCheck"><checkbox val…...

vue-qr在线生成二维码组件(vue2版本)

在对于二维码生成中有许多组件&#xff0c;下面介绍关于自定义比较高的vue-qr组件&#xff0c;能自定义设置背景颜色、背景图片、背景Gif图、实点和空白区的颜色、中心Logo的图片和边距。 依赖下载 注意&#xff1a; 直接npm下载最新版 有些项目可能运行会抱错 这时候你可以降…...

大语言模型技术相关知识-笔记整理

系列文章目录 这个系列攒了很久。主要是前段之间面试大语言模型方面的实习&#xff08;被拷打太多次了&#xff09;&#xff0c;然后每天根据面试官的问题进行扩展和补充的这个笔记。内容来源主要来自视频、个人理解以及官方文档中的记录。方便后面的回顾。 文章目录 系列文章…...

SCP命令实现Linux中的文件传输

CP命令的主要作用是实现Linux与Linux系统之间的文件传输。 SCP命令时基于SSH协议,所以两台服务器的sshd服务必须处于开启状态,否则无法完成上传与下载操作。 #1.上传文件 scp linux本地文件路径 远程用户名@linux主机地址:远程路径 #2.下载文件 scp 远程用户名@linux主机地址…...

linux环境中后台运行java程序

在生产环境&#xff0c;我们通常需要让java进程后台运行&#xff0c;并且即使会话关闭&#xff0c;进程也依然存在。 使用的命令&#xff1a; nohup java -jar xxx.jar -> aaa.log 2>&1 & 详细介绍下上面这条命令 &#xff08;1&#xff09;nohup&#xff1a;…...

Go学习:变量

目录 1. 变量的命名 2. 变量的声明 3. 变量声明时注意事项 4. 变量的初始化 5. 简单例子 变量主要用来存储数据信息&#xff0c;变量的值可以通过变量名进行访问。 1. 变量的命名 在Go语言中&#xff0c;变量名的命名规则 与其他编程语言一样&#xff0c;都是由字母、数…...

在Unity编辑模式下运行Mono中的方法

[ExecuteAlways] 最简单的方法当然是直接给Mono加上[ExecuteAlways]修饰&#xff0c;这样Mono中的Awake&#xff0c;Update等等都可以在编辑模式下按照原本的时机运行。 [ExecuteAlways] public class TestScript : MonoBehaviour {void TestMethod(){Debug.Log("TestMe…...

Y20030028 JAVA+SSM+MYSQL+LW+基于JAVA的考研监督互助系统的设计与实现 源代码 配置 文档

基于JAVA的考研监督互助系统 1.项目描述2. 课题开发背景及意义3.项目功能4.界面展示5.源码获取 1.项目描述 随着高等教育的普及和就业竞争的加剧&#xff0c;越来越多的学生选择继续深造&#xff0c;参加研究生入学考试。考研人数的不断增加&#xff0c;使得考研过程中的学习监…...

MATLAB期末复习笔记(下)

目录 五、数据和函数的可视化 1.MATLAB的可视化对象 2.二维图形的绘制 3.图形标识 4.多子图绘图 5.直方图的绘制 &#xff08;1&#xff09;分类 &#xff08;2&#xff09;垂直累计式 &#xff08;3&#xff09;垂直分组式 &#xff08;4&#xff09;水平分组式 &…...

「Mac畅玩鸿蒙与硬件37」UI互动应用篇14 - 随机颜色变化器

本篇将带你实现一个随机颜色变化器应用。用户点击“随机颜色”按钮后&#xff0c;界面背景会随机变化为淡色系颜色&#xff0c;同时显示当前的颜色代码&#xff0c;页面还会展示一只猫咪图片作为装饰&#xff0c;提升趣味性。 关键词 UI互动应用随机颜色生成状态管理用户交互…...

MySql:理解数据库

目录 一、什么是数据库 第一层理解 第二层理解 第三层理解 二、Linux下的数据库 三、基本认识 登录数据库时&#xff0c; mysql -u root -h 127.0.0.1 -P 3306 -p -h指定MySql服务器所在主机&#xff0c;若在本地则为回环地址。-P表示目标主机上MySql服务端口号 一般简单…...

学习笔记051——SpringBoot学习2

文章目录 Spring Boot 原理1、SpringBootConfiguration2、ConfigurationProperties3、ComponentScan4、EnableAutoConfiguration Spring Boot 原理 Spring Boot 可以自动读取配置文件&#xff0c;将项目所需要的组件全部自动加载到 IoC 容器中&#xff0c;包括两部分 开发者自…...

crush rule 20 type does not match pool

问题 kubectl describe CephObjectStore ceph-objectstoreEvents:Type Reason Age From Message---- ------ ---- ---- -------Warning ReconcileFailed 14m …...

BA是什么?

目录 1.EKF的步骤 一、问题定义与模型建立 二、线性化处理 三、应用卡尔曼滤波 四、迭代与收敛 五、结果评估与优化 注意事项 2.BA问题的步骤 一、问题定义与数据准备 二、构建优化模型 三、选择优化算法 四、执行优化过程 五、结果评估与优化 六、应用与验证 1.…...

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…...

React第五十七节 Router中RouterProvider使用详解及注意事项

前言 在 React Router v6.4 中&#xff0c;RouterProvider 是一个核心组件&#xff0c;用于提供基于数据路由&#xff08;data routers&#xff09;的新型路由方案。 它替代了传统的 <BrowserRouter>&#xff0c;支持更强大的数据加载和操作功能&#xff08;如 loader 和…...

【Go】3、Go语言进阶与依赖管理

前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课&#xff0c;做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程&#xff0c;它的核心机制是 Goroutine 协程、Channel 通道&#xff0c;并基于CSP&#xff08;Communicating Sequential Processes&#xff0…...

selenium学习实战【Python爬虫】

selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...

是否存在路径(FIFOBB算法)

题目描述 一个具有 n 个顶点e条边的无向图&#xff0c;该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序&#xff0c;确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数&#xff0c;分别表示n 和 e 的值&#xff08;1…...

代码随想录刷题day30

1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币&#xff0c;另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额&#xff0c;返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...

【Linux系统】Linux环境变量:系统配置的隐形指挥官

。# Linux系列 文章目录 前言一、环境变量的概念二、常见的环境变量三、环境变量特点及其相关指令3.1 环境变量的全局性3.2、环境变量的生命周期 四、环境变量的组织方式五、C语言对环境变量的操作5.1 设置环境变量&#xff1a;setenv5.2 删除环境变量:unsetenv5.3 遍历所有环境…...

人工智能--安全大模型训练计划:基于Fine-tuning + LLM Agent

安全大模型训练计划&#xff1a;基于Fine-tuning LLM Agent 1. 构建高质量安全数据集 目标&#xff1a;为安全大模型创建高质量、去偏、符合伦理的训练数据集&#xff0c;涵盖安全相关任务&#xff08;如有害内容检测、隐私保护、道德推理等&#xff09;。 1.1 数据收集 描…...

【FTP】ftp文件传输会丢包吗?批量几百个文件传输,有一些文件没有传输完整,如何解决?

FTP&#xff08;File Transfer Protocol&#xff09;本身是一个基于 TCP 的协议&#xff0c;理论上不会丢包。但 FTP 文件传输过程中仍可能出现文件不完整、丢失或损坏的情况&#xff0c;主要原因包括&#xff1a; ✅ 一、FTP传输可能“丢包”或文件不完整的原因 原因描述网络…...

java高级——高阶函数、如何定义一个函数式接口类似stream流的filter

java高级——高阶函数、stream流 前情提要文章介绍一、函数伊始1.1 合格的函数1.2 有形的函数2. 函数对象2.1 函数对象——行为参数化2.2 函数对象——延迟执行 二、 函数编程语法1. 函数对象表现形式1.1 Lambda表达式1.2 方法引用&#xff08;Math::max&#xff09; 2 函数接口…...