Under Construction

Digitale Signatur für ein eigenes Fileset (DSB)

Sollen eigene Filesets nach Aktivierung von Trusted Installation installiert werden können, benötigt man folgendes:

    • Einen Private-Key zum Erzeugen der digitalen Signatur eines Filesets.
    • Den zum Private-Key zugehörigen Public-Key.
    • Einen DSB am Ende der Fileset-Datei.

Der Public-Key muss auf jedem AIX System unter /etc/security/certificates hinterlegt werden, auf dem das Fileset installiert werden soll. Einträge in den ODMs dsc_key und dsc_keystore sind für das Verfahren mit DSB nicht nötig und werden auch nicht verwendet. Die digitalen Signaturen werden in Form eines DSB direkt am Ende der Fileset-Dateien hinterlegt. Damit ist auch kein Eintrag mehr in der ODM dsc_inventory erforderlich.

Wir empfehlen ausdrücklich die Verwendung des Verfahrens mit DSB. Das Verfahren mit dem DSC sollte nicht mehr verwendet werden.

Wir zeigen nachfolgend alle notwendigen Schritte an einem konkreten Beispiel (Fileset pwrcmps.test.dsb).

Das Erzeugen von Private-Key und Public-Key wurde schon früher gezeigt (Optional: Erzeugen eines digitalen Zertifikats für Trusted Installation) und wird hier nicht wiederholt. Wir verwenden die Keys von früher:

    • private.pem
    • public.pem

Wir haben ein neues Verzeichnis mit Namen /tmp/unsigned erzeugt und dort unser Beispiel-Fileset abgelegt:

$ ls -lA /tmp/unsigned
total 16
-rw-r--r--    1 root     system          234 Aug 16 14:05 .toc
-rw-r--r--    1 root     system         2560 Aug 16 14:04 pwrcmps.test.dsb.1.0.0.0.bff
$

Eine kurze Überprüfung mit dsblkchk zeigt, das das Fileset keinen DSB enthält:

# dsblkchk -d /tmp /tmp/unsigned/pwrcmps.test.dsb.1.0.0.0.bff
# echo $?
2
#

Hinweis: Der Exit-Status 2 zeigt das Fehlen eines DSB.

Als erstes erzeugen wir die digitale Signatur für das Fileset mit Hilfe des Private-Keys private.pem:

$ openssl dgst -sha256 -sign private.pem -out sign.sha256 /tmp/unsigned/pwrcmps.test.dsb.1.0.0.0.bff
Enter pass phrase for private.pem: XXXXXXXX
$

Hinweis: Den Private-Key private.pem hatten wir mit Passphrase erzeugt, daher muss dieser beim Erzeugen der Signatur angegeben werden.

Der für die Überprüfung zu verwendende Public-Key muss unter /etc/security/certificates stehen! Daher kopieren wir unseren Public-Key public.pem unter dem Namen mypublic.pem in dieses Verzeichnis:

# cp public.pem /etc/security/certificates/mypublic.pem
#

Der Public-Key muss auf jedem System, auf dem das obige Fileset installiert werden soll, einmalig hinterlegt werden.

Im nächsten Schritt muss nun ein DSB mit der erzeugten Signatur (sign.sha256) und dem zur Überprüfung zu verwendenden Public-Key erzeugt werden. Dafür stellt IBM das Kommando dsblkgen bereit. Das Kommando besitzt eine Manual Page und ist als Benutzer-Kommando gedacht. Das Kommando erwartet als Argumente den Tpy des Keys, die ermittelte digitale Signatur, den Pfad zum Public-Key selbst und einen Dateinamen unter dem der generierte DSB abgespeichert werden soll:

# dsblkgen -f LOC sign.sha256 /etc/security/certificates/mypublic.pem dsb
#

Hinweis: Der Typ LOC gibt an, das der angegebene Pfad zum Public-Key im zu generierenden DSB (Datei dsb) hinterlegt werden soll.

Der generierte DSB ist ca 1 KB groß und besteht aus binären Informationen. Wir werfen mit Hilfe von od einen kurzen Blick in diese binäre Datei:

$ od -xa dsb
0000000     494e    5554    5545    5945    0000    0500    0000    0000
           I   N   U   T   U   E   Y   E nul nul enq nul nul nul nul nul
0000020     0000    0100    0000    0200    0000    0300    0000    0100
         nul nul soh nul nul nul stx nul nul nul etx nul nul nul soh nul
0000040     0000    0002    0000    0000    0000    0000    0000    0000
         nul nul nul stx nul nul nul nul nul nul nul nul nul nul nul nul
0000060     0000    0000    0000    0000    0000    0000    0000    0000
         nul nul nul nul nul nul nul nul nul nul nul nul nul nul nul nul
*
0000400     2a57    338e    018a    5986    6919    15e5    5ee6    b2c4
           *   W   3  so soh  lf   Y ack   i  em nak   e   ^   f   2   D
0000420     6abf    2fe4    1a84    bbe0    eea3    02ab    2e15    acd3
           j   ?   /   d sub eot   ;   `   n   # stx   +   . nak   ,   S
0000440     85be    9e45    948d    a706    8baf    6ca6    7104    8aed
         enq   >  rs   E dc4  cr   ' ack  vt   /   l   &   q eot  lf   m
0000460     8e66    f320    4bc5    0204    a915    1277    61da    12a1
         so   f   s  sp   K   E stx eot   ) nak dc2   w   a   Z dc2   !
0000500     d37c    bae2    11bd    d225    248d    a800    6567    417a
           S   |   :   b dc1   =   R   %   $  cr   ( nul   e   g   A   z
0000520     c909    b9c0    3465    c19e    bada    13bd    09da    dc00
           I  ht   9   @   4   e   A  rs   :   Z dc3   =  ht   Z   \ nul
0000540     2563    c1bf    dd68    1ed9    e5a3    45f6    379c    f2a2
           %   c   A   ?   ]   h  rs   Y   e   #   E   v   7  fs   r   "
0000560     7ea9    115a    ba54    8e7a    ebed    8326    17ef    c600
           ~   ) dc1   Z   :   T  so   z   k   m etx   & etb   o   F nul
0000600     f447    b3aa    3620    dc38    0e8e    f796    a381    1f88
           t   G   3   *   6  sp   \   8  so  so   w syn   # soh  us  bs
0000620     655d    35f0    446e    ffe8    4058    0eac    2586    0e03
           e   ]   5   p   D   n del   h   @   X  so   ,   % ack  so etx
0000640     9141    779f    d30c    9287    4a97    29c8    3fb7    458f
         dc1   A   w  us   S  ff dc2 bel   J etb   )   H   ?   7   E  si
0000660     400f    98fb    2124    908b    e9f4    37b8    a61f    3a2e
           @  si can   {   !   $ dle  vt   i   t   7   8   &  us   :   .
0000700     6c36    d2cc    9fa0    c171    f624    9f1d    f0a9    a668
           l   6   R   L  us  sp   A   q   v   $  us  gs   p   )   &   h
0000720     7804    9f31    a20b    26da    7a7b    d2f7    caa9    148a
           x eot  us   1   "  vt   &   Z   z   {   R   w   J   ) dc4  lf
0000740     0258    a011    71e3    7c7e    46ff    382b    bdf0    5d3a
         stx   X  sp dc1   q   c   |   ~   F del   8   +   =   p   ]   :
0000760     9da8    17d2    666c    976a    ce41    75b7    13c0    d80b
          gs   ( etb   R   f   l etb   j   N   A   u   7 dc3   @   X  vt
0001000     0000    0000    0000    0000    0000    0000    0000    0000
         nul nul nul nul nul nul nul nul nul nul nul nul nul nul nul nul
*
0001400     2f65    7463    2f73    6563    7572    6974    792f    6365
           /   e   t   c   /   s   e   c   u   r   i   t   y   /   c   e
0001420     7274    6966    6963    6174    6573    2f6d    7970    7562
           r   t   i   f   i   c   a   t   e   s   /   m   y   p   u   b
0001440     6c69    632e    7065    6d00    0000    0000    0000    0000
           l   i   c   .   p   e   m nul nul nul nul nul nul nul nul nul
0001460     0000    0000    0000    0000    0000    0000    0000    0000
         nul nul nul nul nul nul nul nul nul nul nul nul nul nul nul nul
*
0002360     0000    0000    0000    0500    494e    5554    5545    5945
         nul nul nul nul nul nul enq nul   I   N   U   T   U   E   Y   E
0002400
$

Am Anfang und Ende des DSB sieht man den DSB Eye Catcher („INUTUEYE“). Im vorderen Teil des DSB befindet sich die digitale Signatur aus der Datei sign.sha256, im hinteren Teil erkennt man den Pfad zum Public-Key (/etc/security/certificates/mypublic.pem).

Im letzten Schritt muss der generierte DSB an die Fileset-Datei angefügt werden. Im einfachsten Fall kann dies mit einem „cat“ Kommando und Ausgabe-Umleitung mit „>>“ erfolgen:

# ls -l pwrcmps.test.dsb.1.0.0.0.bff
-rw-r--r--    1 root   system         2560 Aug 16 14:26 pwrcmps.test.dsb.1.0.0.0.bff
# cat dsb >>pwrcmps.test.dsb.1.0.0.0.bff
# ls -l pwrcmps.test.dsb.1.0.0.0.bff
-rw-r--r--    1 root.   system         3840 Aug 16 14:26 pwrcmps.test.dsb.1.0.0.0.bff
#

Wir haben aber ein eigenes Unterverzeichnis /tmp/signed für die signierte Version des Filesets angelegt und verwenden die folgende Version von „cat“:

# cat /tmp/unsigned/pwrcmps.test.dsb.1.0.0.0.bff dsb >/tmp/signed/pwrcmps.test.dsb.1.0.0.0.bff
#

Vergleicht man die beiden Fileset-Versionen, sieht man das die Version mit DSB etwas größer ist:

$ ls -l /tmp/*signed/pwrcmps.test.dsb.1.0.0.0.bff
-rw-r--r--    1 root     system         3840 Aug 16 14:28 /tmp/signed/pwrcmps.test.dsb.1.0.0.0.bff
-rw-r--r--    1 root     system         2560 Aug 16 14:04 /tmp/unsigned/pwrcmps.test.dsb.1.0.0.0.bff
$

Bevor wir einen Versuch starten das eigene Fileset zu installieren, überprüfen wir die Signatur kurz manuell:

# dsblkchk -d /tmp /tmp/signed/pwrcmps.test.dsb.1.0.0.0.bff
# echo $?
0
#

Die Überprüfung war erfolgreich (Exit-Status 0). Es wurde ein DSB gefunden und die enthaltene digitale Signatur konnte verifiziert werden.

Abschließend installieren wir unser Fileset:

# inutoc /tmp/signed
# chsignpolicy -p
#signpolicy
high
# installp -ad /tmp/signed pwrcmps.test.dsb
...
Verifying known package signatures of install source: /tmp/signed

Please wait…
+—————————————————————————–+
                         Installing Software…
+—————————————————————————–+

installp: APPLYING software for:
        pwrcmps.test.dsb 1.0.0.0

Finished processing all filesets.  (Total time:  0 secs).

+—————————————————————————–+
                                Summaries:
+—————————————————————————–+

Installation Summary
——————–
Name                        Level           Part        Event       Result
——————————————————————————-
pwrcmps.test.dsb            1.0.0.0         USR         APPLY       SUCCESS   
#

Das Fileset konnte unter Trusted Installation erfolgreich installiert werden. Weitere eigene Filesets können auf die gleiche Weise mit einem DSB versehen werden.