2024-10-02 00:55:20 +08:00
|
|
|
|
import { IsAccess, AccessInput, BaseAccess } from "@certd/pipeline";
|
2026-05-10 16:57:12 +08:00
|
|
|
|
import * as acme from "@certd/acme-client";
|
2024-07-04 01:14:09 +08:00
|
|
|
|
|
|
|
|
|
|
@IsAccess({
|
|
|
|
|
|
name: "eab",
|
2024-07-04 02:22:52 +08:00
|
|
|
|
title: "EAB授权",
|
2024-07-04 01:14:09 +08:00
|
|
|
|
desc: "ZeroSSL证书申请需要EAB授权",
|
2024-11-30 01:57:09 +08:00
|
|
|
|
icon: "ic:outline-lock",
|
2024-07-04 01:14:09 +08:00
|
|
|
|
})
|
2024-10-02 00:55:20 +08:00
|
|
|
|
export class EabAccess extends BaseAccess {
|
2026-05-10 16:57:12 +08:00
|
|
|
|
@AccessInput({
|
|
|
|
|
|
title: "EAB类型",
|
|
|
|
|
|
component: {
|
|
|
|
|
|
name: "a-select",
|
|
|
|
|
|
options: [
|
|
|
|
|
|
{ value: "google", label: "Google(免费)", icon: "flat-color-icons:google" },
|
|
|
|
|
|
{ value: "zerossl", label: "ZeroSSL(免费)", icon: "emojione:digit-zero" },
|
|
|
|
|
|
{ value: "litessl", label: "litessl(免费)", icon: "roentgen:free" },
|
|
|
|
|
|
{ value: "sslcom", label: "SSL.com(仅主域名和www免费)", icon: "la:expeditedssl" },
|
|
|
|
|
|
],
|
|
|
|
|
|
},
|
|
|
|
|
|
helper: "请选择EAB类型",
|
|
|
|
|
|
required: true,
|
|
|
|
|
|
encrypt: false,
|
|
|
|
|
|
})
|
|
|
|
|
|
eabType = "";
|
|
|
|
|
|
|
2024-07-04 01:14:09 +08:00
|
|
|
|
@AccessInput({
|
|
|
|
|
|
title: "KID",
|
|
|
|
|
|
component: {
|
2024-10-15 19:27:55 +08:00
|
|
|
|
placeholder: "kid / keyId",
|
2024-07-04 01:14:09 +08:00
|
|
|
|
},
|
2025-09-04 23:42:03 +08:00
|
|
|
|
helper: "EAB KID, google的叫 keyId,ssl.com的叫Account/ACME Key",
|
2024-07-04 01:14:09 +08:00
|
|
|
|
required: true,
|
2024-08-27 13:46:19 +08:00
|
|
|
|
encrypt: true,
|
2024-07-04 01:14:09 +08:00
|
|
|
|
})
|
|
|
|
|
|
kid = "";
|
|
|
|
|
|
@AccessInput({
|
|
|
|
|
|
title: "HMACKey",
|
|
|
|
|
|
component: {
|
2024-10-15 19:27:55 +08:00
|
|
|
|
placeholder: "HMAC Key / b64MacKey",
|
2024-07-04 01:14:09 +08:00
|
|
|
|
},
|
2024-10-15 19:27:55 +08:00
|
|
|
|
helper: "EAB HMAC Key ,google的叫b64MacKey",
|
2024-07-04 01:14:09 +08:00
|
|
|
|
required: true,
|
2024-08-27 13:46:19 +08:00
|
|
|
|
encrypt: true,
|
2024-07-04 01:14:09 +08:00
|
|
|
|
})
|
|
|
|
|
|
hmacKey = "";
|
2024-10-14 03:17:10 +08:00
|
|
|
|
|
|
|
|
|
|
@AccessInput({
|
|
|
|
|
|
title: "email",
|
|
|
|
|
|
component: {
|
|
|
|
|
|
placeholder: "绑定一个邮箱",
|
|
|
|
|
|
},
|
2025-04-08 19:54:25 +08:00
|
|
|
|
rules: [{ type: "email", message: "请输入正确的邮箱" }],
|
2026-05-10 16:57:12 +08:00
|
|
|
|
helper: "绑定一个邮箱,避免失效",
|
2024-11-25 18:26:23 +08:00
|
|
|
|
required: true,
|
2024-10-14 03:17:10 +08:00
|
|
|
|
})
|
|
|
|
|
|
email = "";
|
2026-05-10 16:57:12 +08:00
|
|
|
|
|
|
|
|
|
|
@AccessInput({
|
|
|
|
|
|
title: "ACME账号私钥",
|
|
|
|
|
|
component: {
|
|
|
|
|
|
name: "refresh-input",
|
|
|
|
|
|
action: "GenerateAccountKey",
|
2026-05-10 17:15:47 +08:00
|
|
|
|
buttonText: "刷新",
|
2026-05-10 16:57:12 +08:00
|
|
|
|
successMessage: "账号私钥已刷新,请保存授权配置",
|
|
|
|
|
|
},
|
|
|
|
|
|
required: true,
|
2026-05-10 17:15:47 +08:00
|
|
|
|
helper: "如果修改了KID,请点击刷新重新生成账号私钥\n注意:google的EAB只能生成一次账号私钥,更新私钥需要获取一个新的EAB授权",
|
2026-05-10 16:57:12 +08:00
|
|
|
|
encrypt: true,
|
|
|
|
|
|
})
|
|
|
|
|
|
accountKey = "";
|
|
|
|
|
|
|
|
|
|
|
|
async onGenerateAccountKey() {
|
|
|
|
|
|
if (!this.kid) {
|
|
|
|
|
|
throw new Error("请先填写KID");
|
|
|
|
|
|
}
|
|
|
|
|
|
const key = await acme.crypto.createPrivateKey(2048);
|
|
|
|
|
|
return JSON.stringify({
|
|
|
|
|
|
kid: this.kid,
|
|
|
|
|
|
privateKey: key.toString(),
|
|
|
|
|
|
});
|
|
|
|
|
|
}
|
2024-07-04 01:14:09 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
new EabAccess();
|