HowTo: Pakete signieren

QTip

Super-Moderator
Teammitglied
Mitglied seit
04. Sep 2008
Beiträge
2.341
Punkte für Reaktionen
14
Punkte
84
Vorbereitungen

Mit DSM 5.1 beta hat Synology die Unterstützung von Herausgeber-Zertifikaten integriert. Diese werden, sofern vorhanden, von der jeweiligen Paketquelle oder per Public-Key an die gewünschten User verteilt.

Ich verwende hier als Ausgangsverzeichnis /usr/local/src, wer ein anderes Verzeichnis benutzen möchte, muss die Pfade entsprechend anpassen.

Bei Erstellung der Keys auf der DiskStation muss zuvor per ipkg das Paket gnupg installiert werden, da der gpg-agent fehlt.
Code:
ipkg install gnupg

Anschließend einen symbolischen Link
Code:
ln -s /opt/bin/gpg-agent /usr/syno/bin/gpg-agent
anlegen.

Verzeichnis toolkit erstellen
Code:
cd /usr/local/src
mkdir toolkit
cd toolkit

Entwicklungsumgebung aufsetzen

pkgscripts.tgz herunterladen, entpacken und in das Verzeichnis wechseln
Code:
wget http://sourceforge.net/projects/dsgpl/files/toolkit/pkgscripts.tgz/download -O pkgscripts.tgz
tar zxvf pkgscripts.tgz
cd pkgscripts

Eine Liste der verfügbaren Architekturen ${platform} für die Entwicklungsumgebung erhält man mit
Code:
./EnvDeploy -v 5.0 --list
v [x.x] = gewünschte DSM Version, wir benötigen mindestens 5.0

Entwicklungsumgebung für die gewünschte Architektur herunterladen und entpacken
Code:
./EnvDeploy -v 5.0 -p ${platform}

pkgscripts in die Entwicklungsumgebung kopieren - ${version} = entpackte Version
Code:
cd /usr/local/src/toolkit
cp -r pkgscripts build_env/ds.${platform}-${version}

Mit chroot in die Entwicklungsumgebung wechseln
Code:
chroot build_env/ds.${platform}-${version}

Dem .gnupg Verzeichnis die richtigen Rechte geben
Code:
cd /root
chmod 700 .gnupg

Die Entwicklungsumgebung steht, im nächsten Schritt folgt das Erstellen des gpg-Keypaares

gpg-Keypaar erzeugen (Private und Public)

Für die Generierung der Zufallsbytes benötigt gpg, abhängig von der Größe des Schlüssels und anderen Faktoren, eine bestimmte Menge an Entropie auf dem System. Wieviel Entropie zur Zeit vorhanden ist, kann mit dem Befehl
Code:
cat /proc/sys/kernel/random/entropy_avail
überprüft werden, allerdings verändert jede Überprüfung ebenfalls den Wert (ein Teufelskreis). Es ist ratsam, wärend der Erzeugung des Schlüssels, andere Arbeiten auf dem System durchzuführen, damit genügend Entropie zur Verfügung steht.
Die folgenden Methoden/Befehle verhelfen zu mehr Entropie auf dem System:
  • Code:
    ls / -R
  • Code:
    find / > /dev/null
  • ein Programm mit ./configure zum compilen vorbereiten und anschließend compilieren.
Sollte die obigen Methoden nicht helfen, kann man auch haveged compieren/benutzen, Anleitung siehe Link: https://www.digitalocean.com/commun...ional-entropy-for-cloud-servers-using-haveged im Abschnitt "Installing from Source" (benötigt Compiler-Umgebung z.B. per ipkg Paket optware-devel)

Wichtig: Die genannten Methoden sollten, bis auf haveged, erst während der Erstellung - gezielt ab dem Zeitpunkt der Frage nach der Passphrase - durchgeführt werden.

Keypaar erzeugen
Code:
gpg --gen-key
Die folgenden Fragen wie angegeben beantworten:
  • (1) RSA and RSA (default) [enter]
  • 2048 [enter]
  • 0 kein Ablauf des Keys [enter]
  • Name: [gewünschter Name wie er im Paket-Zentrum unter "Einstellungen - Zertifikat" angezeigt wird] [enter]
  • Email: [gewünschte Email] [enter]
  • Passphrase: [leer lassen] und alle Anfragen bezügl. der leeren Passphrase bestätigen, da Keys ohne Passphrase sehr unsicher sind. [enter]
Warten...evtl. Methoden zur Erhöhung der Entropie während der Erstellung des Keys wiederholen -> 2. Terminalsitzung öffen.
Die anschließend in der Key-Datenbank enthaltenen Schlüssel können mit dem Befehl
Code:
gpg --list-keys
angezeigt werden, gezielt auch für public und private Keys (siehe Abschnitt Nützliche gpg Befehle und Dokumentationen)

gpg Public-Key exportieren

Rich (BBCode):
gpg --armor --export [Nummer hinter dem Slash] > [gewünschter Dateinname].asc
Public-Key kann direkt im Paket-Zentrum unter "Einstellungen - Zertifikat" importiert werden (Wichtig, wenn Pakete manuell installiert werden müssen)

gpg Private-Key exportieren

gpg private-key exportieren und an einem sicheren Ort aufbewahren. ***Am Besten in einem passwortgeschützten Keysafe sichern, da der Key keine Passphrase enthält***

Code:
gpg --armor --export-secret-keys [Nummer hinter dem Slash] > [gewünschter Dateinname]_sec.asc

Den exportierten privaten Schlüssel nach Kopie an einen sicheren Ort nicht auf der Diskstation liegen lassen...LÖSCHEN


Package signieren (nur innerhalb CHROOT)

Rich (BBCode):
php /pkgscripts/CodeSign.php --sign=[/Pfad/zum/Paket.spk]


Fehler "curl_exec() failed" beheben

Codesign.php benötigt eine Internetverbindung (zu Synology)
  • Internetverbindung überprüfen
    mit chroot in die Entwicklungsumgebung wechseln
    ping google.de oder ähnlich ausführen, wenn man keine Antwort erhält, dann die Datei /etc/resolv.conf mit einem funktionierendem Nameserver versorgen, üblicherweise die Adresse des Routers.

Nützliche gpg Befehle und Dokumentationen

gpg --list-keys
gpg --list-secret-keys
gpg --list-public-keys
gpg --delete-secret-key [#keynumber]
gpg --delete-key [#keynumber]

http://www.hauke-laging.de/sicherheit/openpgp.html

Wie immer geht Alles auf eigene Kappe!
 
Zuletzt bearbeitet:

neutron

Benutzer
Mitglied seit
16. Jul 2015
Beiträge
462
Punkte für Reaktionen
0
Punkte
16
HI. Vielleicht kannst du mir ja dazu eine Frage beantworten. Ich hab mein Paket signiert, ebenfalls wird mein PGP Public Key beim hinzufügen meiner Quelle im Paketzentrum importiert. Trotzdem kann ich mein Paket nicht installieren wenn das Trust Level in den Einstellungen auf "Synology und vertrauenswürdige Herausgeber" steht. Hast du dazu eine Idee woran das noch liegen könnte ?
 

DI4bI0

Benutzer
Mitglied seit
08. Mrz 2011
Beiträge
264
Punkte für Reaktionen
14
Punkte
24
Hiho,

soweit ich weiß, muss der PGP Public Key auch im Paket vorhanden sein.
Also im root verzeichniss des Paketes und muss den namen haben syno_signature.asc

mfg

EDIT: is quatch es muss der Schlüssel den du beim signieren des Paketes bekommst ins Paket sry :)
 
Zuletzt bearbeitet:

QTip

Super-Moderator
Teammitglied
Mitglied seit
04. Sep 2008
Beiträge
2.341
Punkte für Reaktionen
14
Punkte
84
Dein Paket ist nicht signiert und enthält, wie DI4bI0 schon schrieb, keine Datei syno_signature.asc.
Wie hast du denn das Paket signiert oder hast nur das falsche Paket in deinem Paketserver? Wenn du alles richtig gemacht hast, dann sollte CodeSign.php automatisch die Datei in das Paket integrieren.
 

neutron

Benutzer
Mitglied seit
16. Jul 2015
Beiträge
462
Punkte für Reaktionen
0
Punkte
16
Hab jetzt noch einmal nen komplett neuen Key generiert, der Public Key wird in meinem Package Server auch angegeben und wird beim hinzufügen der Quelle auch importiert. Mit eben diesem Key hab ich logischerweise auch das Paket signiert. Es geht aber trotzdem nicht.

Hier mal der Link zu der Datei, die ebenfalls genau so über das Paketzentrum verfügbar ist:

JDownloader_noarch.spk

Repo Quelle für Paketzentrum:

https://spk.netzbaer.de



Bin gerade echt ratlos.
 
Zuletzt bearbeitet:

QTip

Super-Moderator
Teammitglied
Mitglied seit
04. Sep 2008
Beiträge
2.341
Punkte für Reaktionen
14
Punkte
84
Hab jetzt noch einmal nen komplett neuen Key generiert, der Public Key wird in meinem Package Server auch angegeben und wird beim hinzufügen der Quelle auch importiert. Mit eben diesem Key hab ich logischerweise auch das Paket signiert. Es geht aber trotzdem nicht.
Also die beiden Dateien befinden sich auf verschiedenen Downloadpfaden. Dein angegebener Download JDownloader_noarch.spk zeigt auf "https://spk.netzbaer.de/JDownloader_noarch.spk", die Url vom Paketserver zeigt auf "http://www.netzbaer.de/synology/JDownloader_noarch.spk". Im Paket vom Paketserver ist keine Signature, im Paket vom Direktdownload ist die Signature enthalten. Ich würde https in Verbindung mit der Signature für deine Paketquelle bevorzugen.
Korrigiere dies erstmal...

Entspricht der Keyring im JSON der Signature in dem Paket vom Direktdownload?
 
Zuletzt bearbeitet:

neutron

Benutzer
Mitglied seit
16. Jul 2015
Beiträge
462
Punkte für Reaktionen
0
Punkte
16
Ich Idiot..so ok, Downloadquelle hab ich nun in der JSON Datei angepasst, also Direktdownload und Paketserver sind identisch. ABER es geht trotzdem immer noch nicht. Ich habe ja gemäß der Anleitung oben einen GPG Key erzeugt, danach meinen Public Key ausgelesen und diesen in den Keyring gepackt. Die Signierung erfolgt ja ebenfalls mit diesem Key, ich versteh echt nicht mehr was ich noch falsch mache.
 

QTip

Super-Moderator
Teammitglied
Mitglied seit
04. Sep 2008
Beiträge
2.341
Punkte für Reaktionen
14
Punkte
84
Also ich hab grad deine Paketquelle neu hinzugefügt, einmal Aktualisieren ausgeführt und das Paket aus der Liste zum Installieren ausgewählt. Nach Bestätigung der Abfragen wurde das Paket, wenn auch sehr lange, installiert. In den Paketzentrumeinstellungen habe ich Synology Inc. und vertrauenswürdige Herausgeber eingestellt.
 

neutron

Benutzer
Mitglied seit
16. Jul 2015
Beiträge
462
Punkte für Reaktionen
0
Punkte
16
Stimmt, jetzt geht es ... ?! Baut das Ding einen Cache auf oder sowas ? Hab mal alles entfernt, DS rebooted, dann ging es.
 

QTip

Super-Moderator
Teammitglied
Mitglied seit
04. Sep 2008
Beiträge
2.341
Punkte für Reaktionen
14
Punkte
84
Paket-Zentrum benutzt einen Cache, deswegen öfter mal von Hand aktualisieren, Paket-Zentrum schliessen und wieder öffnen.
 

DKeppi

Benutzer
Mitglied seit
01. Apr 2011
Beiträge
3.217
Punkte für Reaktionen
69
Punkte
114
Hallo zusammen,

habe alles wie hier beschrieben gemacht und den Key generiert bekomme aber beim Signieren folgenden Fehler:

Rich (BBCode):
Could not open input file: /pkgscripts/CodeSign.php


Einziger Unterschied ist, dass ichs in einer Debian-VM gemacht habe, da ich kein ipkg auf der Syno habe/brauche!

Hab ihr eine Idee was ich machen kann oder kann man auch manuell signieren?
Welche Key gehört in die syno_signature.asc?
 

QTip

Super-Moderator
Teammitglied
Mitglied seit
04. Sep 2008
Beiträge
2.341
Punkte für Reaktionen
14
Punkte
84
Hast du auch den Schritt "pkgscripts in die Entwicklungsumgebung kopieren" ausgeführt? Sieht ganz danach aus, dass die Datei bei dir im CHROOT fehlt.
Das mit dem "Key als syno_signature.asc manuell reinkopieren kannst du vergessen, funktioniert nicht, es wäre natürlich der PublicKey ;)
 

DKeppi

Benutzer
Mitglied seit
01. Apr 2011
Beiträge
3.217
Punkte für Reaktionen
69
Punkte
114
Ich Idiot...mein Fehler, sorry!
Dachte da ich bereits auf Debian bin, dass ich auf den CHROOT verzichten kann.

Im Chroot funktioniert alles - danke!
 

raffnix84

Benutzer
Mitglied seit
18. Nov 2012
Beiträge
38
Punkte für Reaktionen
2
Punkte
14
Hi,

ich habe das Problem das ich die EnvDeploy (Datei physikalisch vorhanden u+x auch da) gar nicht ausführen kann... hat da jemand einen Tipp für mich?

Rich (BBCode):
DS> cd /usr/local/src/toolkit/pkgscripts
DS> ./EnvDeploy -v 5.0 --list
-ash: ./EnvDeploy: not found

Im übrigen, konnte ich die pkgscripts.tgz auch nicht entpacken..
Damit ging es dann doch..
Rich (BBCode):
tar zvf pkgscripts.tgz
 
Zuletzt bearbeitet:

phpcode

Benutzer
Mitglied seit
19. Jan 2014
Beiträge
69
Punkte für Reaktionen
9
Punkte
14
@QTip

Hallo, bin dein Tutorial soweit durch gegangen. Leider erhalte ich bei dem Befehl beim wechseln folgende Meldung obwohl es ja vorhanden ist.

Rich (BBCode):
root@BN-SVR-RS-01:/volume1/spkdev/toolkit# chroot /toolkit/build_env/ds.x64-5.0/
chroot: cannot change root directory to ‘/toolkit/build_env/ds.x64-5.0/’: No such file or directory

das ganze habe ich auf meiner Synology RS1219+ ausgeführt

Ich habe eine Synology RS1219+

Hast du ggf. nen Tipp oder weist was ich falsch mache?

Lieben Dank

VG
 
Zuletzt bearbeitet:

QTip

Super-Moderator
Teammitglied
Mitglied seit
04. Sep 2008
Beiträge
2.341
Punkte für Reaktionen
14
Punkte
84
In der Anleitung existierte ein Tippfehler...

Wenn man der Anleitung folgt, dann befindet man sich bereits in /usr/local/src/toolkit, also muss der Aufruf für das Wechseln in die Entwicklungsumgebung statt
Rich (BBCode):
chroot /toolkit/build_env/ds.${platform}-${version}

Rich (BBCode):
chroot build_env/ds.${platform}-${version}
lauten.
 


 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat