Under Construction
Erzeugen der digitalen Signatur eines Filesets und Hinzufügen zum DSC
Wir zeigen das Erzeugen einer digitalen Signatur am Beispiel des Filesets pwrcmps.test.dsc, das wir extra für diesen Zweck erzeugt haben. Das BFF-File des Filesets haben wir für diese Demonstration in ein eigenes Verzeichnis (/tmp/lpps) kopiert und dort eine .toc Datei erzeugt:
$ ls -al /tmp/lpps
total 40
drwxr-xr-x 2 root system 256 Jul 28 19:05 ./
drwxrwxrwt 53 bin bin 8192 Jul 28 19:05 ../
-rw-r--r-- 1 root system 226 Jul 28 19:05 .toc
-rw-r--r-- 1 root system 6144 Jul 28 19:05 pwrcmps.test.dsc.1.0.0.0.bff
$
Eine Überprüfung mit pkgverify ist nicht erfolgreich:
# pkgverify /tmp/lpps/pwrcmps.test.dsc.1.0.0.0.bff
# echo $?
6
#
Dementsprechend schlägt eine Installation mit Trusted Installation (signpolicy=high) fehl:
# chsignpolicy -p
#signpolicy
high
# installp -ad /tmp/lpps pwrcmps.test.dsc
+-----------------------------------------------------------------------------+
Pre-installation Verification...
+-----------------------------------------------------------------------------+
Verifying selections...done
Verifying requisites...done
Results...
SUCCESSES
---------
Filesets listed in this section passed pre-installation verification
and will be installed.
Selected Filesets
-----------------
pwrcmps.test.dsc 1.0.0.0 # fileset to test trusted inst...
<< End of Success Section >>
+-----------------------------------------------------------------------------+
BUILDDATE Verification ...
+-----------------------------------------------------------------------------+
Verifying build dates...done
FILESET STATISTICS
------------------
1 Selected to be installed, of which:
1 Passed pre-installation verification
----
1 Total to be installed
Verifying known package signatures of install source: /tmp/lpps
Please wait...
FAILURE: Package /tmp/lpps/pwrcmps.test.dsc.1.0.0.0.bff failed signature verification.
#
Damit die Verifikation des Filesets erfolgreich sein kann, wird ein Eintrag in der ODM dsc_inventory mit der digitlalen Signatur des Filesets benötigt. Jeder Eintrag in dieser ODM besitzt die folgenden Felder:
# ODMDIR=/usr/lib/objrepos odmshow dsc_inventory
class dsc_inventory {
char pkg_name[145]; /* offset: 0xc ( 12) */
char lpp_name[145]; /* offset: 0x9d ( 157) */
short ver; /* offset: 0x12e ( 302) */
short rel; /* offset: 0x130 ( 304) */
short mod; /* offset: 0x132 ( 306) */
short fix; /* offset: 0x134 ( 308) */
char ftype[4]; /* offset: 0x136 ( 310) */
vchar signature[1024]; /* offset: 0x13c ( 316) */
vchar timestamp[64]; /* offset: 0x140 ( 320) */
link dsc_key dsc_key id key[11]; /* offset: 0x144 ( 324) */
};
/*
descriptors: 10
structure size: 0x158 (344) bytes
data offset: 0x334
population: 18147 objects (18147 active, 0 deleted)
*/
#
Die ersten Felder (pkg_name bis ftype) erhält man am einfachsten über die Ausgabe von „installp -L“:
# installp -Ld /tmp/lpps
pwrcmps.test.dsc:pwrcmps.test.dsc:1.0.0.0::I:T:::::N:fileset to test trusted installation::::0::
#
Damit bekommt man schon einmal die folgenden Werte für diese Felder:
pkg_name = pwrcmps.test.dsc
lpp_name = pwrcmps.test.dsc
ver = 1
rel = 0
mod = 0
fix = 0
ftype = I
Für den Wert von timestamp wird das Datum der BFF Datei benötigt. Dieses bekommt man am Einfachsten mit Hilfe von „restore -T“. Dabei muss man beachten, das pkgverify die Ermittlung des Datums in der Zeitzone TZ=CST6CDT ausführt! Dementsprechend müssen wir das restore Kommando ebenfalls mit dieser Zeitzone ausführen:
$ TZ=CST6CDT restore -Tqvf /tmp/lpps/pwrcmps.test.dsc.1.0.0.0.bff 2>&1 | sed -n -e 's/.*backup: //p'
Mon Jul 28 12:03:59 2025
$
Allerdings ist das Format des Zeitstempels noch nicht ganz korrekt. Leerzeichen müssen durch Unterstriche ersetzt werden, anstelle von „:“ als Trennzeichen bei der Zeitangabe, werden Bindestriche „–„ erwartet und eine eventuelle Zeitzone CDT oder CST muss entfernt werden:
$ TZ=CST6CDT restore -Tqvf /tmp/lpps/pwrcmps.test.dsc.1.0.0.0.bff 2>&1 | sed -n -e 's/C[DS]T //' -e 's/.*backup: //p' | tr " :" "_-"
Mon_Jul_28_12-03-59_2025
$
Zur Ermittlung der Signatur verwenden wir den in Optional: Erzeugen eines digitalen Zertifikats für Trusted Installation erzeugten Private-Key. Dieser gehört zum Zertifikat mit der ID 04, dementsprechend muss das Feld key den Wert „04“ haben. Die Signatur wird im Base64 Format benötigt:
# openssl dgst -sha256 -sign private.pem /tmp/lpps/pwrcmps.test.dsc.1.0.0.0.bff | openssl base64
Enter pass phrase for private.pem: XXXXXXXXXX
gK/z1a1mIOb2eQQ8b8Pn2/nGh7vEs5nyStCk4ABFjN1rDbQGjpBym5DoLrk57xxX
u7UARol8z0pCoO4GtKPtDTro5IfMjgwZQ4pOoO73qXGTZF4vZjlGityMe9eE/4Iv
2rBnxck6y4c6Cqp7ECJBLXbBTWUoGVQUJYZxGh8A9Rfi37TakeQ/TVBwrcgPF+0O
oZvSlq6RJxUwuu24WNCIZMFaXl4M/7MtR+Pt5XYN/3h7j/15DsQxmUF/wojd1rfk
yEPTpitMwEMQ1DxzEjWF7PWXY3vhVB5A4uYmBBOooQxaQWgvnGyfAgkHi4eYFV7O
4KmZfpt3anR64l5nC2fGyg==
#
Die Ausgabezeilen müssen noch zu einer Zeichenkette zusammengefügt werden, da das Feld signature keine Zeilenvorschübe erlaubt:
# openssl dgst -sha256 -sign private.pem /tmp/lpps/pwrcmps.test.dsc.1.0.0.0.bff | openssl base64 | while read line ; do echo -n $line ; done ; echo
Enter pass phrase for private.pem: XXXXXXXXXX
gK/z1a1mIOb2eQQ8b8Pn2/nGh7vEs5nyStCk4ABFjN1rDbQGjpBym5DoLrk57xxXu7UARol8z0pCoO4GtKPtDTro5IfMjgwZQ4pOoO73qXGTZF4vZjlGityMe9eE/4Iv2rBnxck6y4c6Cqp7ECJBLXbBTWUoGVQUJYZxGh8A9Rfi37TakeQ/TVBwrcgPF+0OoZvSlq6RJxUwuu24WNCIZMFaXl4M/7MtR+Pt5XYN/3h7j/15DsQxmUF/wojd1rfkyEPTpitMwEMQ1DxzEjWF7PWXY3vhVB5A4uYmBBOooQxaQWgvnGyfAgkHi4eYFV7O4KmZfpt3anR64l5nC2fGyg==
#
Hinweis: Wir hatten einen Private-Key mit Passphrase erzeugt, daher muss dieser bei der Signatur Berechnung eingegeben werden.
Damit haben wir auch die Werte für signature, timestamp und key:
signature = „gK/z1a1mIOb2eQQ8b8Pn2/nGh7vEs5nyStCk4ABFjN1rDbQGjpBym5DoLrk57xxXu7UARol8z0pCoO4GtKPtDTro5IfMjgwZQ4pOoO73qXGTZF4vZjlGityMe9eE/4Iv2rBnxck6y4c6Cqp7ECJBLXbBTWUoGVQUJYZxGh8A9Rfi37TakeQ/TVBwrcgPF+0OoZvSlq6RJxUwuu24WNCIZMFaXl4M/7MtR+Pt5XYN/3h7j/15DsQxmUF/wojd1rfkyEPTpitMwEMQ1DxzEjWF7PWXY3vhVB5A4uYmBBOooQxaQWgvnGyfAgkHi4eYFV7O4KmZfpt3anR64l5nC2fGyg==“
timestamp = „Mon_Jul_28_12-03-59_2025“
key = „04“
Wir fügen den benötigten ODM-Eintrag dem DSC (ODM dsc_inventory) hinzu:
# ODMDIR=/usr/lib/objrepos odmadd <<EOF
> dsc_inventory:
> pkg_name = "pwrcmps.test.dsc"
> lpp_name = "pwrcmps.test.dsc"
> ver = 1
> rel = 0
> mod = 0
> fix = 0
> ftype = "I"
> signature = "gK/z1a1mIOb2eQQ8b8Pn2/nGh7vEs5nyStCk4ABFjN1rDbQGjpBym5DoLrk57xxXu7UARol8z0pCoO4GtKPtDTro5IfMjgwZQ4pOoO73qXGTZF4vZjlGityMe9eE/4Iv2rBnxck6y4c6Cqp7ECJBLXbBTWUoGVQUJYZxGh8A9Rfi37TakeQ/TVBwrcgPF+0OoZvSlq6RJxUwuu24WNCIZMFaXl4M/7MtR+Pt5XYN/3h7j/15DsQxmUF/wojd1rfkyEPTpitMwEMQ1DxzEjWF7PWXY3vhVB5A4uYmBBOooQxaQWgvnGyfAgkHi4eYFV7O4KmZfpt3anR64l5nC2fGyg=="
> timestamp = "Mon_Jul_28_12-03-59_2025"
> key = "04"
>
> EOF
#
Eine Überprüfung der digitalen Signature des Filesets mit pkgverify ist jetzt erfolgreich:
# pkgverify /tmp/lpps/pwrcmps.test.dsc.1.0.0.0.bff
Verified OK
#
Damit kann das Fileset nun auch nach aktiviertem Trusted Installation erfolgreich installiert werden:
# chsignpolicy -p
#signpolicy
high
# installp -ad /tmp/lpps pwrcmps.test.dsc
+-----------------------------------------------------------------------------+
Pre-installation Verification...
+-----------------------------------------------------------------------------+
Verifying selections...done
Verifying requisites...done
Results...
SUCCESSES
---------
Filesets listed in this section passed pre-installation verification
and will be installed.
Selected Filesets
-----------------
pwrcmps.test.dsc 1.0.0.0 # fileset to test trusted inst...
<< End of Success Section >>
+-----------------------------------------------------------------------------+
BUILDDATE Verification ...
+-----------------------------------------------------------------------------+
Verifying build dates...done
FILESET STATISTICS
------------------
1 Selected to be installed, of which:
1 Passed pre-installation verification
----
1 Total to be installed
Verifying known package signatures of install source: /tmp/lpps
Please wait...
+-----------------------------------------------------------------------------+
Installing Software...
+-----------------------------------------------------------------------------+
installp: APPLYING software for:
pwrcmps.test.dsc 1.0.0.0
Finished processing all filesets. (Total time: 1 secs).
+-----------------------------------------------------------------------------+
Summaries:
+-----------------------------------------------------------------------------+
Installation Summary
--------------------
Name Level Part Event Result
-------------------------------------------------------------------------------
pwrcmps.test.dsc 1.0.0.0 USR APPLY SUCCESS
#
Wird eine neue Version des Filesets erstellt, dann sind die obigen Schritte für die neue Version erneut durchzuführen.