Meteen naar de inhoud

Certificaten voor 47 dagen komen eraan. Ben je er klaar voor?

Handel nu →

Hoe integreer je een GitHub Actions CI/CD-pijplijn met CodeSigning?

ontwikkelingsplatform (CI/CD)

GitHub Actions is een platform voor continue integratie en continue ontwikkeling (CI/CD) waarmee gebruikers hun build-, test- en implementatiepijplijn kunnen automatiseren. Gebruikers kunnen workflows ontwerpen die elke pull- en push-aanvraag naar hun repository bouwen en testen, of samengevoegde pull-aanvragen naar productie implementeren. GitHub Actions is een krachtige tool waarmee ontwikkelaars workflows binnen hun GitHub-repository's kunnen automatiseren.

Elke workflow bestaat uit een of meer taken, die op hun beurt weer uit een of meer stappen bestaan. Elke stap is een reeks opdrachten die worden uitgevoerd op een runner, een virtuele machine die uw workflows uitvoert.

Aan de slag met GitHub-acties

Om aan de slag te gaan met GitHub Actions heb je een GitHub-account en een repository nodig. Nadat je je repository hebt aangemaakt, kun je een nieuwe workflow maken door een YAML-bestand toe te voegen aan de map .github/workflows in je repository.

Hieronder staan ​​enkele termen die worden gebruikt in de workflow voor het definiëren van YAML-bestanden. Laten we deze workflow eens nader bekijken om te begrijpen hoe deze werkt:

  • naam: Dit is de naam van de workflow.

  • on: Hiermee wordt aangegeven wanneer de workflow moet worden geactiveerd. De workflow kan bijvoorbeeld worden uitgevoerd wanneer een pull request wordt geopend op een branch.

  • taken: Dit is een lijst met taken die als onderdeel van de workflow worden uitgevoerd.

  • run-on: Hiermee specificeren we het besturingssysteem en de omgeving voor de taak. We kunnen een zelfgehoste runner voor onze taak instellen. We gaan hiervoor een zelfgehoste runner instellen.

  • stappen: Hierin wordt een lijst met stappen gespecificeerd die als onderdeel van de taak zullen worden uitgevoerd.

  • Gebruik: Dit is een snelkoppeling voor het gebruiken van een bestaande actie uit de GitHub Marketplace. In ons script gebruiken we de actie actions/checkout om de code van de repository uit te checken.

  • naam: Dit is de naam van de stap.

  • run: Dit is een shell-opdracht die als onderdeel van de stap wordt uitgevoerd.

Co-designen met behulp van GitHub Actions

Codeondertekening is het proces waarbij softwarecode digitaal wordt ondertekend om de authenticiteit en integriteit ervan te verifiëren. Het is een beveiligingsmaatregel die ervoor zorgt dat de code niet is gemanipuleerd en afkomstig is van een betrouwbare bron.

GitHub Actions integreren met codeondertekening, in het kort: registreer een zelfgehoste runner met SignTool en de KSP-client geïnstalleerd, voer die service uit onder een speciaal account met lage privileges (niet Administrator), en voeg vervolgens een workflowstap toe die SignTool aanroept met het KSP-geregistreerde certificaat. De privésleutel blijft in de HSM; de workflow verwerkt deze nooit direct.

Key Takeaways

  • Het serviceaccount van de runner mag nooit volledige lokale beheerdersrechten nodig hebben. Geef het de specifieke machtiging die de KSP of signtool nodig heeft, en geef het niet standaard de beheerdersrechten om een ​​machtigingsfout te verbergen.
  • Deze pagina behandelt GitHub Actions specifiek als platformhandleiding. Voor de bredere referentiearchitectuur, goedkeuringsfasen en het model voor auditbewijs, zie Best practices voor codeondertekening in de SDLC.

Vereisten voor het uitvoeren van deze taak zijn:

  1. Een GitHub-repository (hiervoor hebt u een beheerdersaccount nodig).
  2. Een Runner waarin Signtool en ECSigning KSP worden geïnstalleerd en geconfigureerd.

Voordat we beginnen, moeten we een runner configureren. De runner wordt geïnstalleerd op het apparaat waarop u Signtool en ECSigning KSP hebt geïnstalleerd en geconfigureerd. Volg de onderstaande stappen om dit op uw apparaat te doen.

Oplossing voor codeondertekening voor bedrijven

Ontvang één oplossing voor al uw cryptografische behoeften op het gebied van softwarecodeondertekening met onze codeondertekeningsoplossing.

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.

windows sdk home

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

Windows SDK-privacy

Accepteer de licentieovereenkomst

Windows SDK-licentieovereenkomst

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

Windows SDK-functie

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

Windows-gebruikersaccountbeheer
windows sdk final

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

systeemomgevingsvariabele bewerken

Klik op omgevingsvariabelen.

omgevingsvariabelen modaal

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.

signtool installatiepad

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.

nieuwe systeemvariabele toevoegen

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

signtool-opdrachtprompt

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.

    Codesign veilige ondertekeningstools pagina
  • 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.

    msi-installatieprogramma
  • Klik op Volgende wanneer de installatiewizard verschijnt.

    ec ondertekening ksp setup home
  • Klik volgende.

    ec ondertekening ksp setup map installatie
  • 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.

    postbode drager token api
  • Verander de Identiteit Type om 1.
  • Verlof API BaseURL hetzelfde.
  • Klik volgende.

    ec ondertekening ksp setup gebruikersauthenticatie info
  • Klik volgende.

    ec ondertekening ksp setup installatie bevestigen
  • U krijgt dan een melding dat dit programma wijzigingen zal aanbrengen op uw pc. Klik op Ja.

    msi setup gebruikersaccountbeheer
  • De installatie is nu voltooid.

    ec ondertekening ksp setup installatie voltooid

Om de loper op te zetten, volgt u onderstaande stappen:

Navigeer naar uw Github-repository.

  • Navigeer naar Instellingen van Repository
  • Scroll naar beneden naar Acties en selecteer Renner in het dropdownmenu.
  • Klik op Nieuwe zelf-gehoste hardloper.

    Github-instellingen Runners

Daarna kunt u op de afbeelding van de runner (macOS/Linux/Windows) van uw keuze klikken. De onderstaande instructies zijn voor Windows. U ziet verschillende opdrachten op het scherm.

Voer de opdrachten uit die in de configuratie van de runner worden weergegeven. De opdrachten staan ​​ook hieronder:

Zodra u Github Actions op uw scherm ziet staan, wordt u gevraagd om u als deelnemer te registreren.

PowerShell GitHub-acties
  • Voer de naam in van de groep hardlopers waaraan u deze hardloper wilt toevoegen: [druk op Enter voor Standaard] (U kunt deze optie op de standaardinstelling laten staan).
  • Voer de naam van de loper in: [druk op Enter voor CLIENT] (U kunt de gewenste naam voor uw loper invoeren).
  • Deze runner heeft de volgende labels: 'zelf gehost', 'Windows', 'X64'

    Voer eventuele extra labels in (bijv. label-1,label-2): [druk op Enter om over te slaan] (Voer hier een label in, het kan van alles zijn, sla deze stap niet over. Dezelfde naam wordt later gebruikt om runner in het script aan te roepen).

  • Het volgende wordt op uw scherm weergegeven zodra het klaar is

    • Loper succesvol toegevoegd
    • De verbinding met de hardloper is goed
    • Runner-instellingen
  • Voer de naam van de werkmap in: [druk op Enter voor _werk] (U kunt dit op de standaardinstelling laten staan ​​of een map naar keuze opgeven)

    Instellingen opgeslagen

  • Wilt u de loper als service gebruiken? (J/N) [druk op Enter voor N] (Voer J in)
  • Gebruikersaccount voor de service [druk op Enter voor NT AUTHORITY\NETWORK SERVICE] (Gebruik een speciaal serviceaccount met lage privileges in plaats van Administrator; het account heeft alleen de specifieke machtigingen nodig die de KSP vereist voor authenticatie en bestandstoegang tot het certificaatpad waarnaar in de workflow wordt verwezen, geen volledige lokale beheerdersrechten.)

  • Wachtwoord voor het account CLIENT\ServiceAccount (voer het wachtwoord in van uw speciale serviceaccount met beperkte privileges)
  • Zodra u klaar bent, ziet u het volgende bericht op uw scherm.

    Er wordt gevraagd als Service actions.runner. .

    Bestandsrechten verlenen aan 'CLIENT\ServiceAccount'.

    Service actions.runner.Encryption-Consulting-LLC-CodeSignSecure-Desktop.TryThree succesvol geïnstalleerd

    Service actions.runner.Encryption-Consulting-LLC-CodeSignSecure-Desktop.TryThree heeft de hersteloptie succesvol ingesteld

    Service actions.runner.Encryption-Consulting-LLC-CodeSignSecure-Desktop.TryThree is succesvol ingesteld op vertraagd automatisch starten

    Service actions.runner.Encryption-Consulting-LLC-CodeSignSecure-Desktop.TryThree succesvol geconfigureerd

    Wachten tot de service start…

    Service actions.runner.Encryption-Consulting-LLC-CodeSignSecure-Desktop.TryThree is succesvol gestart

Oplossing voor codeondertekening voor bedrijven

Ontvang één oplossing voor al uw cryptografische behoeften op het gebied van softwarecodeondertekening met onze codeondertekeningsoplossing.

Zodra de runner op uw apparaat is ingesteld, navigeert u naar uw repository in GitHub.

Ga naar Acties.

Klik op Nieuwe workflow

Klik op Zelf een workflow instellen

github-werkstromen

Zo ziet uw editor eruit. U kunt uw .yaml-bestand hernoemen of de standaardnaam behouden.

github-editor

Voeg het onderstaande script toe aan uw editor nadat u enkele wijzigingen hebt aangebracht of de variabelen hebt bijgewerkt.

 naam: Code Signing op: push: branches: <[ Uw Branch Naam ]> jobs: build: runs-on: stappen: - naam: Checkout-code gebruikt: actions/checkout@v2 - naam: Ondertekeningscode uitgevoerd: | signtool sign /csp "Encryption Consulting Key Storage provider" /kc /fd /F " " /tr /td SHA256 " "

Vervang de variabelen die zijn opgegeven onder <variabelenaam> . Een korte beschrijving van de verwachte variabele vindt u hieronder.

<bestandspad> : Hier geeft u het pad op van het bestand dat u wilt ondertekenen. Bijvoorbeeld: C:\<Mapnaam>\<Bestandsnaam>. Zorg ervoor dat u een bestandsnaam met de juiste extensie hebt opgegeven.

<sleutelnaam> Dit verwijst naar de cryptografische sleutel die gebruikt wordt om de code te ondertekenen. Voorbeeld: evcodesigning

<certificaatlocatie> : Een voorbeeld van wat u in dit veld kunt invoeren is C:\testing.pem. Het certificaatbestand (.pem) MOET in dit veld worden opgenomen. U kunt een .pem-bestand van het certificaat genereren voor ondertekening, als u de sleutelnaam ECSigningKSP gebruikt. Volg hiervoor de onderstaande opdrachten:

Navigeer op het apparaat waarop u ECSigningKSP hebt geïnstalleerd en geconfigureerd naar de map van ECSigningKSP, die zich meestal bevindt in "C:\Program Files\Encryption Consulting\SigningKSP".

Ga via de opdrachtprompt naar deze map.

Gebruik vervolgens de volgende opdracht om het pem-bestand van het certificaat op te halen.

ECGetCert.exe <Key_Name> (voorbeeld: ECGetCert.exe evcodesigning)

Geef de locatie op waar het certificaat is opgeslagen.

<hashalgoritme> : U moet de naam van het hashalgoritme opgeven, zoals SHA256, SHA384 of SHA512. Het moet een van deze drie waarden zijn.

<tijdstempelserver>: Een tijdstempelserver levert bewijs dat een digitale handtekening op een specifiek tijdstip is gezet , waardoor in de toekomst kan worden geverifieerd dat een bestand op een bepaald tijdstip is ondertekend. De server die wij doorgaans gebruiken is http://timestamp.digicert.com

Het commando dat ik gebruikte om te ondertekenen was

signtool sign /csp "Encryptie Consulting Sleutelopslagprovider" /kc evcodesigning /fd SHA256 /f "C:\Users\Administrator\Desktop\ForTesting\evcodesigning.pem" /tr http://timestamp.digicert.com /td SHA256 "C:\Users\Administrator\Desktop\ForTesting\AgentService.exe"

Het script dat ik gebruikte was:

 naam: Code Signing op: push: branches: [ Github_Actions ] jobs: build: runs-on: runner stappen: - naam: Checkout code gebruikt: actions/checkout@v2 - naam: Sign code run: | signtool sign /csp "Encryption Consulting Key Storage provider" /kc evcodesigning /fd SHA256 /f "C:\Users\Administrator\Desktop\ForTesting\evcodesigning.pem" /tr http://timestamp.digicert.com /td SHA256 "C:\Users\Administrator\Desktop\ForTesting\AgentService.exe"

Zodra je je script hebt bewerkt, klik je op 'commit'. Je kunt direct committen naar je standaardbranch of naar een nieuwe branch. Zorg ervoor dat je de naam van je branch in de code bijwerkt. Na het committen wordt de taak uitgevoerd.

github-commit

Verificatie en foutafhandeling

Beschouw een groen vinkje bij de workflow-uitvoering niet als bewijs dat de handtekening geldig is. Voeg direct na het ondertekenen een stap toe die het volgende uitvoert: signtool verify /pa De verificatie wordt uitgevoerd op basis van het ondertekende bestand en mislukt als de verificatie geen succes oplevert. Als de ondertekeningsstap zelf mislukt, raadpleeg dan de onderstaande tabel voordat u ervan uitgaat dat het certificaat ongeldig is.

Foutwaarschijnlijke oorzaakBepalen
Er werden geen certificaten gevonden die aan alle gestelde criteria voldeden.De sleutelnaam (/kc) komt niet overeen met een geregistreerde KSP-sleutel, of de KSP-client is niet geauthenticeerd op de runner.Bevestig de exacte sleutelnaam en controleer de authenticatiestatus van de KSP opnieuw, onafhankelijk van de workflow.
Toegang is geweigerdHet serviceaccount van de runner beschikt niet over de specifieke machtiging die KSP nodig heeft (dit is geen reden om over te schakelen naar Administrator).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 timestamp-URL vanaf de runner; probeer het opnieuw, aangezien TSA-storingen meestal van tijdelijke aard zijn.

Bij een terugdraaiactie, als later blijkt dat een workflow de verkeerde bestanden heeft ondertekend of het verkeerde certificaat heeft gebruikt, probeer dan niet de handtekening te herstellen; gooi het artefact weg en voer de workflow opnieuw uit vanaf de ondertekeningsstap met een gecorrigeerde configuratie. Bewaar daarbij een auditlogboek waaruit blijkt dat het oorspronkelijke, verkeerd ondertekende artefact nooit is vrijgegeven.

Veelgestelde Vragen / FAQ

Heeft het serviceaccount van de zelfgehoste runner beheerdersrechten nodig?

Nee. Het vereist de specifieke machtiging die de KSP nodig heeft voor authenticatie en toegang tot het certificaatpad dat in de workflow wordt gebruikt, en niet volledige lokale beheerdersrechten. Het aangrijpen van een machtigingsfout als reden om beheerdersrechten te verlenen, is een vermijdbare schending van het principe van minimale bevoegdheden.

Hoe kan ik controleren of een GitHub Actions-ondertekeningstaak daadwerkelijk een geldige handtekening heeft gegenereerd?

Voeg een verificatiestap toe die wordt uitgevoerd signtool verify /pa Controleer het ondertekende bestand direct na de ondertekeningsstap en laat de taak mislukken bij alles behalve succes, in plaats van aan te nemen dat een groen vinkje een geldige handtekening betekent.

Conclusie

Encryption Consulting biedt u een codeondertekeningsoplossing genaamd CodeSign Secure . U kunt contact met ons opnemen om de SigningKSP en de sleutelnaam te verkrijgen. Codeondertekening met Github Actions is een eenvoudig proces. Een gebruiker hoeft alleen de runner te configureren en het script uit te voeren. U kunt contact met ons opnemen via [email protected] voor verdere hulp.