使用ACME实现SSL证书自动签发

本文将介绍使用 acme.sh 配置签发以及自动续签 SSL 证书。

本文将介绍使用 acme.sh 配置签发以及自动续签 SSL 证书。

安装 acme.sh

acme.sh 是一个集成了 ACME 客户端协议的 Bash 脚本,按照官方文档说明,我们直接在 Linux 下安装。

后面的email参数填写你的邮箱,与申请证书相关的信息将会发到这个邮箱地址

curl https://get.acme.sh | sh -s [email protected]

注意:如果安装完成后提示 -bash: acme.sh: command not found,需要手动执行 source ~/.bashrc

使用 HTTP 验证签发证书

首先我们要做一下准备工作,假设你域名是 example.com,解析到你的服务器让其生效后,我们建立一个目录用于申请证书时验证网站所有权:

mkdir -p /var/www/letsencrypt

如果你使用的是Nginx,那么你需要在对应站点的Nginx配置中加入.well-known/acme-challenge页面的映射

server {
	listen 80;
	listen [::]:80;
	server_name example.com;

	location /.well-known/acme-challenge {
		root /var/www/letsencrypt;
	}

}

我们以 Let's Encrypt 为例,直接在终端运行

acme.sh --issue -d example.com -w /var/www/letsencrypt

当你看到以下日志时,证明证书申请完成

root@debian:~/.acme.sh# acme.sh --issue -d example.com -w /var/www/letsencrypt
[Sat 03 May 2025 11:44:03 AM EDT] Using CA: https://acme-v02.api.letsencrypt.org/directory
[Sat 03 May 2025 11:44:04 AM EDT] Single domain='example.com'
[Sat 03 May 2025 11:44:06 AM EDT] Getting webroot for domain='example.com'
[Sat 03 May 2025 11:44:06 AM EDT] Verifying: example.com
[Sat 03 May 2025 11:44:07 AM EDT] Pending. The CA is processing your order, please wait. (1/30)
[Sat 03 May 2025 11:44:10 AM EDT] Success
[Sat 03 May 2025 11:44:11 AM EDT] Verification finished, beginning signing.

执行完成后,日志会显示证书存放的位置,此时你可以在Nginx配置里安装对应证书

ssl_certificate          /data/ca/fullchain.pem; # 域名证书路径
ssl_certificate_key      /data/ca/key.pem;       # 域名私钥路径

这里需要注意把得到的证书和私钥文件后缀改为.pem格式,否则Nginx无法正常启动

acme.sh官方文档

这里给出acme.sh官方的中文文档,可供参考

地址:https://github.com/acmesh-official/acme.sh/wiki/%E8%AF%B4%E6%98%8E

LICENSED UNDER CC BY-NC-SA 4.0
Comment