# web.acme 库模块帮助文档

## web 成员列表 <a id="web" href="#web">&#x23;</a>

### web.acme <a id="web.acme" href="#web.acme">&#x23;</a>
ACME 协议客户端（RFC 8555），  
支持 Let's Encrypt 等 CA 自动申请 SSL 证书

### web.acme() <a id="web.acme" href="#web.acme">&#x23;</a>
[返回对象:webAcmeObject](#webAcmeObject)

### web.acme(directoryUrl,userAgent,proxy,proxyByPass,httpFlags) <a id="web.acme" href="#web.acme">&#x23;</a>
创建 ACME 客户端，  

可选参数 @directoryUrl 指定目录 URL，默认 Let's Encrypt 生产环境  
@directoryUrl 也可以使用以下短名称代替目录 URL：  
"letsencrypt","letsencrypt_test","zerossl","google","google_test"  
"letsencrypt_test" 等 test 后缀的 URL 用于测试环境。  
注意开发测试时应当指定 "letsencrypt_test" 等测试 URL（宽松的测试与请求数限制）。  

其他参数用于创建 web.acme.httpClient 客户端（与 web.rest.client 构造参数用法相同）

## webAcmeObject 成员列表 <a id="webAcmeObject" href="#webAcmeObject">&#x23;</a>

### webAcmeObject.close() <a id="webAcmeObject.close" href="#webAcmeObject.close">&#x23;</a>
关闭客户端，释放资源

### webAcmeObject.directory <a id="webAcmeObject.directory" href="#webAcmeObject.directory">&#x23;</a>
ACME 目录对象，包含各端点 URL

### webAcmeObject.directoryUrl <a id="webAcmeObject.directoryUrl" href="#webAcmeObject.directoryUrl">&#x23;</a>
当前使用的 ACME 目录 URL

### webAcmeObject.downloadCertificate(certUrl) <a id="webAcmeObject.downloadCertificate" href="#webAcmeObject.downloadCertificate">&#x23;</a>
下载证书，返回 PEM 格式证书链

### webAcmeObject.finalizeOrder(finalizeUrl,csrDer) <a id="webAcmeObject.finalizeOrder" href="#webAcmeObject.finalizeOrder">&#x23;</a>
提交 CSR 完成订单，  
@csrDer 指定 DER 格式的 CSR 数据

### webAcmeObject.findAccount() <a id="webAcmeObject.findAccount" href="#webAcmeObject.findAccount">&#x23;</a>
仅查找已有账户，不创建新账户，  
成功返回账户信息，账户不存在返回错误

### webAcmeObject.generateAccountKey(bits) <a id="webAcmeObject.generateAccountKey" href="#webAcmeObject.generateAccountKey">&#x23;</a>
生成新的 RSA 账户密钥，  
可选参数 @bits 指定位数，默认 2048，  
返回 crypt.rsa 对象

### webAcmeObject.getAccountUrl() <a id="webAcmeObject.getAccountUrl" href="#webAcmeObject.getAccountUrl">&#x23;</a>
获取账户 URL

### webAcmeObject.getAuthorization(authUrl) <a id="webAcmeObject.getAuthorization" href="#webAcmeObject.getAuthorization">&#x23;</a>
获取授权详情，  
包含挑战信息（http-01、dns-01 等）

### webAcmeObject.getDns01Value(token) <a id="webAcmeObject.getDns01Value" href="#webAcmeObject.getDns01Value">&#x23;</a>
计算 DNS-01 挑战的 TXT 记录值，  
需添加到 _acme-challenge.{domain} 记录

### webAcmeObject.getKeyAuthorization(token) <a id="webAcmeObject.getKeyAuthorization" href="#webAcmeObject.getKeyAuthorization">&#x23;</a>
计算 HTTP-01 挑战的 keyAuthorization 值，  
需放置在 /.well-known/acme-challenge/{token} 路径

### webAcmeObject.getOrder(orderUrl) <a id="webAcmeObject.getOrder" href="#webAcmeObject.getOrder">&#x23;</a>
获取订单当前状态

### webAcmeObject.http <a id="webAcmeObject.http" href="#webAcmeObject.http">&#x23;</a>
ACME HTTP 客户端，web.acme.httpClient 对象（继承自 web.rest.client）。  

[返回对象:webRestClientObject](https://www.aardio.com/zh-cn/doc/library-reference/web/rest/client.html#webRestClientObject)

### webAcmeObject.initAccountKey(pemPath) <a id="webAcmeObject.initAccountKey" href="#webAcmeObject.initAccountKey">&#x23;</a>
如果 PEM 文件存在则自文件加载账户密钥，  
否则创建密钥并保存到 PEM 文件。  
成功返回 true

### webAcmeObject.loadAccountKey(pemPath) <a id="webAcmeObject.loadAccountKey" href="#webAcmeObject.loadAccountKey">&#x23;</a>
从 PEM 文件加载账户密钥，  
成功返回 true

### webAcmeObject.newOrder(domains) <a id="webAcmeObject.newOrder" href="#webAcmeObject.newOrder">&#x23;</a>
创建证书订单，  
@domains 指定域名或 公网 IP（字符串或数组），  
返回订单对象，包含 authorizations 和 finalize URL

### webAcmeObject.pollStatus(url,targetStatus,maxAttempts,interval) <a id="webAcmeObject.pollStatus" href="#webAcmeObject.pollStatus">&#x23;</a>
轮询等待状态变化，  
@targetStatus 指定目标状态（如 "valid"、"ready"），  
@maxAttempts 最大尝试次数，默认 30，  
@interval 间隔毫秒数，默认 2000

### webAcmeObject.register <a id="webAcmeObject.register" href="#webAcmeObject.register">&#x23;</a>
注册新账户或获取已有账

### webAcmeObject.register("email@example.com",true) <a id="webAcmeObject.register" href="#webAcmeObject.register">&#x23;</a>

```aardio
email 可选，指定联系邮箱（字符串或数组），  
@termsAgreed 是否同意服务条款，默认 true，  
成功返回账户信息对象
```

### webAcmeObject.register("email@example.com",true,"kid","hmac") <a id="webAcmeObject.register" href="#webAcmeObject.register">&#x23;</a>

```aardio
email: 联系邮箱  
@termsAgreed: 同意条款  
@kid: (可选) EAB Key Identifier  
@hmac: (可选) EAB HMAC Key (Base64Url格式)，  
Google/ZeroSSL 等商业或私有 CA 通常需要 EAB。
```

### webAcmeObject.respondChallenge(challengeUrl) <a id="webAcmeObject.respondChallenge" href="#webAcmeObject.respondChallenge">&#x23;</a>
通知服务器已准备好挑战验证，  
服务器将开始验证

### webAcmeObject.revokeCertificate(certPem,reason) <a id="webAcmeObject.revokeCertificate" href="#webAcmeObject.revokeCertificate">&#x23;</a>
吊销证书，  
@certPem 为 PEM 格式证书，  
@reason 为吊销原因代码，默认 0

### webAcmeObject.saveAccountKey(pemPath) <a id="webAcmeObject.saveAccountKey" href="#webAcmeObject.saveAccountKey">&#x23;</a>
保存账户密钥到 PEM 文件

### webAcmeObject.setAccountKey(rsaKey) <a id="webAcmeObject.setAccountKey" href="#webAcmeObject.setAccountKey">&#x23;</a>
设置账户密钥（crypt.rsa 对象）

### webAcmeObject.setAccountUrl(url) <a id="webAcmeObject.setAccountUrl" href="#webAcmeObject.setAccountUrl">&#x23;</a>
设置账户 URL，用于恢复已有账户会话
