Acme.sh 自动生成、续期 ​Let‘s Encrypt 免费SSL证书

​​Let's Encrypt 提供了90天免费证书,而 acme.sh 实现了 acme 协议, 可以从 ​​Let's Encrypt 生成免费的证书.,通过计划任务可实现自动续期,自动部署,完全摆脱了人工,懒人必备。

Acme.sh 官方资料:

https://github.com/acmesh-official/acme.sh

安装:

$ curl https://get.acme.sh | sh

安装目录为 home 下的 .acme.sh,如 root 用户: /root/.acme.sh

生成证书:

$ acme.sh --register-account -m i@liu12.com --issue --debug \ 
    --dns dns_ali \
    -e Ali_Key="xxxxxx" \ 
    -e Ali_Secret="xxxxxx" \
    -d liu12.com -d *.liu12.com

参数解释:

--register-account

自动注册账号

-m i@liu12.com 

自动注册账号的邮箱

--issue

生成证书

--debug

显示调试信息,会输出执行过程中的详细信息,方便发现问题

--dns dns_ali.

通过 DNS 接口验证域名(本例阿里云域名),另有 http 方式验证 --webroot,不推荐使用。因为它不支持生成通配符域名证书(即示例中的 *.liu12.com)
如查你蚬到以下报错,就是这个问题了

The supported validation types are: dns-01 , but you specified: http-01

-e Ali_Key="xxxxxx"
-e Ali_Secret="xxxxxx"

这两个是阿里云的 AccessKey,阿里云两主账号和子账号两种,分配好权限后都可以使用。

-d liu12.com
-d *.liu12.com

要生成证书的域名,可用通配符 *

如果是腾讯的 dnspod 域名,则命令行为:

$ acme.sh --register-account -m i@liu12.com --issue --debug \ 
    --dns dns_dp \
    -e DP_Id="xxxxxx" \ 
    -e DP_Key="xxxxxx" \
    -d liu12.com -d *.liu12.com

国内主要这两家,如果是其它域名,请参考:

dnsapi · acmesh-official/acme.sh Wiki · GitHub

成功生成证书后,在 ~/acme.sh 目录下,将产生一个目录,本例中为 "liu12.com"

目录下的文件结构如下:

其中,liu12.com.cer 和 fullchain.cer  是证书,fullchain.cer 为完整的证书链,一般使用 fullchain.cer, liu12.com.key; 为私钥,配置到 nginx 中示例:

server {
    listen 443 ssl;
    server_name www.liu12.com;

    ssl_certificate /***/liu12.com/fullchain.cer;
    ssl_certificate_key /***/liu12.com/liu12.com.key;
    // ......
}

重启下 nginx,您的域名就可以通过 https 访问了

crontab -e 查看计划任务,发现Acme.sh 已自动创建了一条定时任务,每天都会检查,证书到期前 30 天,将自动续期

40 0 * * *  /***/.acme.sh  --cron --home "/***/.acme.sh" > /dev/null

实际应用中,我们不需要这么频繁,因为会提前 30 天续期,因此每周运行一次即可,本例设置为每周一的 2:15。

15 2 * * 1 /***/.acme.sh --cron --home "/***/.acme.sh" > /dev/null

计划任务中可另加一条  3:15 重启 nginx,即执行更新证书后1小时,重新加载 nginx

15 2 * * 1 /***/.acme.sh --cron --home "/***/.acme.sh" > /dev/null
15 3 * * 1 /***/nginx -s reload

有的小伙伴可能担心 nginx 有一段时间使用旧证书是否有问题,这个可以放心,我们测试过,新旧两套证书同时都是有效的!

另外,acme.sh 也有一个 docker 封装,使用起来更加方便

docker run --rm -itd -v /cert:/acme.sh \ 
    -e Ali_Key="xxxxxx" -e Ali_Secret="xxxxxx" \
    --name=acme.sh neilpang/acme.sh daemon

docker 运行 neilpang/acme.sh 镜像,参数与命令行方式类似。docker 提供了 -v 参数,可以将存放证书的目录挂载在外部,这里用了 /cert,成功运行后, 通过 docker ps 命令可看看取启动了个 名叫 "acme.sh" 的容器,它是一个基础工具,可以重复便用它生成域名证书

docker exec acme.sh --register-account -m i@liu12.com \
     --issue --debug --dns dns_ali -d liu12.com -d *.liu12.com

执行完成后,在 /cert 目录下同样出现了 liu12.com. 的证书目录

添加计划任务,自动对证书续期

15 2 * * 1 docker exec acme.sh --cron


阿里云的域名请注意

阿里云主账号本身的 accessKey,权限足够大,可以忽略这个问题,如果你使用了阿里云的 子账号 AccessToken,可能会遇到下边错误:

Error add txt for domain:_acme-challenge.liu12.com

这个是权限问题,在子账号权限配置里,有两项域名权限:

AliyunDomainFullAccess   -  管理域名服务的权限
AliyunDNSFullAccess - 管理云解析(DNS)的权限

注意,一定要加下边这个 解析 权限

腾讯云的 dnspod 域名

​最近使用 acme.sh 对 腾讯云 dnspod 带通配符域名 生成证书时,没有什么报错,证书也成功生成了,但是查看证书数据,并不包含通配符域名。一直没有研究出来原因,放弃了,如有遇到类似问题的朋友一起切磁切磁

本文原始网址:Acme.sh 自动更新 Lets Encrypt 证书,转载请保留出处

 

<think>好的,用户现在问的是关于在CentOS 7.9上安装acme.sh的问题。我需要先回顾之前的对话历史,看看是否有相关的上下文。之前用户询问的是MySQL 8的ALTER USER root的问题,而这次是关于acme.sh的安装,看起来是一个新的话题。不过,可能用户是在进行服务器配置,先处理了数据库的安全设置,现在需要配置SSL证书,所以转向了acme.sh的安装。 用户的需求可能是想通过acme.sh来自动化申请和管理Let's EncryptSSL证书。CentOS 7.9是一个比较旧的系统,但依然广泛使用,所以用户可能是在维护现有的服务器环境。需要确保提供的步骤在CentOS 7.9上有效,并且考虑到可能的依赖问题。 首先,我需要考虑acme.sh的基本安装步骤。通常,安装acme.sh可以通过curl或者wget下载脚本,然后执行安装。但CentOS 7.9默认可能没有安装git或者curl,所以需要先安装这些依赖。另外,用户可能需要配置cron任务来自动续期证书,这部分也需要说明。 然后,用户可能关心的是如何申请证书,比如使用standalone模式还是webroot模式,或者DNS API验证。不同的模式适用不同的场景,需要解释清楚。例如,如果用户已经有Web服务器运行,使用webroot模式可能更合适,而standalone模式可能需要暂时关闭占用80端口的服务。 另外,CentOS 7.9的防火墙是firewalld,可能需要开放80和443端口,或者在申请证书时临时允许这些端口。这也是需要提到的细节,避免用户遇到连接问题。 还有,证书申请后的安装步骤,如何将证书配置到Nginx或Apache中,可能需要给出示例路径和配置片段,但用户可能只需要安装步骤,后续配置可以根据具体的服务器软件调整。不过,提供一些常见服务器的示例会更有帮助。 在安装过程中,可能会遇到依赖问题,比如socat是否安装,或者权限问题,需要提醒用户注意。此外,acme.sh的自动更新功能是否启用,以及如何升级现有的acme.sh脚本,这些也是用户可能关心的问题。 最后,用户可能对安全性有要求,比如使用root还是普通用户安装,是否需要配置sudo权限等。需要建议最佳实践,比如使用普通用户安装,避免使用root权限,以增强安全性。 总结下来,回答的结构应该是先介绍acme.sh,然后详细步骤包括安装依赖、安装脚本、配置环境变量,接着是申请证书的不同方法,续期配置,安装证书到指定目录,以及常见问题和注意事项。同时,要提醒用户关于防火墙的设置和安全性建议,确保他们能够顺利完成安装并正确使用acme.sh管理证书。</think>以下是针对 **CentOS 7.9** 系统使用 `acme.sh` 安装和管理 Let's Encrypt SSL 证书的详细指南: --- ### **1. 安装前准备** #### **1.1 安装依赖工具** ```bash # 更新系统 sudo yum update -y # 安装必要工具(curl、git、socat等) sudo yum install -y curl git socat cronie ``` #### **1.2 启动并启用 cron 服务** ```bash sudo systemctl start crond sudo systemctl enable crond ``` --- ### **2. 安装 `acme.sh`** #### **2.1 下载并安装脚本** ```bash # 使用 curl 安装 curl https://get.acme.sh | sh # 或使用 git 克隆仓库 git clone https://github.com/acmesh-official/acme.sh.git cd acme.sh ./acme.sh --install ``` #### **2.2 配置环境变量** ```bash # 加载 acme.sh 环境变量 source ~/.bashrc # 验证安装 acme.sh -- ### **3. 申请 SSL 证书** #### **3.1 方法 1:Standalone 模式(自动验证)** 适用于服务器未运行 Web 服务时,自动监听 80 端口验证域名所有权。 ```bash # 临时关闭占用 80 端口的服务(如 Nginx/Apache) sudo systemctl stop nginx # 申请证书(替换 yourdomain.com 为实际域名) acme.sh --issue --standalone -d yourdomain.com # 重启 Web 服务 sudo systemctl start nginx ``` #### **3.2 方法 2:Webroot 模式** 适用于已运行 Web 服务时,通过文件验证域名所有权。 ```bash # 创建验证目录 mkdir -p /var/www/html/.well-known/acme-challenge # 申请证书(指定 Web 根目录) acme.sh --issue -d yourdomain.com -w /var/www/html ``` #### **3.3 方法 3:DNS API 验证** 适用于通过 DNS 提供商 API 自动验证(支持阿里云、Cloudflare 等)。 ```bash # 以阿里云 DNS 为例 export Ali_Key="Your_Aliyun_AccessKey" export Ali_Secret="Your_Aliyun_AccessSecret" # 申请证书 acme.sh --issue --dns dns_ali -d yourdomain.com -d *.yourdomain.com ``` --- ### **4. 安装证书到指定目录** ```bash # 创建证书存储目录 sudo mkdir -p /etc/ssl/yourdomain.com # 复制证书文件(替换 yourdomain.com 为实际域名) acme.sh --install-cert -d yourdomain.com \ --key-file /etc/ssl/yourdomain.com/private.key \ --fullchain-file /etc/ssl/yourdomain.com/fullchain.cer \ --reloadcmd "sudo systemctl reload nginx" ``` -- ### **5. 自动续期配置** `acme.sh` 默认已配置自动续期任务(通过 cron 实现),无需手动操作: ```bash # 查看 cron 任务 crontab -l | grep acme.sh ``` -- ### **6. 防火墙配置(如启用 firewalld)** ```bash # 开放 HTTP/HTTPS 端口 sudo firewall-cmd --add-service=http sudo firewall-cmd --add-service=https sudo firewall-cmd --reload ``` --- ### **7. 常见问题** #### **7.1 证书续期失败** - **原因**:DNS 解析未生效、API 密钥错误或端口被占用。 - **解决**: ```bash # 手动强制续期 acme.sh --renew -d yourdomain.com --force ``` #### **7.2 权限不足** - **表现**:`acme.sh` 提示无法写入文件。 - **解决**: ```bash # 使用 root 用户安装或添加 sudo 权限 sudo chmod 755 /etc/ssl/yourdomain.com ``` --- ### **8. 注意事项** 1. **域名解析**:确保域名已正确解析到服务器 IP。 2. **证书路径**:Nginx/Apache 配置中需指定证书路径(参考 `/etc/ssl/yourdomain.com`)。 3. **备份证书**:定期备份 `/etc/ssl` 目录下的证书文件。 4. **安全建议**: - 使用 DNS API 验证时,保护 API 密钥。 - 避免使用 `root` 用户直接操作。 --- ### **示例:Nginx 配置片段** ```nginx server { listen 443 ssl; server_name yourdomain.com; ssl_certificate /etc/ssl/yourdomain.com/fullchain.cer; ssl_certificate_key /etc/ssl/yourdomain.com/private.key; # 其他配置... } ``` -- 通过以上步骤,您可以在 CentOS 7.9 上快速部署 `acme.sh` 并自动化管理 SSL 证书
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值