当前位置: 首页 > 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.…...

第19节 Node.js Express 框架

Express 是一个为Node.js设计的web开发框架&#xff0c;它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用&#xff0c;和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...

大数据学习栈记——Neo4j的安装与使用

本文介绍图数据库Neofj的安装与使用&#xff0c;操作系统&#xff1a;Ubuntu24.04&#xff0c;Neofj版本&#xff1a;2025.04.0。 Apt安装 Neofj可以进行官网安装&#xff1a;Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...

Admin.Net中的消息通信SignalR解释

定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...

java 实现excel文件转pdf | 无水印 | 无限制

文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...

Qt Widget类解析与代码注释

#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码&#xff0c;写上注释 当然可以&#xff01;这段代码是 Qt …...

从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路

进入2025年以来&#xff0c;尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断&#xff0c;但全球市场热度依然高涨&#xff0c;入局者持续增加。 以国内市场为例&#xff0c;天眼查专业版数据显示&#xff0c;截至5月底&#xff0c;我国现存在业、存续状态的机器人相关企…...

(二)原型模式

原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...

[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)

宇树机器人多姿态起立控制强化学习框架论文解析 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架&#xff08;一&#xff09; 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...

GC1808高性能24位立体声音频ADC芯片解析

1. 芯片概述 GC1808是一款24位立体声音频模数转换器&#xff08;ADC&#xff09;&#xff0c;支持8kHz~96kHz采样率&#xff0c;集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器&#xff0c;适用于高保真音频采集场景。 2. 核心特性 高精度&#xff1a;24位分辨率&#xff0c…...