Jenkins is een open-source automatiseringstool die veel wordt gebruikt voor continue integratie en continue levering (CI/CD) van softwareapplicaties. Jenkins biedt een webgebaseerde gebruikersinterface waarmee u eenvoudig jobs kunt configureren en beheren. Dit zijn geautomatiseerde taken die kunnen worden gepland om op specifieke tijdstippen te worden uitgevoerd of die worden geactiveerd door specifieke gebeurtenissen. Deze jobs kunnen worden gebruikt om code te compileren, tests uit te voeren, applicaties te implementeren en vele andere taken met betrekking tot softwareontwikkeling uit te voeren.
Enkele belangrijke kenmerken van Jenkins zijn:
-
Eenvoudige installatie en configuratie
Jenkins is eenvoudig te installeren en configureren en kan op een breed scala aan besturingssystemen en platforms worden gebruikt.
-
Krachtig taakbeheer
Met Jenkins kunt u jobs aanmaken en beheren. Dit zijn geautomatiseerde taken die u kunt plannen om op specifieke tijdstippen uit te voeren of die worden geactiveerd door specifieke gebeurtenissen. Jobs kunnen worden gebruikt om code te compileren, tests uit te voeren, applicaties te implementeren en vele andere taken met betrekking tot softwareontwikkeling uit te voeren.
-
Breed scala aan plug-ins en integraties
Jenkins beschikt over een groot aantal plug-ins en integraties, waardoor het met veel verschillende tools en technologieën kan werken. Dit maakt het zeer aanpasbaar en flexibel.
-
Ondersteuning voor pijpleidingen
Jenkins biedt krachtige ondersteuning voor pipelines, sets van fasen die een softwareontwikkelingsworkflow definiëren. Pipelines kunnen worden gedefinieerd met behulp van code, waardoor ze zeer aanpasbaar en eenvoudig te beheren zijn.
-
Ingebouwde testondersteuning
Jenkins biedt ingebouwde ondersteuning voor veel verschillende soorten tests, waaronder unittests, integratietests en functionele tests. Dit maakt het eenvoudig om tests uit te voeren als onderdeel van een continue integratieworkflow, zodat alle codewijzigingen grondig worden getest voordat ze in productie worden genomen.
-
Schaalbaarheid
Jenkins kan eenvoudig worden geschaald ter ondersteuning van grote ontwikkelteams en complexe softwareontwikkelingsworkflows.
-
Open-source
Jenkins is open-sourcesoftware. Dit betekent dat u de software gratis kunt gebruiken en kunt aanpassen aan de specifieke behoeften van uw ontwikkelteam.
Codesigning met Jenkins
Om codesigning met Jenkins uit te voeren, volgt u de onderstaande stappen.
Codeondertekening is een procedure die de legitimiteit van de auteur en de originaliteit en authenticiteit van digitale informatie, met name softwarecode, verifieert. Het zorgt er ook voor dat de informatie geen kwaadaardige code bevat. Bovendien garandeert het dat deze informatie na digitale ondertekening niet is gewijzigd, vervalst of verwijderd.
Het integreren van Jenkins met codeondertekening, in het kort: installeer SignTool en de KSP-client op de Jenkins-agent, verleen het Jenkins-serviceaccount alleen de specifieke, beperkte machtigingen die de KSP vereist (niet de lokale beheerdersrechten), en voeg vervolgens een pipeline-stap toe die SignTool aanroept met het bij de KSP geregistreerde certificaat. De privésleutel blijft gedurende het hele proces in de HSM; de pipeline verwerkt deze nooit rechtstreeks.
Key Takeaways
- Het Jenkins-serviceaccount zou nooit volledige lokale beheerdersrechten nodig moeten hebben om te kunnen ondertekenen. Als u een machtigingsfout krijgt, verleen dan de specifieke toegang die de KSP of ondertekeningstool nodig heeft, en geef niet standaard beheerdersrechten om de fout te laten verdwijnen.
- Deze pagina behandelt Jenkins specifiek als platformhandleiding. Voor de bredere referentiearchitectuur, goedkeuringsprocessen en het model voor auditbewijs, zie Best practices voor codeondertekening in de SDLC.
Vereisten voor het uitvoeren van deze taak zijn:
- Jenkins-installatie en configuratie op uw apparaat
- Signtool geïnstalleerd en geconfigureerd
- ECSigning KSP geïnstalleerd en geconfigureerd.
Volg de link om Jenkins in te stellen en te configureren.
Volg de onderstaande stappen om Signtool in te stellen en te configureren:
Signtool kan worden gedownload als onderdeel van de Windows SDK. Download de Windows SDK: ( developer.microsoft.com/en-us/windows/downloads/windows-10-sdk/ )
U kunt ervoor kiezen om alleen de Windows SDK Signing Tools voor desktop-apps te installeren.
Open het bestand winsdksetup.exe. Onthoud het standaardpad dat wordt weergegeven in het installatiepad, omdat dit handig is bij het uitvoeren van deze opdrachten vanaf de opdrachtprompt.

Op de pagina Windows Kits Privacy is elke optie om Microsoft toestemming te geven om inzichten te verzamelen in orde. Klik op Volgende.

Accepteer de licentieovereenkomst

Deselecteer alle functies behalve Windows SDK Signing Tools voor desktop-apps en selecteer vervolgens installeren.

Wanneer u wordt gevraagd of u wilt toestaan dat deze app wijzigingen aanbrengt, selecteert u Ja.


Klik op de Windows-zoekbalk op de taakbalk en typ 'Bewerk de systeemomgevingsvariabelen'. Selecteer vervolgens de gelijknamige optie in het Configuratiescherm.

Klik op omgevingsvariabelen.

Voordat u de variabelenlijst bewerkt, navigeert u met behulp van Verkenner naar de installatielocatie van de Windows SDK. U moet het pad kopiëren van de map waarin de Signtool-applicatie zich bevindt. Het standaardpad is C:\Program Files (x86)\Windows Kits\10\bin\10.0.22621.0\x64 ( zie onderstaande schermafbeelding). Zorg ervoor dat u met de rechtermuisknop klikt en het pad kopieert zoals weergegeven. U ziet de Signtool-applicatie ook onderaan de lijst met bestanden; dit is de opdracht die u moet uitvoeren.

Klik in de lijst met systeemvariabelen op 'Nieuw'. Typ vervolgens 'Pad' als variabelenaam en kopieer en plak het pad. Klik daarna op 'OK' in het venster met omgevingsvariabelen en het venster met systeeminstellingen.

Om de installatie te testen, opent u de opdrachtprompt en typt u signtool. De uitvoer zou er dan als volgt uit moeten zien.

De standaard installatielocatie van signtool is bijvoorbeeld: C:\Program Files (x86)\Windows Kits\10\bin\10.0.22621.0\x64
Om KSP in te stellen, volgt u de onderstaande stappen:
Encryption Consulting biedt u de oplossing CodeSignSecure aan . Deze oplossing helpt u bij het veilig opslaan van sleutels en zorgt voor volledig inzicht in en controle over uw codeondertekeningsactiviteiten. De privésleutels van het codeondertekeningscertificaat kunnen worden opgeslagen in een HSM (Hardware Security Module) om de risico's van gestolen, beschadigde of misbruikte sleutels te elimineren.
Als u onze oplossing gebruikt, kunt u de KSP downloaden met behulp van de onderstaande stappen:
- Inloggen Code Sign Secure.
-
Navigeer naar: Signing tools repository.

- Download “Encryptie Consulting CNG-SigningKSP”
-
Installeer de clienttools met behulp van het .MSI-installatieprogramma. Het .MSI-installatieprogramma automatiseert een groot deel van de configuratie. Navigeer naar de locatie waar het gedownloade bestand is opgeslagen en start het installatieprogramma.

-
Klik op Volgende wanneer de installatiewizard verschijnt.

-
Klik volgende.

- In de Gebruikersnaam veld, typ admin.
-
Kopieer in het veld 'Code' de code uit de Postman API-repository . Klik op de GetLoginToken API en kopieer de code uit het veld 'Body'.
Download Postman via deze link . Klik na het downloaden op de knop 'Overslaan' onderaan het venster. Voeg in het dashboard een nieuwe collectie toe met het plusteken naast 'Collecties'.
GetLoginToken API (http://codesignsecureapi.encryptionconsulting.com/api/auth/GetLoginToken): Dit is de belangrijkste API, omdat deze u een Bearer Token geeft die u met de andere API's kunt gebruiken. Wat er in de body moet staan, wordt hieronder weergegeven. De code dient als wachtwoord om de Bearer Token te verkrijgen, het veld 'user' is de gebruikersnaam en het veld 'identity type' specificeert het gebruikerstype. Klik op 'Send' om een uitvoer te genereren met de Bearer Token onderaan. Kopieer deze token voor gebruik.

- Verander de Identiteit Type om 1.
- Verlof API BaseURL hetzelfde.
-
Klik volgende.

-
Klik volgende.

-
U krijgt dan een melding dat dit programma wijzigingen zal aanbrengen op uw pc. Klik op Ja.

-
De installatie is nu voltooid.

Zodra Jenkins is ingesteld, heeft het serviceaccount dat Jenkins uitvoert toestemming nodig om signtool aan te roepen en de KSP te bereiken. Dit vereist geen volledige lokale beheerdersrechten, en het uitvoeren van Jenkins als beheerder om een probleem met ondertekeningsrechten op te lossen is een schending van het principe van minimale bevoegdheden die u beter kunt vermijden. De daadwerkelijke vereiste is beperkter: het Jenkins-serviceaccount heeft leesrechten nodig voor het pad naar het certificaatbestand waarnaar in de pipeline wordt verwezen, en de specifieke machtiging die de KSP-client nodig heeft om zich te authenticeren bij de ondertekeningsservice (doorgaans een geregistreerde clientidentiteit, geen lokale beheerder). Verleen die specifieke toegang via een speciaal serviceaccount met beperkte bevoegdheden in plaats van standaard de beheerder te gebruiken; raadpleeg de documentatie van uw KSP voor de exacte benodigde machtiging in plaats van brede rechten te verlenen om een onduidelijke fout te omzeilen.
- Ga naar de services op je systeem (je kunt ernaar zoeken) om te controleren onder welk account Jenkins momenteel draait. Dit zie je in de kolom 'Aanmelden als'.
- Als Jenkins geen verbinding kan maken met signtool of de KSP vanwege een machtigingsfout, is de oplossing om het betreffende serviceaccount de ontbrekende machtiging te verlenen (toegang tot het certificaatpad of registratie bij de KSP-client), en niet om het account de rol van beheerder te geven. Dubbelklik op Jenkins in Services, of klik met de rechtermuisknop en kies Eigenschappen, vervolgens Aanmelden, om de machtigingen van het account te bekijken en aan te passen.
Zodra we dit hebben ingesteld, gaan we naar Jenkins. De URL/hostname die je eerder tijdens de installatie hebt opgegeven, zal je via je browser naar Jenkins leiden. In mijn systeem heb ik deze ingesteld op http://localhost:8080/ (dit is ook de standaardinstelling).
Volg de onderstaande stappen in uw Dashboard:
-
Klik op Nieuw item op het Dashboard.

-
Voer een itemnaam in en klik op pijplijn en klik op OK.

-
Op de configuratiepagina, onder Algemeen, kunt u een gewenste beschrijving invullen.

-
Scroll naar beneden om Pipeline te vinden.

-
Schrijf het script in het scriptvak en klik op Opslaan. Je moet je omgevingsvariabele aanpassen aan je instellingen.
pijplijn { agent elke omgeving { SM_KEY_NAME='evcodesigning' SM_CLIENT_CERT_FILE='C:\\Gebruikers\\Beheerder\\Bureaublad\\VoorTesten\\evcodesigning.pem' SM_HASHING_ALGORITHM='SHA256' SM_TIME_STAMP_SERVER="http://timestamp.digicert.com" SM_FILEPATH="C:\\Gebruikers\\Beheerder\\Bureaublad\\VoorTesten\\AgentService.exe" } fasen { fase('Codeondertekening') { stappen { dir('C:\\Gebruikers\\Beheerder\\Bureaublad\\VoorTesten') { bat 'signtool sign /csp "Encryptie Consulting Sleutelopslagprovider" /kc %SM_KEY_NAME% /fd %SM_HASHING_ALGORITHM% /f %SM_CLIENT_CERT_FILE% /tr %SM_TIME_STAMP_SERVER% /td SHA256 %SM_FILEPATH%' } } } } } -
Klik op 'Nu bouwen'. U ziet dan een buildnummer op het scherm verschijnen.

-
Als u op het buildnummer klikt en naar de console-uitvoer gaat, ziet u dat uw bestand is ondertekend.

Verificatie en foutafhandeling
Beschouw "de pijplijnfase is voltooid" niet als bewijs dat de handtekening geldig is. Voeg direct na het ondertekenen een verificatiestap toe die wordt uitgevoerd. signtool verify /pa De build mislukt als het ondertekende bestand niet wordt geverifieerd en de verificatie geen succes oplevert. Een stille ondertekeningsfout wordt gedetecteerd voordat het artefact verder in de pipeline terechtkomt. Als de pipeline een ondertekeningsfout meldt, raadpleeg dan de onderstaande tabel voordat u ervan uitgaat dat het certificaat ongeldig is.
| Fout | waarschijnlijke oorzaak | Bepalen |
|---|---|---|
| Er werden geen certificaten gevonden die aan alle gestelde criteria voldeden. | De KSP-containernaam (SM_KEY_NAME) komt niet overeen met een geregistreerde sleutel, of de KSP-client is niet geverifieerd. | Bevestig de exacte containernaam en controleer de authenticatiestatus van de KSP opnieuw, onafhankelijk van de pipeline. |
| Toegang is geweigerd | Het Jenkins-serviceaccount beschikt niet over de specifieke machtiging die de KSP nodig heeft (dit is geen reden om beheerdersrechten te verlenen). | Verleen de beperkte machtiging die in de KSP-documentatie is gespecificeerd voor clientauthenticatie. |
| De opgegeven tijdstempelserver was niet bereikbaar of gaf een ongeldig antwoord. | Het probleem wordt veroorzaakt doordat het netwerk/de firewall de TSA-URL blokkeert, of door een tijdelijke storing bij TSA. | Bevestig de uitgaande toegang tot de URL met tijdstempel; probeer het opnieuw, aangezien storingen bij TSA meestal van tijdelijke aard zijn. |
Bij een rollback moet, als later blijkt dat een build onjuist is ondertekend (verkeerd certificaat, verkeerd bestand), niet geprobeerd worden de handtekening ter plekke te "corrigeren". Verwijder het artefact en voer de pipeline opnieuw uit vanaf de ondertekeningsfase met een gecorrigeerde configuratie. Zo ontstaat een duidelijk auditspoor dat aantoont dat het oorspronkelijke, foutieve artefact nooit is vrijgegeven en niet stilletjes is gewijzigd.
Veelgestelde Vragen / FAQ
Heeft het Jenkins-serviceaccount beheerdersrechten nodig om signtool uit te voeren?
Nee. Het vereist de specifieke machtiging die de KSP nodig heeft voor authenticatie en toegang tot het certificaatpad waarnaar in de pipeline wordt verwezen, en niet volledige lokale beheerdersrechten. Het aangrijpen van een machtigingsfout als reden om beheerdersrechten te verlenen is een veelvoorkomende, maar vermijdbare schending van het principe van minimale bevoegdheden.
Hoe weet ik zeker dat de pipeline daadwerkelijk een geldige handtekening heeft gegenereerd, en niet alleen dat er geen fout is opgetreden tijdens de fase?
Voeg een verificatiestap toe die wordt uitgevoerd signtool verify /pa Het systeem controleert het ondertekende bestand en laat de build mislukken bij elke andere melding dan 'succes', in plaats van ervan uit te gaan dat een voltooide ondertekeningsfase een geldige handtekening betekent.
Gaat de privésleutel ooit via de Jenkins-agent?
Nee, in een correct geconfigureerde omgeving. De agent stuurt een ondertekeningsverzoek via de KSP naar de door de HSM ondersteunde ondertekeningsservice; de bewerking met de privésleutel vindt plaats binnen de HSM.
