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

HTML 语义化

目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案&#xff1a; 语义化标签&#xff1a; <header>&#xff1a;页头<nav>&#xff1a;导航<main>&#xff1a;主要内容<article>&#x…...

超短脉冲激光自聚焦效应

前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应&#xff0c;这是一种非线性光学现象&#xff0c;主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场&#xff0c;对材料产生非线性响应&#xff0c;可能…...

可靠性+灵活性:电力载波技术在楼宇自控中的核心价值

可靠性灵活性&#xff1a;电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中&#xff0c;电力载波技术&#xff08;PLC&#xff09;凭借其独特的优势&#xff0c;正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据&#xff0c;无需额外布…...

连锁超市冷库节能解决方案:如何实现超市降本增效

在连锁超市冷库运营中&#xff0c;高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术&#xff0c;实现年省电费15%-60%&#xff0c;且不改动原有装备、安装快捷、…...

Cinnamon修改面板小工具图标

Cinnamon开始菜单-CSDN博客 设置模块都是做好的&#xff0c;比GNOME简单得多&#xff01; 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...

IT供电系统绝缘监测及故障定位解决方案

随着新能源的快速发展&#xff0c;光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域&#xff0c;IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选&#xff0c;但在长期运行中&#xff0c;例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...

AspectJ 在 Android 中的完整使用指南

一、环境配置&#xff08;Gradle 7.0 适配&#xff09; 1. 项目级 build.gradle // 注意&#xff1a;沪江插件已停更&#xff0c;推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...

Java线上CPU飙高问题排查全指南

一、引言 在Java应用的线上运行环境中&#xff0c;CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时&#xff0c;通常会导致应用响应缓慢&#xff0c;甚至服务不可用&#xff0c;严重影响用户体验和业务运行。因此&#xff0c;掌握一套科学有效的CPU飙高问题排查方法&…...

九天毕昇深度学习平台 | 如何安装库?

pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子&#xff1a; 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...

GruntJS-前端自动化任务运行器从入门到实战

Grunt 完全指南&#xff1a;从入门到实战 一、Grunt 是什么&#xff1f; Grunt是一个基于 Node.js 的前端自动化任务运行器&#xff0c;主要用于自动化执行项目开发中重复性高的任务&#xff0c;例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...