如果您在 Plesk 上管理网站,就没有理由再手动处理证书了。通过正确的设置,您可以使用带有外部账户绑定 (EAB) 的 ACME 协议自动签发、更新和安装 SSL 证书。

本指南将向你展示如何使用ACME.sh 在 Plesk(基于 Linux)上安装 ACME SSL 证书,ACME.sh 是一个轻量级 ACME 客户端,可与 Plesk 顺利配合。
如果您使用的是共享主机,可能无法使用这种方法。大多数共享环境不允许 root 访问或自定义脚本。本指南适用于 VPS 和专用服务器,在这些服务器上,您可以控制主机堆栈。
开始之前
在进入步骤之前,请确保您已准备好以下内容:
- 装有Plesk Obsidian的服务器或 VPS
- 通过 SSH 访问服务器。root 或具有 sudo 权限的用户
- 通过 A 或 AAAA 记录指向服务器的实时域
- 80 端口开放并可公开访问(HTTP-01 验证所需的端口)
- SSL 提供商提供的 EAB 证书(EAB KID 和 EAB HMAC 密钥)
要使用的 ACME 端点:
- Sectigo: https://acme.sectigo.com/v2/DV
- DigiCert: https://acme.digicert.com/v2/acme
步骤 1:在 Plesk 中检查网站的文档根目录
您需要提供网站根目录的路径,以便ACME.sh正确放置验证文件。
- 登录 Plesk
- 转至网站和域名 > yourdomain.com > 托管设置
- 复制文档根值。它看起来像/var/www/vhosts/yourdomain.com/httpdocs
- 请随身携带这条路径,在后面的步骤中会用到它。
第 2 步:启用 SSH 访问(如需要)
如果您的托管计划没有启用 SSH:
- 转至网站和域名 > yourdomain.com > 虚拟主机访问
- 在通过 SSH 访问服务器下,选择/bin/bash或/usr/bin/bash
- 保存设置
如果您使用的是托管/共享主机,请联系支持部门申请 SSH 访问权限。
第 3 步:通过 SSH 连接到服务器
从本地终端连接服务器:
ssh [email protected]
或者,如果使用的是非根用户:
ssh [email protected]
步骤 4:安装 ACME.sh
运行官方安装程序:
curl https://get.acme.sh | sh
source ~/.bashrc
然后检查版本,确认已安装:
acme.sh --version
如果失败,请确保已安装curl 和git 。如有需要,您可以使用--force 重新运行安装。
步骤 5:在 EAB 注册账户
ACME 注册是一次性设置,可将服务器与证书颁发机构链接起来,以便自动验证和处理未来的证书请求。
该命令使用唯一的 EAB 凭据向 SSL 提供商(Sectigo 或 DigiCert)注册 ACME 帐户。
acme.sh --register-account \
--server https://acme.sectigo.com/v2/DV \
--eab-kid YOUR_EAB_KID \
--eab-hmac-key YOUR_EAB_HMAC_KEY \
--accountemail [email protected]
以下是每个部分的含义:
acme.sh --register-account– 开始 ACME 账户注册--server– 您的提供商的 ACME URL(Sectigo 或 DigiCert)--eab-kid– 提供商提供的 EAB 密钥 ID--eab-hmac-key– 您的 EAB HMAC 密钥(长字符串)--accountemail– 您的 ACME 账户联系电子邮件
该命令必须使用您的真实 EAB 详情和电子邮件地址进行定制。请勿原样复制。
如果不输入占位符(如YOUR_EAB_KID ),命令会因身份验证错误而失败。
一旦运行成功,你的服务器现在就有权向该提供商申请 SSL 证书;除非你更换提供商或证书,否则今后无需再次注册。
步骤 6:准备 HTTP 验证
创建 ACME 挑战目录:
mkdir -p /var/www/vhosts/yourdomain.com/httpdocs/.well-known/acme-challenge
然后测试它是否能正常工作:
echo "ok" > /var/www/vhosts/yourdomain.com/httpdocs/.well-known/acme-challenge/testfile
curl -I http://yourdomain.com/.well-known/acme-challenge/testfile
您应该看到 HTTP/1.1 200 OK. 如果没有,请检查防火墙规则、80 端口访问或文档根路径。
步骤 7:绕过 ACME 路径的强制 HTTPS
如果您的网站将所有流量重定向到 HTTPS,就会破坏 HTTP-01 验证,除非您允许挑战文件夹绕过它。
如果您使用 Apache(Plesk Linux 上的默认设置)
编辑文档根目录下的.htaccess文件,并将此添加到顶部:
RewriteEngine On
RewriteRule ^.well-known/acme-challenge/ - [L]
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
如果您使用的是 Nginx(或 Nginx 是 Apache 的前置设备)
Apache.htaccess在这里帮不上忙,因为 Nginx 会首先处理重定向。相反,您需要在 Plesk 中添加一个自定义 Nginx 指令:
- 转到网站和域 > yourdomain.com > Apache 和 Nginx 设置
- 找到标有附加 Nginx 指令的字段
- 将此粘贴进去:
location ^~ /.well-known/acme-challenge/ {
root /var/www/vhosts/yourdomain.com/httpdocs;
allow all;
try_files $uri =404;
}
这将告诉 Nginx 直接提供挑战路径,而不是 HTTPS 重定向或代理到 Apache。保存并应用更改。
步骤 8:颁发证书
现在您可以申请证书了。下面是一个使用 Sectigo 和两个域名变体的示例:
acme.sh --issue \
-d yourdomain.com \
-d www.yourdomain.com \
-w /var/www/vhosts/yourdomain.com/httpdocs \
--server https://acme.sectigo.com/v2/DV
您可以根据需要添加-d 标志。证书签发后,ACME.sh 会将所有内容保存到以下文件夹:/root/.acme.sh/yourdomain.com/
Plesk 需要两个文件:
- yourdomain.com.key:这是您的私人密钥
- fullchain.cer: 这是您的证书文件,包含完整的证书链(您的证书 + CA 链)
这些文件将由您上传或在 CLI 中使用,以便将证书安装到 Plesk 中。
第 9 步:通过用户界面将证书导入 Plesk
- 转至网站和域名 > yourdomain.com > SSL/TLS 证书
- 单击添加 SSL/TLS 证书
- 上传证书 (选择fullchain.cer)和私钥(选择yourdomain.com.key)。 点击保存
- 返回 “托管设置”,在SSL/TLS 支持部分选择该证书
- 单击确定 或应用
您的域名现在使用第三方 ACME SSL 证书。
第 10 步通过 Plesk CLI 自动导入(可选,适用于 Cron)
要在今后续费时自动申请证书,请使用 CLI:
plesk bin certificate -c "acme-yourdomain" \
-domain yourdomain.com \
-cert-file /root/.acme.sh/yourdomain.com/fullchain.cer \
-key-file /root/.acme.sh/yourdomain.com/yourdomain.com.key
plesk bin domain -u yourdomain.com -ssl true -certificate-name "acme-yourdomain"
plesk bin httpdmng --reconfigure-domain yourdomain.com
如果 plesk 命令无法识别,请尝试完整路径:/usr/sbin/plesk bin …
第 11 步:使用部署脚本自动续订
ACME.sh 会在证书到期前 30 天自动更新证书。但我们会在更新后添加一个钩子,将它们自动应用到 Plesk。
1.创建部署脚本
nano /usr/local/bin/plesk-acme-deploy.sh
粘贴以下内容:
#!/usr/bin/env bash
set -euo pipefail
DOMAIN="yourdomain.com"
CERT_DIR="/root/.acme.sh/${DOMAIN}"
CERT_NAME="acme-${DOMAIN}"
CERT_FILE="${CERT_DIR}/fullchain.cer"
KEY_FILE="${CERT_DIR}/${DOMAIN}.key"
/usr/sbin/plesk bin certificate -c "${CERT_NAME}" \
-domain "${DOMAIN}" \
-cert-file "${CERT_FILE}" \
-key-file "${KEY_FILE}"
/usr/sbin/plesk bin domain -u "${DOMAIN}" -ssl true -certificate-name "${CERT_NAME}"
/usr/sbin/plesk bin httpdmng --reconfigure-domain "${DOMAIN}"
echo "Plesk deploy complete for ${DOMAIN}"
2.保存并使其可执行
chmod +x /usr/local/bin/plesk-acme-deploy.sh
3.将其链接到 ACME.sh
acme.sh --install-cert -d yourdomain.com \
--key-file ~/.acme.sh/yourdomain.com/yourdomain.com.key \
--fullchain-file ~/.acme.sh/yourdomain.com/fullchain.cer \
--reloadcmd "/usr/local/bin/plesk-acme-deploy.sh"
从现在起,每次更新都将应用于 Plesk。
步骤 12:测试一切
访问您的网站 https://yourdomain.com。证书应有效并显示您的 CA。
要测试更新和手动部署,请运行
acme.sh --renew -d yourdomain.com --force
然后尾随日志:
tail -n 60 ~/.acme.sh/acme.sh.log
最后,您应该会看到更新成功和“Plesk 部署完成”。
常见问题与故障排除
即使有正确的设置,第一次尝试也不一定能顺利进行,尤其是在域名验证、重定向或文件路径方面。以下是您在签发或更新证书时可能遇到的最常见问题,以及如何快速解决这些问题。
HTTP 验证失败(404、超时或未找到测试文件)
这意味着 ACME 挑战文件没有正确送达。
- 在Plesk > Hosting Settings 中再次检查文档根目录。
- 确保端口 80 已打开,且未被防火墙、托管面板或云提供商阻止。
- 如果重定向到 HTTPS,请确保如前所示,不包括/.well-known/acme-challenge/ 。
“签发过程中的 “未经授权 “或 “无效响应
ACME 服务器无法验证您的挑战,可能是由于以下原因之一:
- 您的域名 DNS 记录尚未更新(A 或 AAAA 记录丢失或仍在传播)。
- 测试文件无法访问、过早删除或被规则阻止。
- 您正在使用拦截 HTTP 流量的 CDN 或 WAF(如 Cloudflare)。暂时停止代理或将 ACME 路径列入白名单。
续订后什么也没发生
证书更新了,但没有应用到 Plesk 中。
确保–reloadcmd 中的部署脚本路径正确。
运行脚本,检查脚本是否可执行:
chmod +x /usr/local/bin/plesk-acme-deploy.sh
查看 ACME 日志:
tail -n 60 ~/.acme.sh/acme.sh.log
错误会在这里显示。
Plesk CLI 导入失败
你的部署脚本可能会运行,但证书并不适用。
- 如果找不到 plesk 命令,请尝试使用完整路径:/usr/sbin/plesk
- 仔细检查.key和.cer文件是否存在,名称是否正确。
- 要手动强制重新配置,请运行
plesk bin httpdmng --reconfigure-domain yourdomain.com
最后条款
现在你已经在 Plesk 服务器上运行了一个简洁、全自动的 SSL 设置。从现在起,你的证书将在后台自动更新,每当你签发新证书时,脚本将立即更新 Plesk。您已经完全控制了证书的生命周期,生活变得更加轻松。

