Bring dein eigenes Schlüsselmaterial mit — 10 Anbieter
Alle Anbieter implementieren das Interface IsgcKeyProvider — derselbe Signiercode funktioniert gegen lokale Dateien, Smartcards, HSMs, Cloud-KMS oder Remote-QTSPs. Wechsel mit einer Zeile.
Alle Anbieter implementieren das Interface IsgcKeyProvider — derselbe Signiercode funktioniert gegen lokale Dateien, Smartcards, HSMs, Cloud-KMS oder Remote-QTSPs. Wechsel mit einer Zeile.
TsgcPFXKeyProviderPFX/PKCS#12-Dateien. Lokaler, passwortgeschützter Schlüssel. Ideal für Entwicklung, kleinere Deployments und jeden Workflow, bei dem das Zertifikat als einzelne .pfx/.p12-Datei ausgeliefert wird.
PKCS12_PREFER_CNG_KSP — SHA-256/384/512-Signaturen funktionieren unabhängig vom ursprünglichen CSP.
.pfx-Dateien werden automatisch durchlaufen, bis das Zertifikat mit dem privaten Schlüssel gefunden ist.
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;
TsgcPEMKeyProviderPEM-Dateien. Verschlüsseltes PKCS#8 mit nativer Unterstützung für PBES2/PBKDF2/AES-CBC sowie das alte RSA-Privatschlüsselformat DEK-Info. Ideal für OpenSSL-basierte Pipelines.
BEGIN CERTIFICATE, BEGIN RSA PRIVATE KEY, BEGIN PRIVATE KEY, BEGIN ENCRYPTED PRIVATE KEY werden alle unterstützt.
PrivateKeyFile einfach leer.
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;
TsgcWindowsCertStoreProviderWindows-Zertifikatsspeicher. Local-Machine- und Current-User-Speicher. Ideal für Desktop-Apps, die bestehende AD-ausgestellte Zertifikate nutzen, oder für Deployments, in denen Windows den Lebenszyklus der Zertifikate bereits verwaltet.
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;
TsgcPKCS11ProviderPKCS#11/Hardware-Tokens. Smartcards, USB-Tokens, HSMs — SafeNet, YubiKey, Nitrokey, Thales. Für Qualifizierte Elektronische Signaturen in den meisten EU-Staaten erforderlich.
CKM_RSA_PKCS- und CKM_ECDSA_SHA256-Mechanismen werden unterstützt.
EnumerateSlots/EnumerateCertificates zur Auswahl des richtigen Slots zur Laufzeit.
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;
TsgcAzureTrustedSigningProviderAzure Trusted Signing. Microsofts qualifizierter Code-Signing-Dienst. Authenticode ohne den Kauf eines EV-Zertifikats — Microsoft ist Eigentümer des Zertifikats und stellt den Signaturschlüssel für dich bereit.
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;
TsgcAWSKMSKeyProviderAWS Key Management Service. Amazons HSM-gestützter Schlüsselverwahrdienst. Kombiniere ihn mit einem AWS-ausgestellten Zertifikat für In-Cloud-Signaturen, ohne den privaten Schlüssel offenzulegen.
KeyId akzeptiert Key-ID, Key-ARN oder Alias-ARN.
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;
TsgcGCloudKMSKeyProviderGoogle Cloud KMS. Dasselbe Betriebsmodell wie AWS KMS. Die JSON-Datei des Dienstkontos authentifiziert sich per JWT-Austausch gegen ein OAuth2-Access-Token und signiert dann über die Cloud KMS API.
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;
TsgcHashiCorpVaultKeyProviderHashiCorp Vault. Die Transit-Secrets-Engine von Vault führt die Signatur aus. Ideal für selbst gehostete, richtlinienbasierte Schlüsselverwahrung, wenn Vault bereits Teil des Stacks ist.
SetCertificateFromFile.
'transit'.
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;
TsgcCertumSimplySignProviderCertum SimplySign. Polnischer QTSP. Qualifizierte elektronische Signaturen über eine per Mobile App autorisierte PIN, ohne USB-Token. Häufige Wahl für polnische KSeF- und ZUS-Workflows.
ListCertificates gibt jedes im Konto verfügbare Zertifikat aus.
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;
TsgcCSCKeyProviderCloud Signature Consortium API v2. Generisches Interface zu jedem QTSP, der CSC v2 implementiert — Universign, D-Trust sign-me, A-Trust, FNMT Cl@ve Firma, Evrotrust, Intesi Group. Der Anbieter hält den qualifizierten Schlüssel in einem entfernten QSCD; sgcSign sendet nur den Dokumenten-Hash.
cscBasic, cscOAuth2, cscOTP (Einmalpasswort für 2FA).
credentials/authorize + signatures/signHash gemäß CSC v2-Spezifikation auf.
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;
Jeder Anbieter implementiert IsgcKeyProvider. Der Signiercode erfährt nie, ob der Schlüssel auf der Festplatte, auf einem Token, in Azure oder hinter einer CSC v2-API liegt.
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;
// Der Aufrufer wählt den Anbieter; den Signer interessiert das nicht.
SignWithAnyProvider(vPFX, vXML);
SignWithAnyProvider(vAzure, vXML);
SignWithAnyProvider(vCSC, vXML);