From 0b9933df1e8d1685d14271435a8a7488974cc47b Mon Sep 17 00:00:00 2001 From: xiaojunnuo Date: Mon, 16 Mar 2026 00:52:33 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=E6=9F=A5=E7=9C=8B=E8=AF=81=E4=B9=A6?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E8=AF=81=E4=B9=A6=E8=AF=A6=E6=83=85=E6=98=BE?= =?UTF-8?q?=E7=A4=BA=EF=BC=8C=E5=8C=85=E6=8B=AC=E5=9F=9F=E5=90=8D=EF=BC=8C?= =?UTF-8?q?=E8=BF=87=E6=9C=9F=E6=97=B6=E9=97=B4=EF=BC=8C=E9=A2=81=E5=8F=91?= =?UTF-8?q?=E6=9C=BA=E6=9E=84=EF=BC=8C=E6=8C=87=E7=BA=B9=E7=AD=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../plugin-lib/src/cert/cert-reader.ts | 20 +++++ .../src/views/certd/pipeline/api.ts | 1 + .../src/views/certd/pipeline/cert-view.vue | 78 ++++++++++++++++++- .../user/monitor/cert-info-controller.ts | 5 ++ .../user/pipeline/cert-controller.ts | 9 ++- 5 files changed, 110 insertions(+), 3 deletions(-) diff --git a/packages/plugins/plugin-lib/src/cert/cert-reader.ts b/packages/plugins/plugin-lib/src/cert/cert-reader.ts index df2d86edb..c4071ca8f 100644 --- a/packages/plugins/plugin-lib/src/cert/cert-reader.ts +++ b/packages/plugins/plugin-lib/src/cert/cert-reader.ts @@ -2,6 +2,7 @@ import fs from "fs"; import os from "os"; import path from "path"; import { CertificateInfo, crypto } from "@certd/acme-client"; +import cryptoLib from "crypto"; import { ILogger } from "@certd/basic"; import dayjs from "dayjs"; import { uniq } from "lodash-es"; @@ -119,9 +120,28 @@ export class CertReader { const detail = crypto.readCertificateInfo(crt.toString()); const effective = detail.notBefore; const expires = detail.notAfter; + const fingerprints = CertReader.getFingerprintX509(crt); + // @ts-ignore + detail.fingerprints = fingerprints; return { detail, effective, expires }; } + static getFingerprintX509(crt: string) { + try { + // 创建X509Certificate实例 + const cert = new cryptoLib.X509Certificate(crt); + // 获取指纹 + return { + fingerprint: cert.fingerprint, + fingerprint256: cert.fingerprint256, + fingerprint512: cert.fingerprint512, + }; + } catch (error) { + console.error("处理证书失败:", error.message); + return null; + } + } + getAllDomains() { const { detail } = this.getCrtDetail(); const domains = []; diff --git a/packages/ui/certd-client/src/views/certd/pipeline/api.ts b/packages/ui/certd-client/src/views/certd/pipeline/api.ts index 1c84a0842..6e07abf6c 100644 --- a/packages/ui/certd-client/src/views/certd/pipeline/api.ts +++ b/packages/ui/certd-client/src/views/certd/pipeline/api.ts @@ -154,6 +154,7 @@ export type CertInfo = { ic: string; der: string; pfx: string; + detail: any; }; export async function GetCert(pipelineId: number): Promise { diff --git a/packages/ui/certd-client/src/views/certd/pipeline/cert-view.vue b/packages/ui/certd-client/src/views/certd/pipeline/cert-view.vue index afbb7e76d..555171342 100644 --- a/packages/ui/certd-client/src/views/certd/pipeline/cert-view.vue +++ b/packages/ui/certd-client/src/views/certd/pipeline/cert-view.vue @@ -1,12 +1,47 @@