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 un client a riga di comando per pipeline CI/CD.

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

Cosa ottieni

Un singolo host, Windows o Linux, 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

21 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.

EET 2.0 (Repubblica Ceca)

Costruisce e firma una vendita registrata con una chiave custodita dal server, facoltativamente la invia all'amministrazione fiscale e restituisce la risposta. Più casse di una catena condividono un unico certificato del contribuente. POST /api/v1/sign/eet.

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. Aggiungi --page-hashes (page_hashes nell'API) per i page hash dei driver in modalità kernel, come signtool /ph.

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.

Sicurezza e accesso

Accesso più sicuro alla console di amministrazione e segreti cifrati su disco, così una password rubata o un file di configurazione copiato non aprono le chiavi di firma.

Accesso a due fattori

Gli account della console aggiungono un codice a 6 cifre generato da qualsiasi app di autenticazione TOTP, con 10 codici di recupero monouso in caso di smarrimento del telefono. Con admin.require_2fa ogni utente della console deve registrarsi prima di raggiungere qualsiasi altra pagina. Un amministratore può reimpostare un secondo fattore perso.

Accesso con OpenID Connect

Accedi alla console con Microsoft Entra ID, Okta, Keycloak, Google o qualsiasi provider OpenID Connect standard, usando il flusso authorization code con PKCE. Gli utenti collegano un'identità esterna al proprio account e i nuovi utenti possono, se vogliono, richiedere un account che un amministratore approva.

Console rafforzata

Ogni risposta include header di sicurezza e una Content Security Policy rigorosa. Una policy delle password configurabile, password temporanee da sostituire al primo accesso e sessioni che terminano non appena cambiano il ruolo o i diritti che le sostengono.

Segreti cifrati a riposo

Password dei provider, PIN, credenziali cloud e segreti dei webhook sono memorizzati cifrati con AES-256-GCM sotto una chiave master legata alla macchina (DPAPI su Windows). sgcSignServer --protect-secrets cifra sul posto una configurazione esistente.

Controllo della firma e marche temporali

Il server decide chi può firmare, con quale chiave e dopo l'approvazione di chi, e ogni firma riceve una marca temporale anche quando un server di timestamp non è disponibile.

Approvazioni obbligatorie

Contrassegna un provider o un intero progetto come soggetto ad approvazione e il server rifiuta la firma diretta con approval_required. Ogni approvazione firma una sola volta. La regola vale su ogni percorso di firma, compresa la firma dell'hash grezzo per signtool /dlib.

Ciclo di vita delle chiavi API

Rigenera una chiave mentre il vecchio segreto continua a funzionare per un massimo di 7 giorni, modifica la scadenza, vedi chi ne è il proprietario e limitala a un elenco di provider consentiti. Con api_keys.self_service, gli operatori creano e gestiscono le proprie chiavi entro i limiti che imposti. Una chiave può anche iniziare la validità al primo utilizzo: è valida per N giorni a partire dalla prima chiamata autenticata, con una data obbligatoria di attivazione entro cui usarla, così una chiave mai usata non resta valida per sempre. Le sottochiavi funzionano solo dopo l'attivazione della chiave principale, l'attivazione viene registrata nel log di audit come apikey.activate e Community limita entrambi i valori a 30 giorni.

Protezione dai tentativi di PIN PKCS#11

Il server conta i PIN errati per ogni token e smette di effettuare il login dopo max_pin_attempts, così un PIN sbagliato nella configurazione non blocca mai un token hardware. L'ultimo tentativo viene usato solo con allow_final_pin_try e un amministratore reimposta la protezione dalla console.

Profili salvati nella CLI

sgcsign config salva server, provider e altre impostazioni in profili con nome, e sgcsign auth set-key memorizza la chiave API, così gli script di build non devono più ripeterli. La CLI Delphi e lo strumento .NET esegece.sgcsign.cli condividono gli stessi file.

Marche temporali con fallback automatico

  • Un elenco a livello di server di timestamp server RFC 3161 predefiniti, provati in ordine finché uno risponde.
  • Elenchi tsa_urls per singolo provider e no_timestamp per una richiesta che non deve ricevere la marca temporale.
  • sgcsign timestamp aggiunge una marca temporale a un file già firmato con Authenticode, con lo stesso fallback.
timestamps
# sgcSignServer.conf.json
"timestamp": {
  "servers": ["http://timestamp.digicert.com", "http://timestamp.sectigo.com"],
  "timeout_ms": 30000
}

# Aggiungi la marca temporale a un file già firmato
sgcsign timestamp MyApp.exe --tsa http://timestamp.digicert.com --tsa http://timestamp.sectigo.com

Backup, monitoraggio e installazione

Gestisci il server per anni senza sorprese: backup cifrati, avvisi prima della scadenza di un certificato, email quando serve l'intervento di una persona e un installer per Windows.

Backup pianificati e cifrati

Un unico archivio contiene la configurazione, il database, la chiave master e ogni file di chiavi e certificati, cifrato con AES-256-GCM tramite una passphrase. Gli archivi vengono creati secondo una pianificazione o dalla console, e sgcSignServer --archive restore ricostruisce il server sulla stessa macchina o lo sposta su una nuova.

Monitoraggio della scadenza dei certificati

I certificati di firma e il certificato TLS del server vengono controllati all'avvio e ogni giorno. Gli avvisi a 30, 14, 7 e 1 giorno dalla scadenza compaiono nella dashboard e partono come webhook cert.expiring, come email e come metrica sgcsign_certificate_not_after_seconds.

Notifiche email

Email quando un account viene bloccato, quando cambiano l'autenticazione a due fattori o una password, quando un backup fallisce o un certificato sta per scadere. SMTP con STARTTLS o TLS implicito e, su Windows, il mailer non richiede librerie OpenSSL.

Installer per Windows

sgcSignServer_Setup.exe installa il server come servizio Windows, crea il primo amministratore e apre la porta del firewall. TLS usa un certificato autofirmato generato, un file PFX esistente oppure HTTP semplice per le macchine di test.

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

Una API key bearer, un upload di hash o di file e il binario firmato torna in streaming su stdout. Authenticode, CAdES, PAdES, XAdES, ClickOnce, NuGet, VSIX condividono la stessa struttura.

Firma un .exe con una sola chiamata

  • X-API-Key or Authorization: Bearer: funzionano entrambi i metodi di autenticazione.
  • X-Project seleziona il tenant; la chiave deve essere autorizzata per il progetto.
  • La risposta include X-Sgcsign-Signer-Subject + X-Sgcsign-Duration-Ms per la correlazione dei log.
  • Modalità solo hash per Authenticode: invii lo SHA-256 e ricevi un minuscolo blob 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

Three Steps to a Signed Binary

Da un host Windows nuovo al primo artefatto firmato in meno di cinque minuti.

1

Install

Esegui la procedura guidata Inno Setup inclusa oppure copia lo zip in una cartella. Il daemon si registra come servizio Windows chiamato sgcSignServer. Associalo a :8443 e carica il tuo certificato TLS.

2

Configura un provider di chiavi

Aggiungi un provider a sgcSignServer.conf.json — un file PFX, un account Azure Trusted Signing, una chiave AWS KMS, un utente Certum SimplySign o uno qualsiasi degli altri dieci provider di chiavi. Non è necessario riavviare il servizio.

3

Issue a Token, Call the API

Apri /admin/apikeys, fai clic su New API key, limitala a un progetto e copia il token nel secret del tuo runner CI. L'agente di build chiama POST /api/v1/sign.

La scelta più conveniente: All-AccessTutti i prodotti eSeGeCe, con Supporto Premium incluso, a partire da €1,059/anno.
Vedi i prezzi All-Access

Centralise Signing Across Your Build Farm

Smetti di copiare i certificati di firma su ogni build agent. Un solo sgcSign Server, un solo endpoint REST, audit completo e approvazioni.