# bootok-acme **Repository Path**: hellobin-cn/bootok-acme ## Basic Information - **Project Name**: bootok-acme - **Description**: 纯 PHP 实现的 ACME v2 (RFC 8555) 客户端,仅依赖 ext-openssl,零第三方包。支持 DNS-01 验证、泛域名证书、Let's Encrypt / ZeroSSL 双 CA、阿里云 / 腾讯云 DNS 供应商,签发过程回调,专为无 Shell 权限的 PHP 环境设计。 - **Primary Language**: PHP - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-10-04 - **Last Updated**: 2026-10-24 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # bootok/acme 纯 PHP 实现的 ACME v2 (RFC 8555) 客户端。仅支持 DNS-01 验证(通配符证书的唯一途径),面向无人值守的自动签发与续期。 > 一个好的开始,是给你的域名一张免费的证书。 - 依赖极少:`ext-openssl`,零第三方包(HTTP 传输内置实现,可插拔) - 支持 Let's Encrypt / ZeroSSL / Buzz(PEBBLE 测试) - DNS-01:manual(人工加 TXT)/ 阿里云 / 腾讯云(API 3.0 TC3 签名)可插拔 - 通配符、多域名 SAN、ECC 证书 - 签发过程回调(onStage),TXT 清理失败不毁掉已到手的证书 ## 环境要求 - PHP >= 8.2 - ext-openssl ## 安装 ```bash composer require bootok/acme ``` ## 快速开始 ```php use BootOk\Acme\AcmeClient; use BootOk\Acme\CertificateIssuer; use BootOk\Acme\Dns\AliyunProvider; $issuer = new CertificateIssuer( caDirectory: AcmeClient::CA_LETS_ENCRYPT, // 也有 CA_LETS_ENCRYPT_STAGING 测试环境 accountKeyPem: $accountKeyPem, // PEM 格式账号密钥 email: 'you@example.com', dns: new AliyunProvider([ 'access_key_id' => '...', 'access_key_secret' => '...', ]), ); $result = $issuer->issue( domains: ['example.com', '*.example.com'], onStage: function (string $stage, string $message) { echo "[{$stage}] {$message}\n"; // order / dns / dns_wait / challenge / finalize / cleanup }, ); ``` ## 设计要点 - **协议自研**:JWS / ES256 定长签名、目录协商、challenge 轮询全部按 RFC 8555 实现,不依赖任何 ACME 库 - **零依赖**:除 openssl 扩展外不 require 任何第三方包,适合嵌入任意项目 - **DNS 供应商可插拔**:实现 `DnsProvider` 接口(`name()` + 记录读写)即可接入新服务商 - **面向无人值守**:错误分类清晰,清理阶段失败不影响签发结果 ## License [MIT](LICENSE)