sgcSign Server

Een self-hosted remote code-ondertekendaemon die de sgcSign-engine verpakt achter een REST-API, een Bootstrap-webadmin-console en een opdrachtregelclient voor CI/CD-pipelines.

REST-API + webadmin
7 handtekeningformaten
Multi-tenant-projecten
Hash-chained audit log

Wat je krijgt

Eén host, Windows of Linux, accepteert ondertekenverzoeken van build-agents, ontwikkelaars en CI-pipelines — met volledige audit, goedkeuringen en metrics ingebouwd.

REST API

Met TLS beveiligde /api/v1-endpoints voor ondertekening, verificatie, health, metrics en goedkeuringsworkflows. Een stabiel, machinevriendelijk contract voor build-agents en SDK's.

Web Admin Console

Op Bootstrap gebaseerde /admin-UI voor gebruikers, API-sleutels, providers, projecten, audit, goedkeuringen, webhooks en metrics. Beheerders hoeven nooit JSON te bewerken.

Windows-service-installer

Inno Setup-wizard of zip-drop. De daemon registreert zichzelf als Windows-service, beëindigt TLS zelf en draait zonder toezicht op een geharde host.

Multi-tenant-projecten

Elk project isoleert een subset van providers, API-sleutels, audit-zichtbaarheid en goedkeuringswachtrijen. Meerdere teams delen één server zonder elkaars ondertekeningsmateriaal te zien.

Goedkeuringsworkflow in twee stappen

Dezelfde API-sleutel doet een verzoek, een admin of projectadmin keurt het goed of af, en pas daarna worden de bytes ondertekend. SHA-256-hash en bestandsgrootte staan vast in het verzoek.

SHA-256-audit-log

Elke actie — ondertekenen, verifiëren, inloggen, goedkeuren, webhook afvuren — wordt toegevoegd aan een hash-geketend audit-log. Manipulatie is detecteerbaar; SIEM-scraping is rechttoe rechtaan.

Prometheus-metrics

Tellers voor ondertekenen / verifiëren / goedkeuren, histogrammen voor ondertekenlatentie, gauges voor providerbeschikbaarheid. Directe Prometheus 0.0.4-tekstexpositie zonder extra database om te beheren.

HMAC-ondertekende webhooks

21 lifecycle-events afgeleverd met X-Sgcsign-Signature: sha256=…. Een retry-wachtrij met drie pogingen houdt SIEM-, chat- en ticketing-systemen synchroon.

XAdES · PAdES · CAdES

Dezelfde engine die in de bibliotheek zit, ontsloten via de REST-API. Elk landprofiel, elk handtekeningniveau.

XAdES

XML-handtekeningen voor VeriFactu, FatturaPA, Facturae, KSeF, e-Factura, Peppol, myDATA en EU-arbeidscontracten. POST /api/v1/sign/xades.

PAdES

PAdES-Basic-PDF-handtekeningen met incrementele updates die de originele inhoud behouden. Zichtbare of onzichtbare handtekeningen. POST /api/v1/sign/pades.

CAdES

CMS-/PKCS#7-detached- of attached-handtekeningen voor willekeurige binaire data. Tijdstempel + long-term validation. POST /api/v1/sign/cades.

Tsjechische EET 2.0

Bouwt en ondertekent een geregistreerde verkoop met een sleutel die op de server staat, verstuurt die optioneel naar de belastingdienst en geeft het antwoord terug. Alle kassasystemen van een keten delen één certificaat van de belastingplichtige. POST /api/v1/sign/eet.

Authenticode, ClickOnce, NuGet, VSIX

De ondertekeningsdaemon praat met de certificaatbron die jij configureert: Windows-store, PFX, PKCS#11-hardwaretoken, Azure Trusted Signing, AWS KMS, Google KMS.

Authenticode

Onderteken .exe, .dll, .msi, .cab, .cat, .ocx, .sys. In hash-only-modus wisselen runners met weinig bandbreedte een paar tientallen bytes uit voor een PKCS#7-blob van 8 KB. Voeg --page-hashes (page_hashes in de API) toe voor pagina-hashes op kernelmodusdrivers, zoals signtool /ph.

ClickOnce

Onderteken ClickOnce-manifests (.application / .manifest) zodat Windows-clients installeren zonder trust-prompts. POST /api/v1/sign/clickonce.

NuGet-packages

Onderteken .nupkg-packages zodat de NuGet-client de identiteit van de uitgever valideert. Author- en repository-handtekeningen worden ondersteund. POST /api/v1/sign/nuget.

VSIX-extensies

Onderteken Visual Studio-extensiepackages zodat zowel VS Marketplace als de IDE zelf ze als vertrouwd accepteren. POST /api/v1/sign/vsix.

Beveiliging en toegang

Sterkere aanmelding voor de beheerconsole en versleutelde geheimen op schijf, zodat een gestolen wachtwoord of een gekopieerd configuratiebestand de ondertekeningssleutels niet openstelt.

Aanmelden met twee factoren

Consoleaccounts voegen een code van 6 cijfers toe uit een willekeurige TOTP-authenticator-app, met 10 herstelcodes voor eenmalig gebruik voor een verloren telefoon. Stel admin.require_2fa in en elke consolegebruiker moet zich registreren voordat hij een andere pagina bereikt. Een beheerder kan een verloren tweede factor opnieuw instellen.

Aanmelden met OpenID Connect

Meld u aan bij de console met Microsoft Entra ID, Okta, Keycloak, Google of een andere standaard OpenID Connect-provider, via de authorization code flow met PKCE. Gebruikers koppelen een externe identiteit aan hun account en nieuwe gebruikers kunnen optioneel een account aanvragen dat een beheerder goedkeurt.

Beveiligde console

Elk antwoord bevat beveiligingsheaders en een strikte Content Security Policy. Daarnaast een configureerbaar wachtwoordbeleid, tijdelijke wachtwoorden die bij de eerste aanmelding vervangen moeten worden, en sessies die eindigen zodra de rol of de rechten erachter wijzigen.

Geheimen versleuteld op schijf

Providerwachtwoorden, pincodes, cloudreferenties en webhookgeheimen worden versleuteld opgeslagen met AES-256-GCM onder een hoofdsleutel die aan de machine gebonden is (DPAPI op Windows). sgcSignServer --protect-secrets versleutelt een bestaande configuratie ter plekke.

Ondertekeningscontrole en tijdstempels

De server bepaalt wie mag ondertekenen, met welke sleutel en na wiens goedkeuring, en elke handtekening krijgt een tijdstempel, ook als een tijdstempelserver niet beschikbaar is.

Afgedwongen goedkeuringen

Markeer een provider of een heel project als goedkeuring vereist, en de server weigert direct ondertekenen met approval_required. Elke goedkeuring ondertekent een keer. De regel geldt voor elk ondertekeningspad, inclusief ondertekenen van ruwe digests voor signtool /dlib.

Levenscyclus van API-sleutels

Genereer een sleutel opnieuw terwijl het oude geheim tot 7 dagen blijft werken, pas de vervaldatum aan, zie wie de eigenaar is en beperk de sleutel tot een lijst met toegestane providers. Met api_keys.self_service maken operators hun eigen sleutels aan en beheren ze die binnen de grenzen die u instelt. Een sleutel kan zijn geldigheid ook pas bij het eerste gebruik laten beginnen: hij is N dagen geldig, geteld vanaf de eerste geauthenticeerde aanroep, met een verplichte datum “activeren vóór”, zodat een ongebruikte sleutel nooit eeuwig geldig blijft. Subsleutels werken pas als hun bovenliggende sleutel is geactiveerd, de activering wordt in het auditlogboek vastgelegd als apikey.activate en Community beperkt beide waarden tot 30 dagen.

PKCS#11 pincontrole bij herhaalde pogingen

De server telt onjuiste pinresultaten per token en stopt met aanmelden na max_pin_attempts, zodat een verkeerde pincode in de configuratie een hardwaretoken nooit blokkeert. De laatste poging wordt alleen gebruikt met allow_final_pin_try, en een beheerder zet de bewaking terug vanuit de console.

Opgeslagen CLI-profielen

sgcsign config bewaart de server, de provider en andere instellingen in benoemde profielen, en sgcsign auth set-key slaat de API-sleutel op, zodat buildscripts ze niet meer hoeven te herhalen. De Delphi-CLI en de .NET-tool esegece.sgcsign.cli delen dezelfde bestanden.

Tijdstempels met automatische terugval

  • Een serverbrede lijst met standaard RFC 3161-tijdstempelservers, die in volgorde worden geprobeerd tot er een antwoordt.
  • tsa_urls-lijsten per provider, en no_timestamp voor een aanvraag die geen tijdstempel mag krijgen.
  • sgcsign timestamp voegt een tijdstempel toe aan een bestand dat al met Authenticode is ondertekend, met dezelfde terugval.
timestamps
# sgcSignServer.conf.json
"timestamp": {
  "servers": ["http://timestamp.digicert.com", "http://timestamp.sectigo.com"],
  "timeout_ms": 30000
}

# Voeg een tijdstempel toe aan een al ondertekend bestand
sgcsign timestamp MyApp.exe --tsa http://timestamp.digicert.com --tsa http://timestamp.sectigo.com

Back-ups, bewaking en installatie

Laat de server jarenlang zonder verrassingen draaien: versleutelde back-ups, waarschuwingen voordat een certificaat verloopt, e-mail wanneer iemand moet ingrijpen, en een Windows-installatieprogramma.

Versleutelde geplande back-ups

Een archief bevat de configuratie, de database, de hoofdsleutel en elk sleutel- en certificaatbestand, versleuteld met AES-256-GCM onder een wachtwoordzin. Archieven worden volgens schema of vanuit de console gemaakt, en sgcSignServer --archive restore herstelt de server op dezelfde machine of verhuist hem naar een nieuwe.

Bewaking van de geldigheid van certificaten

De ondertekeningscertificaten en het TLS-certificaat van de server worden bij het starten en elke dag gecontroleerd. Waarschuwingen bij nog 30, 14, 7 en 1 dag verschijnen op het dashboard en gaan uit als de cert.expiring-webhook, een e-mail en de metric sgcsign_certificate_not_after_seconds.

E-mailmeldingen

E-mail wanneer een account wordt geblokkeerd, wanneer tweefactorauthenticatie of een wachtwoord wijzigt, wanneer een back-up mislukt of een certificaat bijna verloopt. SMTP met STARTTLS of impliciete TLS, en op Windows heeft de mailer geen OpenSSL-bibliotheken nodig.

Windows-installatieprogramma

sgcSignServer_Setup.exe installeert de server als Windows-service, maakt de eerste beheerder aan en opent de firewallpoort. TLS gebruikt een gegenereerd zelfondertekend certificaat, een bestaand PFX-bestand, of gewoon HTTP voor testmachines.

Hoe de stukken in elkaar passen

Eén Windows-service termineert TLS, biedt /api/v1 + /admin aan en raadpleegt bij elke aanroep de geconfigureerde sleutelprovider. Sleutelmateriaal staat nooit in de database.

Eén binary, drie interfaces

  • Build-agents spreken /api/v1 aan via HTTPS met een bearer API-sleutel.
  • Operators loggen in op /admin in elke browser. Bootstrap-UI, sessiecookies, op rollen gebaseerde toegang.
  • Sleutelproviders on-demand opgehaald uit PFX, Windows-store, PKCS#11, Azure TS, AWS KMS, GCloud KMS, Vault, Certum, CSC v2.
  • SQLite-database bewaart gebruikers, API-sleutels, audit-log, sessies en webhook-wachtrij. Nooit het sleutelmateriaal zelf.
  • Webhooks worden asynchroon afgevuurd naar SIEM- en chat-systemen bij elke geauditeerde gebeurtenis.
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)|
     +-------------+   +---------------+   +-----------+

Eén curl verwijderd

Een bearer API-sleutel, een hash- of bestandsupload en de ondertekende binary stroomt terug naar stdout. Authenticode, CAdES, PAdES, XAdES, ClickOnce, NuGet en VSIX delen dezelfde vorm.

Onderteken een .exe in één aanroep

  • X-API-Key of Authorization: Bearer — beide auth-methodes werken.
  • X-Project selecteert de tenant; de sleutel moet geautoriseerd zijn voor het project.
  • Het antwoord bevat X-Sgcsign-Signer-Subject + X-Sgcsign-Duration-Ms voor log-correlatie.
  • Hash-only-modus voor Authenticode: stuur de SHA-256, ontvang een kleine PKCS#7-blob.
sign-binary.sh
# MyApp.exe Authenticode-ondertekenen via de 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 die de server teruggeeft
# X-Sgcsign-Signer-Subject: CN=ACME Corp, O=ACME, C=US
# X-Sgcsign-Duration-Ms: 312

Drie stappen naar een ondertekende binary

Van een verse Windows-host naar het eerste ondertekende artefact in minder dan vijf minuten.

1

Installeren

Draai de meegeleverde Inno Setup-wizard of pak de zip uit in een map. De daemon registreert zichzelf als een Windows-service genaamd sgcSignServer. Bind aan :8443 en laad je TLS-certificaat.

2

Configureer een sleutelprovider

Voeg een provider toe aan sgcSignServer.conf.json — een PFX-bestand, een Azure Trusted Signing-account, een AWS KMS-sleutel, een Certum SimplySign-gebruiker of een van de andere tien sleutelproviders. Geen service-herstart vereist.

3

Geef een token uit en roep de API aan

Open /admin/apikeys, klik op New API key, koppel deze aan een project en kopieer het token naar je CI-runner-secret. De build-agent roept POST /api/v1/sign aan.

De beste deal: All-AccessElk eSeGeCe-product, inclusief Premium-ondersteuning, vanaf €1,059 per jaar.
Bekijk de All-Access-prijzen

Centraliseer ondertekenen voor je hele build farm

Stop met het kopiëren van ondertekencertificaten naar elke build-agent. Eén sgcSign Server, één REST-endpoint, volledige audit en goedkeuringen.