Meteen naar de inhoud

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

Handel nu →

Hoe onderteken ik RPM-pakketten?

RPM-pakketten ondertekenen

RPM (Red Hat Package Manager) is een pakketbeheersysteem dat wordt gebruikt in Linux-distributies, met name die gebaseerd op Red Hat, zoals Fedora en CentOS. RPM-pakketten zijn softwarebundels met uitvoerbare bestanden, bibliotheken, documentatie en andere bronnen die nodig zijn om een ​​specifieke applicatie of service correct te laten functioneren op een Linux-systeem.

RPM-pakketten zijn gecomprimeerde archieven die een specifieke bestandsindeling en naamgevingsconventie volgen. Ze hebben meestal de extensie ".rpm" en kunnen worden geïnstalleerd, geüpgraded of verwijderd met behulp van RPM-pakketbeheertools.

Het RPM-pakketformaat wordt veel gebruikt in veel Linux-distributies en vereenvoudigt softwarebeheer door een gestandaardiseerde en betrouwbare methode te bieden voor het verpakken en distribueren van software.

Het ondertekenen van een RPM-pakket, in het kort: Genereer een HSM-ondersteund GPG-sleutelpaar, importeer het in uw GPG-sleutelring via een PKCS#11-brug en voer vervolgens het RPM Signer-hulpprogramma uit met uw sleutelnaam, vingerafdruk en e-mailadres van de uitgever. De tool produceert een losstaand handtekeningbestand, een apart artefact dat aan het pakket is gekoppeld en verschilt van het traditionele handtekeningbestand. rpm --addsign model dat de handtekening direct in de RPM-header integreert.

Key Takeaways

  • Deze tool produceert een losgekoppelde .sig Het bestand wordt gebruikt in plaats van de handtekening in de RPM-header op te nemen. Dat betekent dat standaard RPM-tools (rpm -K, rpm --checksig) zal het niet direct verifiëren; de verificatie moet via het RPM Signer-hulpprogramma zelf verlopen. verify subopdracht in plaats daarvan.
  • De belangrijkste vingerafdruk (-f) moet de exacte hexadecimale vingerafdruk zijn van de GPG-sleutel die op de HSM is gegenereerd, niet een sleutelnaam of e-mailadres; een afwijking hier is een veelvoorkomende oorzaak van mislukte ondertekening.

Omgevingsmatrix

Bestanddeeleis
OSLinux (Debian/Ubuntu getoond; RPM-gebaseerde distributies zoals Fedora/CentOS zijn de typische doelgroep voor de pakketten zelf)
HSM-integratiePKCS#11-compatibele HSM (nCipher/nfast weergegeven) gekoppeld aan GPG via gnupg-pkcs11-scd
Python-afhankelijkhedencrypto==1.4.1, cryptography==40.0.2, pycryptodome==3.16.0, requests==2.28.2
Client authenticatieSSL-clientauthenticatiecertificaat in PKCS12-formaat (.p12 of .pfx)
Ondersteunde hash-algoritmenSHA224, SHA256 (standaard), SHA384, SHA512
HandtekeningformaatLosstaand handtekeningbestand, niet ingesloten in de RPM-header.

Overzicht

Om RPM-pakketten met GPG-sleutels te ondertekenen, zijn doorgaans de volgende stappen nodig:

  1. Genereer GPG-sleutelpaar

    De pakketbeheerder of -distributeur genereert een GPG-sleutelpaar bestaande uit een privésleutel en een bijbehorende publieke sleutel. De privésleutel wordt veilig bewaard (bij voorkeur in een HSM ) en mag niet worden gedeeld, terwijl de publieke sleutel wel breed verspreid kan worden.

  2. RPM-ondertekening configureren

    De openbare GPG-sleutel wordt toegevoegd aan de sleutelbos van de RPM-pakketbeheerder, zodat deze de pakketten kan verifiëren die met de bijbehorende privésleutel zijn ondertekend. Deze stap zorgt ervoor dat de pakketbeheerder de GPG-sleutel als vertrouwd herkent.

  3. RPM-pakketten ondertekenen

    De pakketbeheerder ondertekent de RPM-pakketten met behulp van de privésleutel die is gekoppeld aan het GPG-sleutelpaar. Dit proces genereert een digitale handtekening voor elk pakket.

  4. RPM-pakketten verifiëren

    Wanneer de RPM-pakketbeheerder een ondertekend pakket tegenkomt, gebruikt hij de openbare GPG-sleutel om de handtekening van het pakket te verifiëren. Hij controleert of de handtekening geldig is en overeenkomt met de inhoud van het pakket, om er zeker van te zijn dat het pakket niet is gewijzigd of gemanipuleerd sinds de ondertekening.

RPM-ondertekening met GPG-sleutels voegt extra beveiliging toe aan RPM-pakketten. Het helpt de authenticiteit en integriteit van de pakketten vast te stellen door te bevestigen dat ze zijn ondertekend door de entiteit die de privésleutel bezit die is gekoppeld aan de openbare GPG-sleutel. Deze methode stelt gebruikers en systemen in staat de betrouwbaarheid van RPM-pakketten te verifiëren vóór installatie en beschermt tegen ongeautoriseerde wijzigingen of kwaadwillende manipulatie.

Voorwaarden

  1. Genereer sleutelpaar op HSM

    1. Wijzig de map naar /opt/nfast/bin

      $ cd /opt/nfast/bin

    2. Voer de opdracht uit en voer de juiste gegevens in

      $ ./generatekey pkcs11 selfcert=yes

      Let op: onthoud de naam en het e-mailadres van uw sleutel, want deze zijn nodig in de volgende stappen.

    3. Voer opdracht uit

      $ ./ckcerttool -n -f pkcs11_ua4335d6933d9809f048dcf4bc47c90194f2f7ba4b_selfcert -k ua4335d6933d9809f048dcf4bc47c90194f2f7ba4b -L rpmtest

      Hier komt de optie “ -f ” overeen met “self-cert”, de optie “ -k ” verwijst naar de sleutel en de parameter “ -L ” moet overeenkomen met de eerder ingevoerde sleutelnaam.

    4. Installeer de gnupg-pkcs11-scd

      $ sudo apt-get install gnupg-pkcs11-scd

      Opmerking: Als je problemen ondervindt bij het uitvoeren van de opdracht "sudo apt-get install" , probeer dan eerst de volgende opdracht uit te voeren.

      $ sudo apt-get update && sudo apt-get upgrade -y

    5. Configureer gnupg-agent

      • Bewerk de volgende regels in het bestand gpg-agent.conf

        $ nano ~/.gnupg/gpg-agent.conf
        - Enter the below lines and save the file
        scdaemon-program /usr/bin/gnupg-pkcs11-scd
        pinentry-program /usr/bin/pinentry

      • Bewerk de volgende regels in het bestand gnupg-pkcs11-scd.conf

        $ nano ~/.gnupg/gnupg-pkcs11-scd.conf
        - Enter the below lines and save the file
        providers p1
        provider-p1-library /opt/nfast/toolkits/pkcs11/libcknfast.so

    6. De agent opnieuw laden

      $ gpg-agent --server gpg-connect-agent <<EOF
      > RELOADAGENT
      > EOF

    7. Haal de GPG KEY-FRIENDLY string op (van de nieuw gegenereerde sleutel)
      • Kaartgegevens ophalen

        $ gpg --card-status

      • Haal sleutelvriendelijke namen en certificaten op

        $ gpg-agent --server gpg-connect-agent << EOF
        > SCD LEARN
        > EOF

    8. Importeer de sleutel in de GPG 2-sleutelhanger

      $gpg --expert --full-generate-key

      Opmerking: Voer de eerder gegenereerde toetsvriendelijke toets in onder de parameter "Voer de toetsgreep in".

    9. Om de sleutel in de gpg-sleutelring te controleren, voert u de onderstaande opdracht uit.

      $ gpg --list-keys

  2. Stel omgevingsvariabelen in voor het pad en het certificaatwachtwoord van het SSL-clientverificatiecertificaat.

    Let op: het SSL-clientauthenticatiecertificaat moet in PKCS12-formaat zijn (.p12 of .pfx).

    Voer de onderstaande opdracht uit om omgevingsvariabelen in te stellen:

    • Mac of Linux

      $ export EC_Client_Auth=path_to_ssl_certificate
      $ export EC_Client_Pass=your_client_certificate_password

    • Windows

      $ set EC_Client_Auth=path_to_ssl_certificate
      $ set EC_Client_Pass=your_client_certificate_password

  3. Voldoe aan de volgende vereisten:

    • crypto==1.4.1
    • cryptografie==40.0.2
    • pycryptodome==3.16.0
    • verzoeken==2.28.2

Oplossing voor codeondertekening voor bedrijven

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

Hoe gebruik ik het hulpprogramma RPM Signer?

Download de versie van RPM Signer Utility

Voer de onderstaande opdracht uit

$ python3 rpmsigner.py -v or $ python3 rpmsigner.py --version

Teken een RPM-pakket

Voer de onderstaande subopdracht 'sign' uit om een ​​RPM-pakket te ondertekenen.

Syntax:

python3 rpmsigner.py sign <file_to_be_signed> -u <user_name> -k <key_name> -i <issuer_email> -f <key_fingerprint> -a <algorithm> [-o <output_sig_file_name>]

parameters:

  • teken: Te ondertekenen RPM-pakket.
  • -in: Een gebruikersnaam op Encryption Consulting Code Signing Server.
  • -k: Sleutel/certificaatnaam voor ondertekening/verificatie geleverd door de Code Signing-server van Encryption Consulting.
  • -ik: E-mailadres van de gebruiker dat gebruikt wordt om een ​​sleutelpaar te genereren.
  • -F: gpg-sleutelvingerafdruk in hex-formaat.
  • -een: Algoritme dat gebruikt moet worden voor ondertekening. Een van de onderstaande opties kan gebruikt worden:
    • SHA224
    • SHA256 (Standaard)
    • SHA384
    • SHA512

    Als het algoritme niet wordt opgegeven, wordt standaard SHA256 gebruikt.

  • -O: Uitvoerbestand om de handtekening op te slaan. Dit is een optionele parameter. Als deze optie is ingeschakeld, wordt een handtekeningbestand gegenereerd met de opgegeven naam. .sig
  • -H: Hulp weergeven.
  • -in: Uitgebreide logs weergeven.

Voorbeeld:

python3 rpmsigner.py sign test_rpm_signer.rpm -u admin -k RPMtestcert -i [email protected] -f 3E633D3878815FAC111CF488FC15CA0088C43155 -a SHA256 -o myFile.sig

Een RPM-pakket verifiëren

Voer de onderstaande subopdracht verify uit om de handtekening van een RPM-pakket te verifiëren.

Syntax:

python3 rpmsigner.py verify <file_to_be_verified> -u <user_name> -k <key_name> -i <issuer_email> -f <key_fingerprint> -a <algorithm>

Voorbeeld:

python3 rpmsigner.py verify test_rpm_signer.rpm -u admin -k RPMtestcert -i [email protected] -f 3E633D3878815FAC111CF488FC15CA0088C43155 -a SHA256

Een succesvolle verificatie geeft een bevestiging dat de handtekening overeenkomt met de inhoud van het pakket en de opgegeven sleutel; een afwijking of manipulatie resulteert in een foutmelding die aangeeft dat het pakket niet te vertrouwen is. Omdat dit een losstaande handtekening is en geen ingebedde handtekening in de RPM-header, dient u altijd via dit hulpprogramma te verifiëren in plaats van aannames te doen. rpm -K Ik zal alles hierover melden.

Veel voorkomende fouten

Foutwaarschijnlijke oorzaakBepalen
Sleutel niet gevonden / vingerafdruk komt niet overeenDe -f-waarde komt niet exact overeen met de hexadecimale vingerafdruk van de HSM-ondersteunde GPG-sleutel.Opnieuw uitvoeren gpg --list-keys om de exacte vingerafdruk te bevestigen in plaats van een waarde uit het geheugen of een oude opdracht opnieuw te gebruiken.
Authenticatie mislukt bij het verbinden met de ondertekeningsserver.De omgevingsvariabelen EC_Client_Auth of EC_Client_Pass zijn niet ingesteld of onjuist.Controleer nogmaals of beide variabelen worden geëxporteerd in de huidige shellsessie, en niet alleen zijn ingesteld in een niet-uitgevoerd script.
gpg-agent kan de scdaemon niet vinden.De paden naar gpg-agent.conf of gnupg-pkcs11-scd.conf zijn onjuist geconfigureerd, of de agent is niet opnieuw geladen na het bewerken.Controleer of het pad naar het scdaemon-programma correct is en voer de opdracht RELOADAGENT opnieuw uit na elke configuratiewijziging.

CI/CD-gebruik en -opruiming

Voor herhaaldelijk ondertekenen in een pipeline, stel dit in. EC_Client_Auth en EC_Client_Pass Sla de geheime sleutelgegevens op in de pipeline in plaats van ze hard te coderen, en leg de exacte sleutelvingerafdruk vast als een pipelinevariabele in plaats van deze bij elke uitvoering interactief op te zoeken. Controleer de idempotentie door de volgende code uit te voeren: verify Het subcommando moet direct na het ondertekenen worden uitgevoerd, en de build moet mislukken bij alles behalve een succesvolle match, in plaats van alleen te vertrouwen op de exitcode van het ondertekeningscommando.

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 in plaats daarvan tijdens de uitvoering als pipelinegeheim toe te voegen.

Wilt u weten hoe wij u kunnen helpen?

Oplossing voor codeondertekening voor bedrijven

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

CodeSign Secure van Encryption Consulting biedt organisaties een complete oplossing voor codeondertekening, afgestemd op hun specifieke behoeften. Met deze oplossing kunnen organisaties een sterk beleid voor codeondertekening opstellen dat beveiligingsrisico's effectief beperkt en de authenticiteit van hun software waarborgt. Ons product stroomlijnt het codeondertekeningsproces en biedt een reeks functies die zijn ontworpen om de beveiliging te verbeteren.

Een belangrijk kenmerk van CodeSign Secure is het veilige sleutelbeheer. Organisaties kunnen hiermee hun privésleutels van het codeondertekeningscertificaat veilig opslaan door integratie met toonaangevende, FIPS-gecertificeerde Hardware Security Modules (HSM's) . Deze integratie elimineert de potentiële risico's van gestolen, beschadigde of misbruikte sleutels, omdat de privésleutels de HSM tijdens het ondertekeningsproces nooit verlaten.

Veelgestelde Vragen / FAQ

Zal `rpm -K` of `rpm –checksig` een pakket verifiëren dat met deze tool is ondertekend?

Nee. Deze tool genereert een losstaand handtekeningbestand in plaats van de handtekening in de RPM-header in te sluiten, wat standaard RPM-tools wel doen. Controleer dit in plaats daarvan met de verificatie-subopdracht van het RPM Signer-hulpprogramma.

Wat moet er precies in de parameter -f (vingerafdruk) worden ingevoerd?

De volledige hexadecimale vingerafdruk van de GPG-sleutel die op de HSM is gegenereerd, verkregen via gpg --list-keys, en niet de sleutelnaam of het e-mailadres dat voor de andere parameters wordt gebruikt.