Hoppa till innehåll

47-dagarscertifikaten är på väg. Är du redo?

Agera nu →

Hur man integrerar en Jenkins CI CD-pipeline med kodsignering

uppgifter relaterade till mjukvaruutveckling

Jenkins är ett automatiseringsverktyg med öppen källkod som används flitigt för kontinuerlig integration och kontinuerlig leverans (CI/CD) av programvaruapplikationer. Jenkins tillhandahåller ett webbaserat användargränssnitt som gör det enkelt att konfigurera och hantera jobb, vilka är automatiserade uppgifter som kan schemaläggas att köras vid specifika tidpunkter eller utlösas av specifika händelser. Dessa jobb kan användas för att kompilera kod, köra tester, distribuera applikationer och utföra många andra uppgifter relaterade till programvaruutveckling.

Några av Jenkins viktigaste funktioner inkluderar:

  • Enkel installation och installation

    Jenkins är enkelt att installera och konfigurera och kan konfigureras på en mängd olika operativsystem och plattformar.

  • Kraftfull jobbhantering

    Jenkins låter dig skapa och hantera jobb, vilket är automatiserade uppgifter som kan schemaläggas att köras vid specifika tidpunkter eller utlösas av specifika händelser. Jobb kan användas för att kompilera kod, köra tester, distribuera applikationer och utföra många andra uppgifter relaterade till mjukvaruutveckling.

  • Brett utbud av plugins och integrationer

    Jenkins har ett stort antal plugins och integrationer tillgängliga, vilket gör att det kan fungera med många olika verktyg och tekniker. Detta gör det mycket anpassningsbart och flexibelt.

  • Stöd för pipelines

    Jenkins har starkt stöd för pipelines, vilka är uppsättningar av steg som definierar ett arbetsflöde för mjukvaruutveckling. Pipelines kan definieras med hjälp av kod, vilket gör dem mycket anpassningsbara och enkla att versionskontrollera.

  • Inbyggt teststöd

    Jenkins erbjuder inbyggt stöd för många olika typer av tester, inklusive enhetstester, integrationstester och funktionstester. Detta gör det enkelt att köra tester som en del av ett kontinuerligt integrationsarbetsflöde, vilket säkerställer att alla kodändringar testas noggrant innan de driftsätts till produktion.

  • Skalbarhet

    Jenkins kan enkelt skalas för att stödja stora utvecklingsteam och komplexa arbetsflöden för mjukvaruutveckling.

  • Öppen källkod

    Jenkins är programvara med öppen källkod, vilket innebär att den är gratis att använda och kan anpassas för att möta de specifika behoven hos ditt utvecklingsteam.

Samdesign med Jenkins

För att utföra samdesign med Jenkins, följ stegen nedan.

Kodsignering är en procedur som verifierar författarens legitimitet och originaliteten och äktheten hos digital information, särskilt programkod. Det säkerställer också att informationen inte är skadlig kod. Dessutom garanterar det att informationen inte har ändrats, förfalskats eller annullerats efter att ha signerats digitalt.

Att integrera Jenkins med kodsignering, kort sagt: installera SignTool och KSP-klienten på Jenkins-agenten, ge Jenkins-tjänstkontot endast de specifika, snäva behörigheter som KSP kräver (inte den lokala administratören), och lägg sedan till en pipeline-fas som anropar signtool mot det KSP-registrerade certifikatet. Den privata nyckeln finns kvar i HSM hela tiden; pipelinen hanterar den aldrig direkt.

Key Takeaways

  • Jenkins-tjänstkontot ska aldrig behöva fullständiga lokala administratörsrättigheter för signering. Om du stöter på ett behörighetsfel, bevilja den specifika åtkomst som KSP eller signtool behöver, ange inte standardåtkomst till administratör för att få felet att försvinna.
  • Den här sidan behandlar Jenkins specifikt som en plattformshandledning. För den bredare referensarkitekturen, godkännandegrindar och revisionsbevismodellen, se Bästa praxis för kodsignering i SDLC.

Förutsättningar för att utföra denna uppgift inkluderar:

  1. Jenkins-installation och konfiguration på din enhet
  2. Signtool installerat och konfigurerat
  3. ECSigning KSP installerad och konfigurerad.

För att installera och konfigurera Jenkins, gå igenom länken.

Lösning för företagskodsignering

Få en lösning för alla dina behov av kodsignering och kryptografi för mjukvara med vår kodsigneringslösning.

För att installera och konfigurera Signtool, följ stegen nedan:

Signtool kan laddas ner som en del av Windows SDK. Ladda ner Windows SDK: ( developer.microsoft.com/en-us/windows/downloads/windows-10-sdk/ )

Du kan välja att endast installera Windows SDK-signeringsverktygen för skrivbordsappar.

Öppna filen winsdksetup.exe. Kom ihåg standardsökvägen som visas i installationssökvägen, eftersom det kommer att vara till hjälp när du kör dessa kommandon från kommandotolken.

Windows SDK-hem

På sidan Sekretess för Windows Kits är båda alternativen för att tillåta Microsoft att samla in insikter okej. Klicka på Nästa.

sekretess för Windows SDK

Acceptera licensavtalet

licensavtal för Windows SDK

Avmarkera alla funktioner utom Windows SDK-signeringsverktyg för skrivbordsappar och välj sedan installera.

Windows SDK-funktion

När du tillfrågas om du vill tillåta att den här appen gör ändringar väljer du ja.

kontroll av Windows användarkonto
Windows SDK slutgiltig

Klicka på Windows sökfält i aktivitetsfältet och skriv "Redigera systemmiljövariablerna" och välj alternativet med samma namn på kontrollpanelen.

redigera systemmiljövariabel

Klicka på miljövariabler.

miljövariabler modala

Innan du redigerar variabellistan, navigera till den plats där Windows SDK är installerat med hjälp av Utforskaren. Du måste kopiera sökvägen till mappen som innehåller signtool-programmet. Standardsökvägen är C:\Program Files (x86)\Windows Kits\10\bin\10.0.22621.0\x64, se skärmdumpen nedan. Se till att högerklicka och kopiera sökvägen som visas. Du kan också se signtool-programmet längst ner i fillistan, det är detta kommando du kommer att köra.

installationsväg för signtool

I listan Systemvariabler klickar du på ny. Skriv sedan Sökväg som variabelnamn och kopiera och klistra in den ovannämnda sökvägen. Klicka sedan på OK i fönstret för miljövariabler och systemegenskaper.

lägg till ny systemvariabel

För att testa installationen, öppna kommandotolken och skriv signtool, så bör utdata vara som visas nedan.

signtool-kommandotolken

Standardinstallationsplatsen för signtool är till exempel: C:\Program Files (x86)\Windows Kits\10\bin\10.0.22621.0\x64

För att konfigurera KSP, följ stegen nedan:

Encryption Consulting erbjuder lösningen CodeSignSecure . Lösningen kan hjälpa dig med manipulationssäker förvaring av nycklar och fullständig insyn och kontroll över kodsigneringsaktiviteter. De privata nycklarna till kodsigneringscertifikatet kan lagras i en HSM för att eliminera riskerna med stulna, skadade eller missbrukade nycklar.

Om du använder vår lösning kan du ladda ner KSP med hjälp av stegen nedan:

  • Logga in Kodsignera säkert.
  • Navigera till: Arkiv för signeringsverktyg.

    codesign-sida för verktyg för säkra signering
  • Ladda ner “Krypteringskonsulting CNG-SigningKSP”
  • Installera klientverktygen med hjälp av .MSI-installationsprogrammet. .MSI-installationsprogrammet automatiserar mycket av konfigurationen. Navigera till var den nedladdade filen är sparad och starta installationsprogrammet.

    msi-installationsprogrammet
  • Klicka på Nästa när installationsguiden visas.

    ec-signering ksp-installation hem
  • Klicka på nästa.

    installation av ec-signering av ksp-installationsmapp
  • I Användarnamn fält, skriv admin.
  • I fältet Kod kopierar du koden från Postman API Repository . Klicka på GetLoginToken API och kopiera koden från brödtexten.

    Ladda ner PostMan från den här länken . När nedladdningen är klar klickar du på knappen "hoppa över" längst ner i fönstret. Lägg till en ny samling med hjälp av plustecknet bredvid "samlingar" på instrumentpanelen.

    GetLoginToken API (http://codesignsecureapi.encryptionconsulting.com/api/auth/GetLoginToken): Detta är det viktigaste API:et, eftersom det ger dig en Bearer-token att använda med resten av API:erna. Vad som ska finnas i texten visas nedan. Koden fungerar som ett lösenord för att få en Bearer-token, användarfältet är användarnamnet och identitetstypfältet anger användartypen. Klicka på Skicka för att generera en utdata som har Bearer-token listad längst ner. Kopiera denna token för användning.

    brevbärartoken-API
  • Ändra Identitet Typ till 1.
  • Lämna API-basURL det samma.
  • Klicka på nästa.

    ec-signering ksp-inställningar användarautentiseringsinformation
  • Klicka på nästa.

    ec-signering ksp installation installationsbekräftelse
  • Du får då ett meddelande om att programmet kommer att göra ändringar på din dator, klicka på ja.

    msi-installation av användarkontokontroll
  • Installationen är nu klar.

    EC-signering KSP-installation klar

När Jenkins har konfigurerats behöver tjänstkontot som kör det behörighet att anropa signtool och nå KSP:n. Detta kräver inte fullständiga lokala administratörsrättigheter, och att köra Jenkins som administratör för att lösa ett problem med signeringsbehörighet är en kränkning av minsta behörighet som är värd att undvika. Det faktiska kravet är snävare: Jenkins-tjänstkontot behöver läsåtkomst till certifikatfilens sökväg som refereras i pipelinen och vilken specifik behörighet som KSP-klienten kräver för att autentisera sig mot signeringstjänsten (vanligtvis en registrerad klientidentitet, inte lokal administratör). Bevilja den specifika åtkomsten via ett dedikerat tjänstkonto med låg behörighet istället för att använda administratörsbehörighet som standard. Se din KSP:s dokumentation för exakt vilken behörighet som behövs istället för att bevilja breda rättigheter för att kringgå ett oklart fel.

  • Gå till tjänster på ditt system (du kan söka efter det) för att kontrollera vilket konto Jenkins för närvarande körs som, synligt i kolumnen "Logga in som".
  • Om Jenkins inte kan nå signtool eller KSP:n på grund av ett behörighetsfel, är lösningen att ge det specifika tjänstkontot den begränsade behörighet som saknas (filåtkomst till certifikatsökvägen eller KSP-klientregistrering), inte att byta konto till administratör. Dubbelklicka på Jenkins i Tjänster, eller högerklicka och välj Egenskaper, sedan Logga in, för att visa och justera kontots behörigheter.

När vi har ställt in detta går vi vidare till Jenkins. Oavsett vilken URL/hostnamn du angav tidigare under konfigurationen, kommer du att nå Jenkins genom att navigera till det från din webbläsare. I mitt system har jag ställt in det som http://localhost:8080/ (Det är också standard).

Följ stegen nedan i din instrumentpanel:

  • Från instrumentpanelen klicka på Nytt objekt.

    Jenkins instrumentpanel
  • Ange valfritt objektnamn och klicka på pipeline och klicka på ok.

    jenkins ange objektnamn
  • På konfigurationssidan, under Allmänt, skriv in en önskad beskrivning.

    Jenkins allmänna konfiguration
  • Scrolla ner till botten för att hitta Pipeline.

    jenkins konfigurerar pipeline
  • Skriv skriptet i skriptrutan och klicka på spara. Du måste redigera din miljövariabel enligt dina inställningar.

    pipeline { agent valfri miljö { SM_KEY_NAME='evcodesigning' SM_CLIENT_CERT_FILE='C:\\Användare\\Administratör\\Skrivbord\\FörTesting\\evcodesigning.pem' SM_HASHING_ALGORITHM='SHA256' SM_TIME_STAMP_SERVER="http://timestamp.digicert.com" SM_FILEPATH="C:\\Användare\\Administratör\\Skrivbord\\FörTesting\\AgentService.exe" } stages { stage('Kodsignering') { steps { dir('C:\\Användare\\Administratör\\Skrivbord\\FörTesting'){ bat 'signtool signera /csp "Krypteringskonsulttjänst för nyckellagring" /kc %SM_KEY_NAME% /fd %SM_HASHING_ALGORITHM% /f %SM_CLIENT_CERT_FILE% /tr %SM_TIME_STAMP_SERVER% /td SHA256 %SM_FILEPATH%' } } } } }
    
  • Klicka på bygg nu så ser du ett byggnummer som visas på skärmen.

    Jenkins bygger
  • Om du klickar på byggnumret och väljer konsolutdata ser du att din fil har signerats.

    Jenkins har signerat filen

Verifiering och felhantering

Behandla inte "pipeline-steget är slutfört" som bevis på att signaturen är giltig. Lägg till ett verifieringssteg omedelbart efter signering som körs signtool verify /pa mot den signerade filen och misslyckas med byggprocessen om verifieringen inte returnerar lyckad uppdatering, vilket upptäcker ett tyst signeringsfel innan artefakten flyttas vidare i pipelinen. Om pipelinen rapporterar ett signeringsfel, kontrollera tabellen nedan innan du antar att certifikatet är ogiltigt.

FelTroligtvis orsakFast
Inga certifikat hittades som uppfyllde alla angivna kriterierKSP-containernamnet (SM_KEY_NAME) matchar inte en registrerad nyckel, eller så är KSP-klienten inte autentiserad.Bekräfta det exakta containernamnet och kontrollera KSP:ns autentiseringsstatus igen oberoende av pipelinen.
Åtkomst nekadJenkins-tjänstkontot saknar den specifika behörighet som KSP behöver (detta är inte en anledning att bevilja administratörsbehörighet)Bevilja den snäva behörighet som KSP-dokumentationen anger för klientautentisering
Den angivna tidsstämpelservern kunde antingen inte nås eller returnerade ett ogiltigt svarNätverk/brandvägg som blockerar TSA-URL:en, eller ett tillfälligt TSA-avbrottBekräfta utgående åtkomst till tidsstämpelns URL; försök igen, eftersom TSA-avbrott vanligtvis är övergående.

Om det vid återställning senare visar sig att en build har signerats felaktigt (fel certifikat, fel fil), försök inte att "fixa" signaturen på plats; kassera artefakten och kör pipelinen igen från signeringsstadiet mot en korrigerad konfiguration, så att det finns en ren revisionslogg som visar att den ursprungliga felaktiga artefakten aldrig släpptes snarare än ändrades i det tysta.

Vanliga frågor om partihandel med mat och dryck

Behöver Jenkins-tjänstkontot administratörsrättigheter för att köra signtool?

Nej. Den behöver den specifika behörighet som KSP kräver för att autentisera och få åtkomst till certifikatsökvägen som refereras i pipelinen, inte fullständiga lokala administratörsrättigheter. Att behandla ett behörighetsfel som en anledning att bevilja administratörsrättigheter är en vanlig men undvikbar överträdelse av minsta behörighet.

Hur vet jag att pipelinen faktiskt producerade en giltig signatur, inte bara att scenen inte orsakade något fel?

Lägg till ett verifieringssteg som körs signtool verify /pa mot den signerade filen och misslyckas med byggandet på något annat än lyckat resultat, snarare än att anta att ett slutfört signeringssteg innebär en giltig signatur.

Går den privata nyckeln någonsin igenom Jenkins-agenten?

Nej, i en korrekt konfigurerad installation. Agenten skickar en signeringsbegäran via KSP till den HSM-baserade signeringstjänsten; den privata nyckeloperationen sker inuti HSM.