Breng je eigen sleutel mee — 10 providers

Alle providers implementeren de IsgcKeyProvider-interface — dezelfde ondertekencode werkt tegen lokale bestanden, smartcards, HSM's, cloud-KMS of remote QTSP's. Wissel met één regel.

Lokale bestanden (PFX, PEM)
Hardware (PKCS#11)
Cloud-KMS (Azure, AWS, GCP)
QTSP's (Certum, CSC v2)

TsgcPFXKeyProvider

PFX / PKCS#12 files. Lokale, met een wachtwoord beveiligde sleutel. Het beste voor ontwikkeling, kleine implementaties en elke workflow waarin het certificaat als één .pfx/.p12-bestand wordt geleverd.

  • Geïmporteerd via Windows CNG met PKCS12_PREFER_CNG_KSP op Windows, in puur Pascal geparseerd op Linux64, macOS, iOS en Android. SHA-256-/384-/512-ondertekening werkt ongeacht de oorspronkelijke CSP.
  • .pfx-bestanden met meerdere certificaten worden automatisch doorlopen tot het certificaat met de private sleutel is gevonden.
pfx.pas
var
  vPFX: TsgcPFXKeyProvider;
begin
  vPFX := TsgcPFXKeyProvider.Create(nil);
  try
    vPFX.FileName := 'certificate.pfx';
    vPFX.Password := 'mypassword';
    vPFX.LoadFromFile;
    // vSigner.KeyProvider := vPFX;
  finally
    vPFX.Free;
  end;
end;

TsgcPEMKeyProvider

PEM files. Versleutelde PKCS#8 met native PBES2- / PBKDF2- / AES-CBC-ondersteuning, plus het oudere DEK-Info-formaat voor privésleutels van RSA. Het beste voor pijplijnen op basis van OpenSSL.

  • BEGIN CERTIFICATE, BEGIN RSA PRIVATE KEY, BEGIN PRIVATE KEY, BEGIN ENCRYPTED PRIVATE KEY worden allemaal ondersteund.
  • Gecombineerde PEM's (certificaat + sleutel in één bestand) worden automatisch herkend, laat PrivateKeyFile dan leeg.
pem.pas
var
  vPEM: TsgcPEMKeyProvider;
begin
  vPEM := TsgcPEMKeyProvider.Create(nil);
  try
    vPEM.CertificateFile := 'cert.pem';
    vPEM.PrivateKeyFile  := 'key.pem';
    vPEM.PrivateKeyPassword := 'secret';
    vPEM.LoadFromFile;
    // vSigner.KeyProvider := vPEM;
  finally
    vPEM.Free;
  end;
end;

TsgcWindowsCertStoreProvider

Windows Certificate Store. Stores voor de lokale machine en de huidige gebruiker. Het beste voor desktop-apps die bestaande door AD uitgegeven certificaten gebruiken, of voor elke implementatie waarbij Windows de levenscyclus van het certificaat al beheert.

  • Ondertekenen gebeurt via Windows CNG, de privésleutel verlaat de store nooit.
  • Selectie op een deel van de subject-CN of op SHA-1-thumbprint.
winstore.pas
var
  vStore: TsgcWindowsCertStoreProvider;
begin
  vStore := TsgcWindowsCertStoreProvider.Create(nil);
  try
    vStore.StoreName := 'MY';
    vStore.StoreLocation := cslCurrentUser;
    vStore.SelectCertificateBySubject('My Company');
    // vSigner.KeyProvider := vStore;
  finally
    vStore.Free;
  end;
end;

TsgcPKCS11Provider

PKCS#11 / Hardware Tokens. Smartcards, USB-tokens en HSM's: SafeNet, YubiKey, Nitrokey, Thales. Vereist voor gekwalificeerde elektronische handtekeningen in de meeste EU-rechtsgebieden.

  • CKM_RSA_PKCS and CKM_ECDSA_SHA256 mechanismen worden ondersteund.
  • EnumerateSlots / EnumerateCertificates helpers om tijdens runtime het juiste slot te kiezen.
pkcs11.pas
var
  vTok: TsgcPKCS11Provider;
begin
  vTok := TsgcPKCS11Provider.Create(nil);
  try
    vTok.LibraryPath := 'C:\token\pkcs11.dll';
    vTok.SlotIndex := 0;
    vTok.PIN := '1234';
    vTok.CertificateLabel := 'MyCert';
    vTok.Connect;
    // vSigner.KeyProvider := vTok;
  finally
    vTok.Free;
  end;
end;

TsgcAzureTrustedSigningProvider

Azure Trusted Signing. De gekwalificeerde codeondertekeningsdienst van Microsoft. Authenticode zonder een EV-certificaat te kopen: Microsoft is eigenaar van het certificaat en richt de ondertekeningssleutel voor je in.

  • OAuth2-clientreferenties: Tenant ID + Client ID + Client Secret.
  • Privésleutels blijven volledig in Azure en staan nooit op de build-agent.
azure-ts.pas
var
  vAzure: TsgcAzureTrustedSigningProvider;
begin
  vAzure := TsgcAzureTrustedSigningProvider.Create(nil);
  try
    vAzure.TenantId := 'your-tenant-id';
    vAzure.ClientId := 'your-client-id';
    vAzure.ClientSecret := 'your-client-secret';
    vAzure.AccountName := 'mySigningAccount';
    vAzure.CertificateProfileName := 'default';
    vAzure.Connect;
    // vSigner.KeyProvider := vAzure;
  finally
    vAzure.Free;
  end;
end;

TsgcAWSKMSKeyProvider

AWS Key Management Service. De door HSM ondersteunde sleutelbeheerdienst van Amazon. Combineer met een door AWS uitgegeven certificaat voor ondertekening in de cloud, zonder de privésleutel bloot te geven.

  • AWS Signature Version 4-authenticatie, in-process berekend.
  • KeyId accepteert key-ID, key-ARN of alias-ARN.
aws-kms.pas
var
  vAWS: TsgcAWSKMSKeyProvider;
begin
  vAWS := TsgcAWSKMSKeyProvider.Create(nil);
  try
    vAWS.AccessKeyId := 'AKIAIOSFODNN7EXAMPLE';
    vAWS.SecretAccessKey := 'wJalrXUtnFEMI/K7MDENG/...';
    vAWS.Region := 'us-east-1';
    vAWS.KeyId := 'arn:aws:kms:us-east-1:...:key/my-key';
    vAWS.Connect;
    // vSigner.KeyProvider := vAWS;
  finally
    vAWS.Free;
  end;
end;

TsgcGCloudKMSKeyProvider

Google Cloud KMS. Hetzelfde werkmodel als AWS KMS. Het JSON-bestand van het service-account authenticeert via een JWT-uitwisseling naar een OAuth2-toegangstoken en ondertekent daarna via de Cloud KMS-API.

  • ProjectId + Location + KeyRing + Key + Version: komt 1:1 overeen met de GCP-resourcehiërarchie.
  • Alleen asymmetrische KMS-sleutels: HSM-ondersteund indien beschikbaar, anders softwarematig beveiligd.
gcloud-kms.pas
var
  vGCloud: TsgcGCloudKMSKeyProvider;
begin
  vGCloud := TsgcGCloudKMSKeyProvider.Create(nil);
  try
    vGCloud.ProjectId := 'my-project';
    vGCloud.LocationId := 'global';
    vGCloud.KeyRingId := 'my-key-ring';
    vGCloud.KeyId := 'my-signing-key';
    vGCloud.KeyVersion := '1';
    vGCloud.ServiceAccountJSON := 'C:\keys\sa.json';
    vGCloud.Connect;
    // vSigner.KeyProvider := vGCloud;
  finally
    vGCloud.Free;
  end;
end;

TsgcHashiCorpVaultKeyProvider

HashiCorp Vault. De Transit-secrets-engine van Vault voert de ondertekening uit. Het beste voor self-hosted, policy-gestuurd sleutelbeheer waarbij Vault al deel uitmaakt van de stack.

  • De Transit-engine beheert alleen de sleutel — lever het certificaat aan via SetCertificateFromFile.
  • Token-gebaseerde authenticatie; het standaard mount-path is 'transit'.
vault.pas
var
  vVault: TsgcHashiCorpVaultKeyProvider;
begin
  vVault := TsgcHashiCorpVaultKeyProvider.Create(nil);
  try
    vVault.VaultAddress := 'https://vault.example.com:8200';
    vVault.Token := 's.myVaultToken';
    vVault.MountPath := 'transit';
    vVault.KeyName := 'my-signing-key';
    vVault.Connect;
    vVault.SetCertificateFromFile('C:\certs\signing-cert.pem');
    // vSigner.KeyProvider := vVault;
  finally
    vVault.Free;
  end;
end;

TsgcCertumSimplySignProvider

Certum SimplySign. Poolse QTSP. Gekwalificeerde elektronische handtekeningen via een PIN die wordt geautoriseerd door een mobiele app, zonder USB-token. Een veelgekozen optie voor Poolse KSeF- en ZUS-workflows.

  • OAuth2-client-credentials + SimplySign-account-gebruikersnaam/wachtwoord + PIN.
  • ListCertificates toont elk certificaat dat in het account beschikbaar is.
certum.pas
var
  vCertum: TsgcCertumSimplySignProvider;
begin
  vCertum := TsgcCertumSimplySignProvider.Create(nil);
  try
    vCertum.ClientId := 'your-client-id';
    vCertum.ClientSecret := 'your-client-secret';
    vCertum.Username := 'user@example.com';
    vCertum.Password := 'account-password';
    vCertum.PIN := '123456';
    vCertum.BaseURL := 'https://cloudsign.certum.pl';
    vCertum.Connect;
    // vSigner.KeyProvider := vCertum;
  finally
    vCertum.Free;
  end;
end;

TsgcCSCKeyProvider

Cloud Signature Consortium API v2. Generieke interface naar elke QTSP die CSC v2 implementeert — Universign, D-Trust sign-me, A-Trust, FNMT Cl@ve Firma, Evrotrust, Intesi Group. De provider bewaart de gekwalificeerde sleutel in een remote QSCD; sgcSign stuurt alleen de document-hash.

  • Drie auth-modi: cscBasic, cscOAuth2, cscOTP (one-time password voor two-factor).
  • Roept credentials/authorize + signatures/signHash aan volgens de CSC v2-specificatie.
csc-v2.pas
var
  vCSC: TsgcCSCKeyProvider;
  vCreds: TStringArray;
begin
  vCSC := TsgcCSCKeyProvider.Create(nil);
  try
    vCSC.BaseURL := 'https://api.qtsp.example/csc/v2';
    vCSC.AuthMethod := cscBasic;
    vCSC.Username := 'alice';
    vCSC.Password := 'secret';
    vCreds := vCSC.ListCredentials;
    vCSC.CredentialID := vCreds[0];
    vCSC.PIN := '123456';
    vCSC.OTP := '987654';
    vCSC.LoadCredentialInfo;
    // vSigner.KeyProvider := vCSC;
  finally
    vCSC.Free;
  end;
end;

Wissel met één regel

Elke provider implementeert IsgcKeyProvider. De signer-code weet nooit of de sleutel op schijf staat, op een token, in Azure of achter een CSC v2-API.

Eén signer, tien providers

  • Ontwikkel met een lokale PFX. Test met de Windows-store. Deploy naar Azure Trusted Signing.
  • Landprofielen, handtekeningniveaus, OCSP, tijdstempels — al het andere blijft hetzelfde.
  • De sgcSign Server gebruikt intern dezelfde providers — centraliseer eerst lokaal en schaal later op naar een daemon.
swap-providers.pas
function SignWithAnyProvider(
  aProvider: IsgcKeyProvider; const aXML: string): string;
var
  vSigner: TsgcXAdESSigner;
begin
  vSigner := TsgcXAdESSigner.Create(nil);
  try
    vSigner.KeyProvider := aProvider;
    vSigner.Profile.LoadProfile(spEmploymentDE);
    Result := vSigner.SignXML(aXML);
  finally
    vSigner.Free;
  end;
end;

// Caller picks the provider; signer doesn't care.
SignWithAnyProvider(vPFX, vXML);
SignWithAnyProvider(vAzure, vXML);
SignWithAnyProvider(vCSC, vXML);
De beste deal: All-AccessElk eSeGeCe-product, inclusief Premium-ondersteuning, vanaf €1,059 per jaar.
Bekijk de All-Access-prijzen

Kies de juiste provider voor je vertrouwensmodel

Van een lokale .pfx tot een HSM op een ander continent — de ondertekencode blijft hetzelfde.