Server sgcSign

Un daemon di firma del codice remoto self-hosted che incapsula il motore sgcSign dietro un'API REST, una console di amministrazione web Bootstrap e pipeline CI/CD pronte all'uso.

API REST + admin web
7 formati di firma
Progetti multi-tenant
Audit log con catena di hash

Cosa ottieni

Un singolo host Windows accetta richieste di firma da agenti di build, sviluppatori e pipeline CI — con audit completo, approvazioni e metriche integrate.

API REST

Endpoint /api/v1 protetti da TLS per firma, verifica, salute, metriche e flussi di approvazione. Contratto stabile e machine-friendly per agenti di build e SDK.

Console admin web

UI Bootstrap su /admin per utenti, chiavi API, provider, progetti, audit, approvazioni, webhook e metriche. Gli operatori non devono mai modificare JSON.

Installer come servizio Windows

Wizard Inno Setup o estrazione da zip. Il daemon si registra come servizio Windows, termina TLS direttamente e funziona senza supervisione su un host irrobustito.

Progetti multi-tenant

Ogni progetto isola un sottoinsieme di provider, chiavi API, visibilità dell'audit e code di approvazione. Più team condividono un solo server senza vedere il materiale di firma reciproco.

Flusso di approvazione a due passaggi

La stessa chiave API richiede, un admin o un project admin approva o rifiuta, e solo allora i byte vengono firmati. Hash SHA-256 e dimensione del file sono fissati nella richiesta.

Audit log SHA-256

Ogni azione — firma, verifica, login, approvazione, webhook — viene aggiunta a un audit log con catena di hash. Le manomissioni sono rilevabili; lo scraping per SIEM è semplice.

Metriche Prometheus

Contatori firma / verifica / approvazione, istogrammi di latenza della firma, gauge di disponibilità dei provider. Esposizione testuale diretta in Prometheus 0.0.4 senza database aggiuntivi da gestire.

Webhook firmati con HMAC

13 eventi del ciclo di vita consegnati con X-Sgcsign-Signature: sha256=…. Una coda di retry a tre tentativi mantiene SIEM, chat e sistemi di ticketing sincronizzati.

XAdES · PAdES · CAdES

Lo stesso motore fornito nella libreria, esposto tramite API REST. Ogni profilo per paese, ogni livello di firma.

XAdES

Firme XML per VeriFactu, FatturaPA, Facturae, KSeF, e-Factura, Peppol, myDATA e contratti di lavoro UE. POST /api/v1/sign/xades.

PAdES

Firme PDF PAdES-Basic con aggiornamenti incrementali che preservano il contenuto originale. Firme visibili o invisibili. POST /api/v1/sign/pades.

CAdES

Firme CMS / PKCS#7 detached o attached per dati binari arbitrari. Timestamp + validazione a lungo termine. POST /api/v1/sign/cades.

Authenticode, ClickOnce, NuGet, VSIX

Il daemon di firma comunica con la sorgente di certificati che configuri: archivio Windows, PFX, token hardware PKCS#11, Azure Trusted Signing, AWS KMS, Google KMS.

Authenticode

Firma .exe, .dll, .msi, .cab, .cat, .ocx, .sys. La modalità solo hash consente ai runner a bassa banda di scambiare poche dozzine di byte per un blob PKCS#7 di 8 KB.

ClickOnce

Firma manifest ClickOnce (.application / .manifest) in modo che i client Windows possano installare senza prompt di trust. POST /api/v1/sign/clickonce.

Pacchetti NuGet

Firma pacchetti .nupkg in modo che il client NuGet validi l'identità del publisher. Supporto a firme author e repository. POST /api/v1/sign/nuget.

Estensioni VSIX

Firma pacchetti di estensione Visual Studio in modo che VS Marketplace e l'IDE stesso li accettino come affidabili. POST /api/v1/sign/vsix.

Drop-in per ogni pipeline principale

Gli agenti di build chiamano un endpoint REST stabile invece di installare certificati di firma su ogni runner.

GitHub Actions

Un'action composita invia l'artefatto all'API REST del server. Il token, emesso dall'admin web e limitato a un progetto, non lascia mai il secret store del runner.

Azure DevOps

Un task della pipeline esegue il client CLI sgcSign, che carica il binario, attende l'approvazione se richiesta e scarica il risultato firmato — tutto in un unico passaggio.

Jenkins

Snippet di declarative pipeline che usa curl o la CLI inclusa. Funziona con agenti Linux e Windows; la firma appare come artefatto di build.

Docker

Immagine con il daemon e una configurazione di provider di esempio. Esegui il container, monta il tuo certificato TLS + i segreti del provider e hai un servizio di firma portatile.

Helm Chart

Distribuisci su Kubernetes per una firma completamente ridondante e scalabile. Abbinala a un KMS cloud (Azure Trusted Signing, AWS KMS, Google KMS) per pod keyless.

Come si incastrano i pezzi

Un singolo servizio Windows termina TLS, espone /api/v1 + /admin e raggiunge il provider di chiavi configurato a ogni chiamata. Il materiale delle chiavi non vive mai nel database.

Un singolo binario, tre interfacce

  • Gli agenti di build raggiungono /api/v1 su HTTPS con una chiave API bearer.
  • Gli operatori accedono a /admin da qualsiasi browser. UI Bootstrap, cookie di sessione, accesso basato sui ruoli.
  • I provider di chiavi vengono recuperati a richiesta da PFX, archivio Windows, PKCS#11, Azure TS, AWS KMS, GCloud KMS, Vault, Certum, CSC v2.
  • Il database SQLite persiste utenti, chiavi API, audit log, sessioni e coda webhook. Mai il materiale delle chiavi.
  • I webhook vengono inviati in modo asincrono a SIEM e sistemi di chat per ogni evento sottoposto ad audit.
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)|
     +-------------+   +---------------+   +-----------+

One curl Away

A bearer API key, a multipart upload, and the signed binary streams back to stdout. Authenticode, CAdES, PAdES, XAdES, ClickOnce, NuGet, VSIX share the same shape.

Sign an .exe in one call

  • X-API-Key or Authorization: Bearer — either auth method works.
  • X-Project selects the tenant; the key must be authorised for the project.
  • Response carries X-Sgcsign-Signer-Subject + X-Sgcsign-Duration-Ms for log correlation.
  • Hash-only mode for Authenticode: send the SHA-256, receive a tiny PKCS#7 blob.
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

Three Steps to a Signed Binary

From a fresh Windows host to the first signed artefact in under five minutes.

1

Install

Run the bundled Inno Setup wizard or drop the zip into a folder. The daemon registers itself as a Windows service called sgcSignServer. Bind to :8443 and load your TLS certificate.

2

Configure a Key Provider

Add a provider to sgcSignServer.conf.json — a PFX file, Azure Trusted Signing account, AWS KMS key, Certum SimplySign user, or any of the other ten key providers. No service restart required.

3

Issue a Token, Call the API

Open /admin/apikeys, click New API key, scope it to a project, copy the token into your CI runner secret. Build agent calls POST /api/v1/sign.

Centralise Signing Across Your Build Farm

Stop copying signing certificates onto every build agent. One sgcSign Server, one REST endpoint, full audit and approvals.