Bring Your Own Key — 10 provider
Tutti i provider implementano l'interfaccia IsgcKeyProvider — lo stesso codice di firma funziona con file locali, smart card, HSM, KMS cloud o QTSP remoti. Cambia con una sola riga.
Tutti i provider implementano l'interfaccia IsgcKeyProvider — lo stesso codice di firma funziona con file locali, smart card, HSM, KMS cloud o QTSP remoti. Cambia con una sola riga.
TsgcPFXKeyProviderFile PFX / PKCS#12. Chiave locale protetta da password. Ideale per sviluppo, deployment di piccole dimensioni e qualsiasi flusso di lavoro in cui il certificato viene distribuito come singolo file .pfx/.p12.
PKCS12_PREFER_CNG_KSP — la firma SHA-256/384/512 funziona indipendentemente dal CSP originale.
.pfx multi-cert vengono percorsi automaticamente finché non viene trovato il certificato con la chiave privata.
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;
TsgcPEMKeyProviderFile PEM. PKCS#8 cifrato con supporto nativo PBES2 / PBKDF2 / AES-CBC, oltre al formato DEK-Info legacy per chiavi private RSA. Ideale per pipeline basate su OpenSSL.
BEGIN CERTIFICATE, BEGIN RSA PRIVATE KEY, BEGIN PRIVATE KEY, BEGIN ENCRYPTED PRIVATE KEY tutti supportati.
PrivateKeyFile vuoto.
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;
TsgcWindowsCertStoreProviderArchivio certificati di Windows. Archivi della macchina locale e dell'utente corrente. Ideale per app desktop che usano certificati già emessi da AD, o qualsiasi deployment in cui Windows gestisce già il ciclo di vita del certificato.
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 / token hardware. Smart card, token USB, HSM — SafeNet, YubiKey, Nitrokey, Thales. Richiesto per le firme elettroniche qualificate nella maggior parte delle giurisdizioni UE.
CKM_RSA_PKCS e CKM_ECDSA_SHA256 supportati.
EnumerateSlots / EnumerateCertificates per scegliere lo slot corretto a runtime.
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. Il servizio di firma del codice qualificato di Microsoft. Authenticode senza acquistare un certificato EV — Microsoft possiede il certificato e fornisce la chiave di firma.
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. Il servizio di custodia delle chiavi di Amazon supportato da HSM. Abbinalo a un certificato emesso da AWS per firmare in cloud senza esporre la chiave privata.
KeyId accetta key ID, key ARN o 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. Stesso modello operativo di AWS KMS. Il file JSON del service account autentica tramite scambio JWT per ottenere un token di accesso OAuth2, poi firma tramite l'API Cloud KMS.
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. Il motore Transit di Vault esegue la firma. Ideale per la custodia delle chiavi self-hosted basata su policy quando Vault è già parte dello stack.
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. QTSP polacco. Firme elettroniche qualificate tramite PIN autorizzato da app mobile, nessun token USB richiesto. Scelta comune per i flussi polacchi KSeF e ZUS.
ListCertificates espone ogni certificato disponibile nell'account.
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. Interfaccia generica verso qualsiasi QTSP che implementa CSC v2 — Universign, D-Trust sign-me, A-Trust, FNMT Cl@ve Firma, Evrotrust, Intesi Group. Il provider conserva la chiave qualificata in un QSCD remoto; sgcSign invia solo l'hash del documento.
cscBasic, cscOAuth2, cscOTP (password monouso per autenticazione a due fattori).
credentials/authorize + signatures/signHash secondo la specifica CSC v2.
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;
Ogni provider implementa IsgcKeyProvider. Il codice del signer non sa mai se la chiave risiede su disco, su un token, in Azure o dietro un'API CSC v2.
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;
// Il chiamante sceglie il provider; al signer non importa.
SignWithAnyProvider(vPFX, vXML);
SignWithAnyProvider(vAzure, vXML);
SignWithAnyProvider(vCSC, vXML);