XML-ondertekening is een proces waarbij een digitale handtekening aan een XML-document wordt toegevoegd om de integriteit, authenticiteit en onweerlegbaarheid ervan te waarborgen. Door een digitale handtekening aan een XML-document toe te voegen, bevestigt de ondertekenaar de authenticiteit en integriteit van de gegevens, waardoor de herkomst van het document kan worden geverifieerd en kan worden gegarandeerd dat het niet is gewijzigd tijdens transport of opslag.
De digitale handtekening wordt gegenereerd met behulp van asymmetrische versleutelingstechnieken , doorgaans gebaseerd op een public-key infrastructure (PKI) . De ondertekenaar genereert een privésleutel die veilig wordt bewaard en een bijbehorende publieke sleutel die met anderen kan worden gedeeld. De privésleutel wordt gebruikt om een hash of digest van het XML-document te versleutelen, waarmee de digitale handtekening wordt gecreëerd. De versleutelde digest dient als een unieke representatie van de gegevens en wordt aan het XML-document toegevoegd.
XML-ondertekening is cruciaal in diverse domeinen, waaronder e-commerce, elektronische facturering, supply chain management en overheidstoepassingen. Het maakt veilige elektronische documentuitwisseling mogelijk, stelt de authenticiteit van gegevens vast en garandeert onweerlegbaarheid, wat betekent dat de ondertekenaar later zijn betrokkenheid of de integriteit van het document niet kan ontkennen.
Een overzicht van het XML-ondertekeningsproces:
- Een passende cryptografisch algoritme, zoals RSA, DSA, of ECDSAwordt door de XML-ondertekenaar gekozen om de digitale handtekening te produceren.
- Het te ondertekenen XML-document wordt voorbereid. Dit houdt in dat ervoor moet worden gezorgd dat het document voldoet aan de vereiste XML-syntaxis en -structuur.
- XML-canonicalisatie wordt toegepast op het document, wat ervoor zorgt dat variaties in witruimte, attribuutvolgorde of naamruimteprefixen de geldigheid van de handtekening niet beïnvloeden. Canonicalisatie produceert een gestandaardiseerde vorm van het XML-document voor ondertekening.
- Een digest, ook wel hash genoemd, wordt berekend over het gecanoniseerde XML-document. De digest fungeert als een unieke vingerafdruk van het document en wordt gebruikt in het ondertekeningsproces.
- Het digest wordt versleuteld met de privésleutel van de ondertekenaar, waarmee de digitale handtekening wordt aangemaakt. De privésleutel wordt veilig bewaard door de ondertekenaar en mag niet toegankelijk zijn voor onbevoegden.
- De digitale handtekening wordt in het XML-document ingevoegd, meestal als een extra element of kenmerk. Hierdoor kan de handtekening aan de ondertekende gegevens worden gekoppeld.
Encryption Consulting biedt een codeondertekeningsoplossing , " CodeSign Secure ", waarmee u de sleutels fraudebestendig kunt opslaan en volledige zichtbaarheid en controle over de codeondertekeningsactiviteiten krijgt. De privésleutels van het codeondertekeningscertificaat kunnen worden opgeslagen in een HSM om de risico's van gestolen, beschadigde of misbruikte sleutels te elimineren. Binnen deze oplossing bieden we een hulpprogramma, XML Signer, waarmee u XML-bestanden kunt ondertekenen. De onderstaande stappen helpen u om onze tool eenvoudig te gebruiken.
Een XML-bestand ondertekenen met XML Signer, in het kort: Stel de omgevingsvariabelen voor het SSL-clientauthenticatiecertificaat in en voer vervolgens de volgende opdracht uit.
xmlsigner -S <file> -u <username> -k <key_name> -a <algorithm> -c <certificate>De tool produceert een ondertekende kopie met het achtervoegsel "_signed"; de privésleutel blijft aan de serverzijde en wordt nooit rechtstreeks door de CLI verwerkt.
Key Takeaways
- SHA256 is het standaard hash-algoritme als
-awordt weggelaten; SHA224 is een zwakkere optie die is opgenomen voor compatibiliteit en over het algemeen niet de voorkeur verdient voor nieuwe ondertekeningsworkflows. - Het SSL-clientauthenticatiecertificaat authenticeert de CLI bij de ondertekeningsserver van Encryption Consulting; het is een aparte authenticatiegegevensbron, los van het codeondertekeningscertificaat/de sleutel die daadwerkelijk wordt gebruikt om het XML-document te ondertekenen.
Omgevingsmatrix
| Bestanddeel | eis |
|---|---|
| OS | Windows, macOS of Linux (xmlsigner.exe op Windows, ./xmlsigner op andere besturingssystemen) |
| Client authenticatie | SSL-clientauthenticatiecertificaat in PKCS12-formaat (.p12 of .pfx), verkregen via Encryption Consulting. |
| Ondertekeningsgegevens | Een geregistreerde gebruikersnaam, sleutelnaam en certificaat verstrekt door Encryption Consulting. |
| Ondersteunde hash-algoritmen | SHA224, SHA256 (standaard), SHA384, SHA512 |
| Sleutelopslag | Serverzijde; de CLI verwerkt de onbewerkte privésleutel nooit rechtstreeks. |
Eerste vereiste
Om XML Signer te kunnen gebruiken, moeten gebruikers eerst omgevingsvariabelen instellen voor het pad naar het SSL-clientauthenticatiecertificaat en het certificaatwachtwoord. Neem contact op met het Encryption Consulting-team als u dit nog niet hebt gedaan.
Let op: SSL-clientauthenticatiecertificaat moet in PKCS12-formaat zijn (.p12 of .pfx)
Voer de onderstaande opdrachten uit om omgevingsvariabelen in te stellen:
Mac of Linux
$ export SIGNER_SSL_CERT_PFX=path_to_ssl_certificate
$ export SIGNER_SSL_CERT_PFX_PASS=your_client_certificate_password
Windows
$ set SIGNER_SSL_CERT_PFX=path_to_ssl_certificate
$ set SIGNER_SSL_CERT_PFX_PASS=your_client_certificate_password
Hoe gebruik ik het hulpprogramma XML Signer?
Download de versie van het XML Signer Utility
Voer de onderstaande opdracht uit
Mac of Linux
$./xmlsigner -v
Windows
$ xmlsigner.exe -v
Krijg hulp van het XML Signer Utility
Voer de onderstaande opdracht uit
Mac of Linux
$./xmlsigner -h or $./xmlsigner --help
Windows
$ xmlsigner.exe -h or $ xmlsigner.exe --help
Een XML-document ondertekenen
Het hulpprogramma Signer genereert het ondertekende document met dezelfde naam met het achtervoegsel “_signed”
Gebruik de subopdracht 'sign' om een XML-document te ondertekenen.
./xmlsigner -S <file_to_be_signed> -u <user_name> -k <key_name> -a <algorithm> -c <key_certificate> -q
-S : XML-document dat ondertekend moet worden.
-u : Gebruikersnaam. Een gebruikersnaam op de server van Encryption Consulting. Neem contact op met het team van Encryption Consulting als u deze nog niet heeft.
-k : Sleutel-/certificaatnaam voor ondertekening/verificatie, verstrekt door de server van Encryption Consulting. Neem contact op met het team van Encryption Consulting als u deze nog niet hebt.
-a : Algoritme dat gebruikt moet worden voor ondertekening. Een van de volgende opties moet worden gebruikt:
- SHA224
- SHA256 (Standaard)
- SHA384
- SHA512
Als het algoritme niet is opgegeven, wordt standaard SHA256 gebruikt.
-c : Certificaatbestand geleverd door de server van Encryption Consulting.
-q : Voer de opdracht stil uit.
-h : Help weergeven
Voorbeelden
Mac of Linux
./xmlsigner -h
./xmlsigner -S file.xml -u admin -k SignCertificateName -a SHA256 -c
<path /to/certificate>
Windows
xmlsigner.exe -h
xmlsigner.exe -S file.xml -u admin -k SignCertificateName -a SHA256 -c
<path /to/certificate>
De handtekening verifiëren
Controleer na het ondertekenen of het uitvoerbestand (met de extensie “_signed”) een geldig handtekeningelement bevat voordat u het verspreidt. Open de ondertekende XML en controleer op een <Signature> element onder de XML-DSig-naamruimte (http://www.w3.org/2000/09/xmldsig#) bevatten SignedInfo, SignatureValueen KeyInfo kindelementen; een ontbrekend of onjuist gevormd handtekeningblok geeft aan dat de ondertekeningsstap stilzwijgend is mislukt in plaats van stilzwijgend is geslaagd.
Veel voorkomende fouten
| Fout | waarschijnlijke oorzaak | Bepalen |
|---|---|---|
| Authenticatie mislukt bij het verbinden met de ondertekeningsserver. | De omgevingsvariabelen SIGNER_SSL_CERT_PFX of SIGNER_SSL_CERT_PFX_PASS zijn niet ingesteld, onjuist of het bestandspad naar .p12/.pfx is verkeerd. | Controleer nogmaals of beide omgevingsvariabelen worden geëxporteerd in de huidige shellsessie, en niet alleen zijn ingesteld in een script dat nog niet is uitgevoerd. |
| Sleutel/certificaat niet gevonden | De waarde die aan -k wordt doorgegeven, komt niet overeen met een sleutelnaam die op de Encryption Consulting-server is geregistreerd voor die gebruikersnaam. | Bevestig de exacte sleutelnaam met het team van Encryption Consulting in plaats van een naam te raden. |
| Ongeldige XML / ondertekening mislukt bij het invoerbestand | Het invoerbestand is geen correct opgemaakt XML-bestand, of de canonisering mislukt vanwege onjuist opgemaakte naamruimten. | Controleer of de XML correct is opgemaakt voordat u ondertekent; onjuist opgemaakte XML zal niet correct worden gecanoniseerd, ongeacht het gebruikte ondertekeningsprogramma. |
CI/CD-gebruik en -opruiming
Voor herhaaldelijk ondertekenen in een pipeline stelt u de volgende instelling in: SIGNER_SSL_CERT_PFX en SIGNER_SSL_CERT_PFX_PASS omgevingsvariabelen als pipeline-geheimen gebruiken in plaats van ze hard te coderen in een script, en aanroepen xmlsigner met de -q vlag voor stille, niet-interactieve uitvoering. Controleer de idempotentie door te controleren op het verwachte <Signature> Het element moet direct na het ondertekenen in het uitvoerbestand worden opgenomen en de build moet mislukken als het ontbreekt, in plaats van ervan uit te gaan dat de exitcode van de opdracht op zich al succes bevestigt.
Voor het opruimen: als het .p12/.pfx clientauthenticatiecertificaat voor testdoeleinden naar een buildagent is gekopieerd, verwijder het dan zodra is bevestigd dat de pipeline werkt. Het is beter om het certificaat tijdens de uitvoering als pipelinegeheim toe te voegen in plaats van het permanent op het bestandssysteem van de agent op te slaan.
Veelgestelde Vragen / FAQ
Hoe weet ik of het ondertekeningscommando daadwerkelijk een geldige handtekening heeft gegenereerd?
Controleer het uitvoerbestand “_signed” op een correct gevormde code. <Signature> Het element onder de XML-DSig-naamruimte met SignedInfo, SignatureValue en KeyInfo aanwezig, in plaats van ervan uit te gaan dat een exitcode van nul op zich betekent dat de handtekening geldig is.
Wat is het verschil tussen een SSL-clientauthenticatiecertificaat en een ondertekeningscertificaat?
Het SSL-clientcertificaat (PKCS12/.p12/.pfx) authenticeert de CLI-tool bij de ondertekeningsserver van Encryption Consulting. De daadwerkelijke codeondertekeningssleutel die wordt gebruikt om de XML-handtekening te genereren, is een aparte, door de server beheerde referentie waarnaar wordt verwezen. -k sleutel naam.
Conclusie
XML-ondertekening garandeert de integriteit, authenticiteit en onweerlegbaarheid van XML-documenten. Het voegt een digitale handtekening toe die de herkomst van het document verifieert en manipulatie voorkomt. XML-ondertekening is essentieel voor een veilige gegevensuitwisseling, bevordert het vertrouwen in elektronische transacties en zorgt voor betrouwbare communicatie. Het vindt toepassingen in e-commerce, facturering, supply chain management en meer. Door gebruik te maken van tools en bibliotheken wordt het XML-ondertekeningsproces vereenvoudigd en kan het in diverse omgevingen worden geïntegreerd. Neem contact met ons op via [email protected] om onze tool te gebruiken die u kan helpen bij het XML-ondertekeningsproces.
