sgcSign 服务器

一个自托管远程代码签名守护进程,将 sgcSign 引擎封装在 REST API、Bootstrap Web 管理台和用于 CI/CD 流水线的命令行客户端背后。

REST API + Web 管理台
7 种签名格式
多租户项目
哈希链审计日志

您将获得

单台 Windows 或 Linux 主机接受来自构建代理、开发者和 CI 流水线的签名请求——内置完整审计、审批和指标功能。

REST API

TLS 加密的 /api/v1 端点,用于签名、验证、健康检查、指标和审批工作流。为构建代理和 SDK 提供稳定、机器友好的接口。

Web 管理台

基于 Bootstrap 的 /admin UI,用于管理用户、API 密钥、提供者、项目、审计、审批、Webhook 和指标。运营者无需编辑 JSON。

Windows 服务安装程序

Inno Setup 向导或 zip 解压安装。守护进程自我注册为 Windows 服务,自行终止 TLS,在加固的主机上无人值守运行。

多租户项目

每个项目隔离一组提供者、API 密钥、审计可见性和审批队列。多个团队共享一台服务器,互不查看对方的签名材料。

两步审批工作流

同一 API 密钥发起请求,管理员或项目管理员批准或拒绝,之后才对字节进行签名。SHA-256 哈希和文件大小被锁定到请求中。

SHA-256 审计日志

每个操作——签名、验证、登录、审批、Webhook 触发——都追加到哈希链审计日志中。篡改可被检测;SIEM 抓取简单直接。

Prometheus 指标

签名/验证/审批计数器、签名延迟直方图、提供者可用性仪表。直接 Prometheus 0.0.4 文本格式输出,无需管理额外数据库。

HMAC 签名的 Webhook

21 个生命周期事件通过 X-Sgcsign-Signature: sha256=… 发送。三次重试队列保持 SIEM、聊天和工单系统同步。

XAdES · PAdES · CAdES

与组件库相同的引擎,通过 REST API 公开。支持每个国家配置文件,每个签名等级。

XAdES

用于 VeriFactu、FatturaPA、Facturae、KSeF、e-Factura、Peppol、myDATA 和 EU 劳动合同的 XML 签名。POST /api/v1/sign/xades。

PAdES

PAdES-Basic PDF 签名,增量更新保留原始内容。支持可见或不可见签名。POST /api/v1/sign/pades。

CAdES

针对任意二进制数据的 CMS / PKCS#7 分离或附属签名。时间戳 + 长期验证。POST /api/v1/sign/cades。

捷克 EET 2.0

使用服务器持有的密钥构建并签名一笔登记的销售,可选择将其提交给税务机构并返回应答。连锁门店的多台收银机共用同一张纳税人证书。POST /api/v1/sign/eet。

Authenticode、ClickOnce、NuGet、VSIX

签名守护进程与您配置的任何证书源通信:Windows 存储、PFX、PKCS#11 硬件令牌、Azure Trusted Signing、AWS KMS、Google KMS。

Authenticode

对 .exe、.dll、.msi、.cab、.cat、.ocx、.sys 签名。纯哈希模式使低带宽运行器只需传输几十字节即可获得 8 KB PKCS#7 数据块。添加 --page-hashes(API 中为 page_hashes)即可为内核模式驱动程序加入页面哈希,与 signtool /ph 相同。

ClickOnce

对 ClickOnce 清单(.application / .manifest)签名,使 Windows 客户端安装时无需信任提示。POST /api/v1/sign/clickonce。

NuGet Packages

对 .nupkg 包签名,使 NuGet 客户端验证发布者身份。支持作者签名和仓库签名。POST /api/v1/sign/nuget。

VSIX Extensions

对 Visual Studio 扩展包签名,使 VS Marketplace 和 IDE 本身将其视为可信。POST /api/v1/sign/vsix。

安全与访问

更强的管理控制台登录和磁盘上加密的机密,即使密码被盗或配置文件被复制,也无法打开签名密钥。

双因素登录

控制台账户可添加来自任意 TOTP 验证器应用的 6 位验证码,并提供 10 个一次性恢复码以应对手机丢失。设置 admin.require_2fa 后,每个控制台用户必须先完成注册才能访问其他页面。管理员可以重置丢失的第二因素。

OpenID Connect 登录

使用 Microsoft Entra ID、Okta、Keycloak、Google 或任何标准 OpenID Connect 提供商登录控制台,采用带 PKCE 的授权码流程。用户可将外部身份关联到自己的账户,新用户还可以申请由管理员批准的账户。

控制台加固

每个响应都带有安全标头和严格的内容安全策略(Content Security Policy)。提供可配置的密码策略、必须在首次登录时更换的临时密码,并且一旦会话背后的角色或权限发生变化,会话立即结束。

机密静态加密

提供商密码、PIN、云凭据和 Webhook 密钥使用 AES-256-GCM 加密存储,主密钥与本机绑定(Windows 上为 DPAPI)。sgcSignServer --protect-secrets 可就地加密现有配置。

签名控制与时间戳

由服务器决定谁可以签名、使用哪个密钥以及需要谁的批准,即使某个时间戳服务器宕机,每个签名也都能获得时间戳。

强制审批

将某个提供商或整个项目标记为需要审批后,服务器会以 approval_required 拒绝直接签名。每次审批只能签名一次。该规则适用于所有签名路径,包括用于 signtool /dlib 的原始摘要签名。

API 密钥生命周期

重新生成密钥时,旧密钥最多可继续使用 7 天;还可以修改其到期时间、查看所有者,并将其限制在允许的提供商列表内。启用 api_keys.self_service 后,操作员可以在您设定的限制内创建并管理自己的密钥。 密钥也可以从首次使用时才开始生效:自首次通过身份验证的调用起有效 N 天,并且必须设置“激活截止”日期,因此从未使用的密钥不会永久有效。子密钥只有在其父密钥已激活后才能使用,激活会以 apikey.activate 记录在审计日志中,Community 版将这两个值都限制为 30 天。

PKCS#11 PIN 重试保护

服务器按令牌统计 PIN 错误结果,并在达到 max_pin_attempts 后停止登录,因此配置中的错误 PIN 不会锁定硬件令牌。只有设置 allow_final_pin_try 才会使用最后一次尝试,管理员可在控制台中重置该保护。

CLI 保存的配置文件

sgcsign config 将服务器、提供商和其他设置保存在命名配置文件中,sgcsign auth set-key 保存 API 密钥,构建脚本无需再重复这些参数。Delphi CLI 与 .NET 工具 esegece.sgcsign.cli 共用相同的文件。

带自动回退的时间戳

  • 服务器范围的默认 RFC 3161 时间戳服务器列表,按顺序尝试,直到有一个响应。
  • 每个提供商可单独设置 tsa_urls 列表,对不得加时间戳的请求可使用 no_timestamp。
  • sgcsign timestamp 可为已经 Authenticode 签名的文件添加时间戳,并采用相同的回退机制。
timestamps
# sgcSignServer.conf.json
"timestamp": {
  "servers": ["http://timestamp.digicert.com", "http://timestamp.sectigo.com"],
  "timeout_ms": 30000
}

# Timestamp a file that is already signed
sgcsign timestamp MyApp.exe --tsa http://timestamp.digicert.com --tsa http://timestamp.sectigo.com

备份、监控与安装

让服务器多年稳定运行:加密备份、证书到期前预警、需要人工处理时发送电子邮件,以及 Windows 安装程序。

加密定时备份

一个归档文件包含配置、数据库、主密钥以及所有密钥和证书文件,并使用口令以 AES-256-GCM 加密。归档可按计划或从控制台运行,sgcSignServer --archive restore 可在同一台机器上重建服务器,或将其迁移到新机器。

证书到期监控

签名证书和服务器的 TLS 证书会在启动时以及每天检查。剩余 30、14、7 和 1 天时的警告会显示在仪表板上,并通过 cert.expiring Webhook、电子邮件和 sgcsign_certificate_not_after_seconds 指标发出。

电子邮件通知

账户被锁定、双因素认证或密码更改、备份失败或证书即将到期时发送电子邮件。支持带 STARTTLS 或隐式 TLS 的 SMTP,在 Windows 上邮件发送器无需 OpenSSL 库。

Windows 安装程序

sgcSignServer_Setup.exe 将服务器安装为 Windows 服务,创建第一个管理员并开放防火墙端口。TLS 可使用生成的自签名证书、现有的 PFX 文件,测试机器也可使用普通 HTTP。

各组件如何协同工作

单个 Windows 服务终止 TLS,公开 /api/v1 + /admin,每次调用时访问配置的密钥提供者。密钥材料永远不存储在数据库中。

单一二进制,三个接口

  • 构建代理通过 HTTPS 使用 Bearer API 密钥访问 /api/v1。
  • 运营者在任何浏览器中登录 /admin。Bootstrap UI、会话 Cookie、基于角色的访问控制。
  • 密钥提供者按需从 PFX、Windows 存储、PKCS#11、Azure TS、AWS KMS、GCloud KMS、Vault、Certum、CSC v2 获取。
  • SQLite 数据库持久化用户、API 密钥、审计日志、会话和 Webhook 队列。永远不存储密钥材料本身。
  • Webhook 在每个审计事件上异步触发到 SIEM 和聊天系统。
topology.txt
                +----------------------------+
                |   Build agents / CI / CLI  |
                +-------------+--------------+
                              |
                              | HTTPS (TLS 1.2/1.3)
                              v
        +-------------------------------------------+
        |   sgcSignServer.exe   (Windows service)   |
        |   /api/v1/*    (signing, verify, health)  |
        |   /admin/*     (web console, sessions)    |
        +---+-----------------+---------------------+
            |                 |                |
            v                 v                v
     +-------------+   +---------------+   +-----------+
     |  SQLite DB  |   | KeyProviders  |   |  Webhooks |
     | (audit/keys)|   | PFX/HSM/KMS   |   | (outbound)|
     +-------------+   +---------------+   +-----------+

一条 curl 命令即可完成

一个 Bearer API 密钥、一个哈希或文件上传,已签名的二进制文件流式返回到标准输出。Authenticode、CAdES、PAdES、XAdES、ClickOnce、NuGet、VSIX 共享相同的形式。

一次调用签署 .exe

  • X-API-Key 或 Authorization: Bearer——两种认证方式均可使用。
  • X-Project 选择租户;密钥必须授权用于该项目。
  • 响应携带 X-Sgcsign-Signer-Subject + X-Sgcsign-Duration-Ms 用于日志关联。
  • Authenticode 纯哈希模式:发送 SHA-256,接收一个小的 PKCS#7 数据块。
sign-binary.sh
# Authenticode-sign MyApp.exe via the REST API
curl -X POST https://sign.example.com/api/v1/sign \
  -H "Authorization: Bearer $TOKEN" \
  -H "X-Project: production" \
  -F "format=authenticode" \
  -F "file=@./MyApp.exe" \
  -o MyApp-signed.exe

# Headers returned by the server
# X-Sgcsign-Signer-Subject: CN=ACME Corp, O=ACME, C=US
# X-Sgcsign-Duration-Ms: 312

三步完成签名二进制文件

从全新 Windows 主机到第一个已签名制品,不超过五分钟。

1

安装

运行内置 Inno Setup 向导,或将 zip 解压到文件夹。守护进程自我注册为名为 sgcSignServer 的 Windows 服务。绑定到 :8443 并加载您的 TLS 证书。

2

配置密钥提供者

向 sgcSignServer.conf.json 添加提供者——PFX 文件、Azure Trusted Signing 账户、AWS KMS 密钥、Certum SimplySign 用户,或其他任何密钥提供者。无需重启服务。

3

颁发令牌,调用 API

打开 /admin/apikeys,点击新建 API 密钥,将其限定于某个项目,将令牌复制到 CI 运行器密钥中。构建代理调用 POST /api/v1/sign。

超值之选:All-AccesseSeGeCe 全部产品,含高级支持,每年 €1,059 起。
查看 All-Access 价格

集中管理构建场中的签名

停止将签名证书复制到每个构建代理。一台 sgcSign 服务器、一个 REST 端点、完整审计和审批。