Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
nitrokey:linuxmint:pro [30.08.2020 11:15. ] – [Export des public-key auf einen Keyserver] django | nitrokey:linuxmint:pro [18.11.2024 18:56. ] (aktuell) – Externe Bearbeitung 127.0.0.1 | ||
---|---|---|---|
Zeile 62: | Zeile 62: | ||
Diese Pakete installieren wir, falls diese nicht bereits im System vorhanden sind, bei Bedarf mit Hilfe von **apt**. | Diese Pakete installieren wir, falls diese nicht bereits im System vorhanden sind, bei Bedarf mit Hilfe von **apt**. | ||
- | # apt-get install scdaemon libccid | + | $ sudo apt install scdaemon libccid |
/* | /* | ||
Zeile 108: | Zeile 108: | ||
Alternativ können wir natürlich das Programm auch direkt auf der Konsole starten: | Alternativ können wir natürlich das Programm auch direkt auf der Konsole starten: | ||
- | | + | |
Ein Hinweis zur Nitrokey App wird ausgegeben. | Ein Hinweis zur Nitrokey App wird ausgegeben. | ||
Zeile 214: | Zeile 214: | ||
{{ : | {{ : | ||
- | ==== Nitrokey Pro und GnuPG ==== | + | ==== GnuPG ==== |
Da es sich bei der Chipkarte des **Nitrokey Pro** um eine standardkompatible OpenPGP-Karte handelt, kann der Kryptostick mit Hilfe von **[[https:// | Da es sich bei der Chipkarte des **Nitrokey Pro** um eine standardkompatible OpenPGP-Karte handelt, kann der Kryptostick mit Hilfe von **[[https:// | ||
- | # apt-get install gpg | + | $ sudo apt install gpg |
Alle Sicherheitsfunktionen wie z.B. das Erzeugen/ | Alle Sicherheitsfunktionen wie z.B. das Erzeugen/ | ||
Zeile 584: | Zeile 584: | ||
Am Ende verlassen wir den den Karten-Editor mit dem Befehl **'' | Am Ende verlassen wir den den Karten-Editor mit dem Befehl **'' | ||
- | === Schlüssel generieren ==== | + | === Schlüssel |
+ | <WRAP center round tip 80%> | ||
+ | **Pro-Tip: | ||
+ | Aus sicherheitsgesichtspunkten und Anwendersicht ist das Generieren des Schlüsselmaterials auf einer OpenPGP-Smart-Card immer dem manuellen Importieren vorzuziehen! | ||
+ | </ | ||
+ | |||
Wir wollen uns nun einen neuen GPG-Schlüssel in der SmartCard erzeugen und rufen hierzu den Befehl **generate** auf. Wir werden nun menügeführt durch eine Reihe von Standardfragen geführt, welche alle relevante Daten abfragen, die zur Generierung des Hauptschlüssels wie auch der Unterschlüssel die für die Aufgaben Signatur, Verschlüsselung und Authentifizierung benötigt werden. | Wir wollen uns nun einen neuen GPG-Schlüssel in der SmartCard erzeugen und rufen hierzu den Befehl **generate** auf. Wir werden nun menügeführt durch eine Reihe von Standardfragen geführt, welche alle relevante Daten abfragen, die zur Generierung des Hauptschlüssels wie auch der Unterschlüssel die für die Aufgaben Signatur, Verschlüsselung und Authentifizierung benötigt werden. | ||
$ gpg --card-edit | $ gpg --card-edit | ||
Zeile 612: | Zeile 618: | ||
Real name: Django aka Bastard Operator from Hell | Real name: Django aka Bastard Operator from Hell | ||
- | Email address: django@mailserver.guru | + | Email address: django@nausch.org |
Comment: | Comment: | ||
You selected this USER-ID: | You selected this USER-ID: | ||
- | " | + | " |
Change (N)ame, (C)omment, (E)mail or (O)kay/ | Change (N)ame, (C)omment, (E)mail or (O)kay/ | ||
Zeile 625: | Zeile 631: | ||
gpg/ | gpg/ | ||
+ | |||
+ | <WRAP center round important 75%> | ||
+ | Den Nitrokey Pro Stick auf keinen Fall vom USB-Port trennen! | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Solange die rote LED Leuchtet werden ausreichend Zufallszahlen generiert und das dauert in aller Regel bis zu 8 Minuten! | ||
+ | |||
+ | </ | ||
+ | |||
+ | |||
Rufen wir nun erneut die auf der OpenPGP-Karte des Nitrokey Pro gespeicherten Daten ab, so sehen wir nun nach Eingabe des Kommandos **'' | Rufen wir nun erneut die auf der OpenPGP-Karte des Nitrokey Pro gespeicherten Daten ab, so sehen wir nun nach Eingabe des Kommandos **'' | ||
Zeile 630: | Zeile 647: | ||
gpg/ | gpg/ | ||
- | < | + | < |
- | Application ID ...: D2760001240102010005000034D40000 | + | Application ID ...: D27600012701020100066000425D0000 |
Application type .: OpenPGP | Application type .: OpenPGP | ||
Version ..........: 2.1 | Version ..........: 2.1 | ||
Zeile 653: | Zeile 670: | ||
created ....: 2020-08-29 20:42:00 | created ....: 2020-08-29 20:42:00 | ||
General key info..: | General key info..: | ||
- | pub rsa4096/ | + | pub rsa4096/ |
sec> | sec> | ||
card-no: 0005 000034D4 | card-no: 0005 000034D4 | ||
Zeile 665: | Zeile 682: | ||
gpg/ | gpg/ | ||
+ | |||
+ | === vorhandenen Schlüssel in den Nitrokey Pro importieren ==== | ||
+ | Es kann natürlich auch durchaus sein, dass wir bereits über einem ausreichend großen und sicher verwahrten PGP-Schlüssel verfügen. Da beitet es sich natürlich an, diesen auf in die OpenPGP-Smartcard des Nitrrokey Pro zu importieren und die Version auf der Festplatte des Rechners sicher zu entfernen/ | ||
+ | |||
+ | == PGP-Unterschlüssel - subkeys == | ||
+ | <WRAP center round tip 95%> | ||
+ | Bei der **[[https:// | ||
+ | </ | ||
+ | |||
+ | Werfen wir zur genaueren Betrachtung einfach einen Blick in unseren Schlüsselbund. | ||
+ | $ gpg --list-keys | ||
+ | |||
+ | < | ||
+ | ------------------------------- | ||
+ | pub | ||
+ | FEFA8BFEC18C32F19968C5EE412BC6B241503EC7 | ||
+ | uid | ||
+ | sub | ||
+ | |||
+ | </ | ||
+ | |||
+ | Obwohl wir zuvor "nur einen" // | ||
+ | |||
+ | Beide Schlüssel sehen wir auch, wenn wir uns den Inhalt des secrings anzeigen lassen: | ||
+ | $ gpg --list-secret-keys | ||
+ | < | ||
+ | ------------------------------- | ||
+ | sec | ||
+ | FEFA8BFEC18C32F19968C5EE412BC6B241503EC7 | ||
+ | uid | ||
+ | ssb | ||
+ | |||
+ | </ | ||
+ | |||
+ | * //**Worin besteht nun der genaue Unterschied? | ||
+ | * //**Warum nun der ganze Aufstand mit diesem Unterschlüssel? | ||
+ | |||
+ | Fragen wir den Status unseres Nitrokey Pro ab, so sehen wir dort am Ende drei Speicherplätze für unterschiedliche Unterschlüssel, | ||
+ | * **Signature key** : Unterschlüssel zum Signieren | ||
+ | * **Encryption key** : Unterschlüssel zum Verschlüsseln | ||
+ | * **Authentication key**: Unterschlüssel zum Authentifizieren | ||
+ | |||
+ | $ gpg --card-status | ||
+ | < | ||
+ | |||
+ | Reader ...........: | ||
+ | Application ID ...: D27600012701020100066000425D0000 | ||
+ | Application type .: OpenPGP | ||
+ | Version ..........: 2.1 | ||
+ | Manufacturer .....: ZeitControl | ||
+ | Serial number ....: 000034D4 | ||
+ | Name of cardholder: Django aka Bastard Operator from Hell | ||
+ | Language prefs ...: de | ||
+ | Salutation .......: Mr. | ||
+ | URL of public key : https:// | ||
+ | Login data .......: django | ||
+ | Signature PIN ....: not forced | ||
+ | Key attributes ...: rsa4096 rsa4096 rsa4096 | ||
+ | Max. PIN lengths .: 32 32 32 | ||
+ | PIN retry counter : 3 0 3 | ||
+ | Signature counter : 0 | ||
+ | Signature key ....: [none] | ||
+ | Encryption key....: [none] | ||
+ | Authentication key: [none] | ||
+ | General key info..: [none] | ||
+ | </ | ||
+ | |||
+ | Damit wir nun die drei benötigten Unterschlüssel an die richtige Stelle unseres Nitrokey Pro verschieben können, müssen wir noch ein paar Vorbereitungen treffen: | ||
+ | - Erstellen weiterer Unterschlüssel für die Themen: | ||
+ | - Signierung | ||
+ | - Authentifizierung | ||
+ | - Verschieben der privaten Unterschlüssel aus dem Schlüsselbund, | ||
+ | - Verschieben des //primären Signierungs Schlüssel// | ||
+ | |||
+ | Die öffentlichen Schlüssel bleiben nach wie vor im Schlüsselbund auf unserer Festplatte // | ||
+ | |||
+ | Bevor wir nun zum Punkt **1. Erstellen weiterer Unterschlüssel** widmen können rufen wir uns die **ID** des primären Signierungs-Schlüssel in Erinnerung. | ||
+ | $ gpg --list-keys | ||
+ | |||
+ | < | ||
+ | ------------------------------- | ||
+ | pub | ||
+ | FEFA8BFEC18C32F19968C5EE412BC6B241503EC7 | ||
+ | uid | ||
+ | sub | ||
+ | |||
+ | </ | ||
+ | In unserem Konfigurationsbeispiel hier ist dies die Key-ID: **FEFA8BFEC18C32F19968C5EE412BC6B241503EC7**. Zunächst erstellen wir besagten Unterschlüssel zum Signieren: | ||
+ | $ gpg --expert --edit-key D1359446 | ||
+ | < | ||
+ | This is free software: you are free to change and redistribute it. | ||
+ | There is NO WARRANTY, to the extent permitted by law. | ||
+ | |||
+ | Secret key is available. | ||
+ | |||
+ | sec rsa4096/ | ||
+ | | ||
+ | | ||
+ | ssb rsa4096/ | ||
+ | | ||
+ | [ultimate] (1). Django aka BOfH (Bastard Operator from Hell) < | ||
+ | |||
+ | gpg> </ | ||
+ | |||
+ | Das Erzeugen von Unterschlüssel erfolgt mit hilfe des Befehls '' | ||
+ | |||
+ | gpg> addkey | ||
+ | < | ||
+ | (3) DSA (sign only) | ||
+ | (4) RSA (sign only) | ||
+ | (5) Elgamal (encrypt only) | ||
+ | (6) RSA (encrypt only) | ||
+ | (7) DSA (set your own capabilities) | ||
+ | (8) RSA (set your own capabilities) | ||
+ | (10) ECC (sign only) | ||
+ | (11) ECC (set your own capabilities) | ||
+ | (12) ECC (encrypt only) | ||
+ | (13) Existing key | ||
+ | (14) Existing key from card | ||
+ | Your selection?</ | ||
+ | |||
+ | Da wir einen **RSA**-Unterschlüssel zum Signieren erzeugen möchten, wählen wir hier die Option **'' | ||
+ | |||
+ | Your selection? 4 | ||
+ | < | ||
+ | What keysize do you want? (3072) 4096 | ||
+ | Requested keysize is 4096 bits | ||
+ | Please specify how long the key should be valid. | ||
+ | 0 = key does not expire | ||
+ | < | ||
+ | <n>w = key expires in n weeks | ||
+ | <n>m = key expires in n months | ||
+ | <n>y = key expires in n years | ||
+ | Key is valid for? (0) | ||
+ | Key does not expire at all | ||
+ | Is this correct? (y/N) y | ||
+ | Really create? (y/N) y </ | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | < | ||
+ | some other action (type on the keyboard, move the mouse, utilize the | ||
+ | disks) during the prime generation; this gives the random number | ||
+ | generator a better chance to gain enough entropy. | ||
+ | |||
+ | sec rsa4096/ | ||
+ | | ||
+ | | ||
+ | ssb rsa4096/ | ||
+ | | ||
+ | ssb rsa4096/ | ||
+ | | ||
+ | [ultimate] (1). Django aka BOfH (Bastard Operator from Hell) < | ||
+ | gpg></ | ||
+ | |||
+ | Das Gleiche machen wir nun erneut für unseren Authentifizierungs-Unterschlüssel. | ||
+ | | ||
+ | |||
+ | < | ||
+ | (3) DSA (sign only) | ||
+ | (4) RSA (sign only) | ||
+ | (5) Elgamal (encrypt only) | ||
+ | (6) RSA (encrypt only) | ||
+ | (7) DSA (set your own capabilities) | ||
+ | (8) RSA (set your own capabilities) | ||
+ | (10) ECC (sign only) | ||
+ | (11) ECC (set your own capabilities) | ||
+ | (12) ECC (encrypt only) | ||
+ | (13) Existing key | ||
+ | (14) Existing key from card | ||
+ | Your selection?</ | ||
+ | |||
+ | Für unseren Verschlüsselungs-Unterschlüssel wählen wir nun eben hier entsprechend die Option **8**. | ||
+ | |||
+ | Your selection? 8 | ||
+ | < | ||
+ | |||
+ | Possible actions for a RSA key: Sign Encrypt Authenticate | ||
+ | Current allowed actions: Sign Encrypt | ||
+ | |||
+ | (S) Toggle the sign capability | ||
+ | (E) Toggle the encrypt capability | ||
+ | (A) Toggle the authenticate capability | ||
+ | (Q) Finished | ||
+ | |||
+ | Your selection?</ | ||
+ | |||
+ | Uns wir nun angezeigt, dass aktuell Signierung und Verschlüsselung vorausgewählt wurde: **'' | ||
+ | < | ||
+ | |||
+ | Possible actions for a RSA key: Sign Encrypt Authenticate | ||
+ | Current allowed actions: Encrypt | ||
+ | |||
+ | (S) Toggle the sign capability | ||
+ | (E) Toggle the encrypt capability | ||
+ | (A) Toggle the authenticate capability | ||
+ | (Q) Finished | ||
+ | |||
+ | Your selection? e | ||
+ | |||
+ | Possible actions for a RSA key: Sign Encrypt Authenticate | ||
+ | Current allowed actions: | ||
+ | |||
+ | (S) Toggle the sign capability | ||
+ | (E) Toggle the encrypt capability | ||
+ | (A) Toggle the authenticate capability | ||
+ | (Q) Finished | ||
+ | |||
+ | Your selection? a | ||
+ | |||
+ | Possible actions for a RSA key: Sign Encrypt Authenticate | ||
+ | Current allowed actions: Authenticate | ||
+ | |||
+ | (S) Toggle the sign capability | ||
+ | (E) Toggle the encrypt capability | ||
+ | (A) Toggle the authenticate capability | ||
+ | (Q) Finished | ||
+ | |||
+ | Your selection?</ | ||
+ | |||
+ | An der nun definierten Option **'' | ||
+ | Your selection? q | ||
+ | < | ||
+ | What keysize do you want? (3072) 4096 | ||
+ | Requested keysize is 4096 bits | ||
+ | Please specify how long the key should be valid. | ||
+ | 0 = key does not expire | ||
+ | < | ||
+ | <n>w = key expires in n weeks | ||
+ | <n>m = key expires in n months | ||
+ | <n>y = key expires in n years | ||
+ | Key is valid for? (0) | ||
+ | Key does not expire at all | ||
+ | Is this correct? (y/N) y | ||
+ | Really create? (y/N) y </ | ||
+ | |||
+ | Zum Generieren des Schlüssels werden wir um Bestätigung der Passphrase gebeten. | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | < | ||
+ | some other action (type on the keyboard, move the mouse, utilize the | ||
+ | disks) during the prime generation; this gives the random number | ||
+ | generator a better chance to gain enough entropy. | ||
+ | |||
+ | sec rsa4096/ | ||
+ | | ||
+ | | ||
+ | ssb rsa4096/ | ||
+ | | ||
+ | ssb rsa4096/ | ||
+ | | ||
+ | ssb rsa4096/ | ||
+ | | ||
+ | [ultimate] (1). Django aka BOfH (Bastard Operator from Hell) < | ||
+ | |||
+ | gpg> | ||
+ | </ | ||
+ | |||
+ | GnuPG listet nun den Primary Schlüssel zum Signieren und alle Unterschlüssel auf mit dem jeweiligen Verwendungszweck **usage** auf. **'' | ||
+ | |||
+ | Zu guter letzt speichern wir nun mit dem Befehl **save** unsere gerade erstellen Unterschlüssel im Schlüsselspeicher auf der Festplatte ab. | ||
+ | gpg> save | ||
+ | |||
+ | Fragen wir nun erneut den Schlüsselbund mit den secret-keys ab sehen wir nun unsere drei Unterschlüssel. | ||
+ | $ gpg --list-secret-keys | ||
+ | < | ||
+ | ------------------------------- | ||
+ | sec | ||
+ | FEFA8BFEC18C32F19968C5EE412BC6B241503EC7 | ||
+ | uid | ||
+ | ssb | ||
+ | ssb | ||
+ | ssb | ||
+ | |||
+ | </ | ||
+ | |||
+ | == Schlüssel in die ChipCard des Nitrokey Pro verschieben == | ||
+ | Nun werden wir die vorhin generierten Schlüssel an Ort und Stelle in die SmartCard des Nitrokey Pro verschieben. Hierzu verwenden wir den Befehl **'' | ||
+ | $ gpg --edit-key FEFA8BFEC18C32F19968C5EE412BC6B241503EC7 | ||
+ | |||
+ | < | ||
+ | This is free software: you are free to change and redistribute it. | ||
+ | There is NO WARRANTY, to the extent permitted by law. | ||
+ | |||
+ | Secret key is available. | ||
+ | |||
+ | sec rsa4096/ | ||
+ | | ||
+ | | ||
+ | ssb rsa4096/ | ||
+ | | ||
+ | ssb rsa4096/ | ||
+ | | ||
+ | ssb rsa4096/ | ||
+ | | ||
+ | [ultimate] (1). Django aka BOfH (Bastard Operator from Hell) < | ||
+ | |||
+ | gpg></ | ||
+ | |||
+ | Für später merken wir uns nun in Welcher Reichenfolge die Unterschlüssel aufgelistet werden bzw. welche Key-ID zu welcher Aktion gehört. Die Key-ID **0** ist die des primären Signierungs-Schlüssel! | ||
+ | * Sub-Key **1** - **D5D9674D9331F388** - **E** = encrypt = verschlüsseln | ||
+ | * Sub-Key **2** - **A6EC2C062AEE3AB8** - **S** = sign = signieren | ||
+ | * Sub-Key **3** - **28B0CB362EC9939D** - **A** = authorize = authentifizieren | ||
+ | |||
+ | gpg> </ | ||
+ | Da wir die privaten Schlüssel unserer drei Unterschlüssel verschieben wollen, wechseln wir mikt dem Command **'' | ||
+ | gpg> toggle | ||
+ | |||
+ | < | ||
+ | sec rsa4096/ | ||
+ | | ||
+ | | ||
+ | ssb rsa4096/ | ||
+ | | ||
+ | ssb rsa4096/ | ||
+ | | ||
+ | ssb rsa4096/ | ||
+ | | ||
+ | [ultimate] (1). Django aka BOfH (Bastard Operator from Hell) < | ||
+ | |||
+ | gpg></ | ||
+ | |||
+ | Als erstes verschieben wir den privaten Verschlüsselungs-Unterschlüssel. Hierzu wählen wir diesen mit Eingabe von " | ||
+ | |||
+ | gpg> key 1 | ||
+ | < | ||
+ | sec rsa4096/ | ||
+ | | ||
+ | | ||
+ | ssb* rsa4096/ | ||
+ | | ||
+ | ssb rsa4096/ | ||
+ | | ||
+ | ssb rsa4096/ | ||
+ | | ||
+ | [ultimate] (1). Django aka BOfH (Bastard Operator from Hell) < | ||
+ | |||
+ | gpg></ | ||
+ | |||
+ | Nun verschieben wir den ausgewählten Schlüssel in die SmartCard des Nitrokey mit dem Command **'' | ||
+ | gpg> keytocard | ||
+ | |||
+ | < | ||
+ | (2) Encryption key | ||
+ | Your selection? 2</ | ||
+ | |||
+ | Zum Entsperren des PGP-Schlüssels werden wir um Bestätigung der Passphrase gebeten. | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Zum Speichern des Schlüssels auf der OpenPGP-Smartcard des Nitrokey Pro erfolgt anschließend die Abfrage/ | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | < | ||
+ | sec rsa4096/ | ||
+ | | ||
+ | | ||
+ | ssb* rsa4096/ | ||
+ | | ||
+ | ssb rsa4096/ | ||
+ | | ||
+ | ssb rsa4096/ | ||
+ | | ||
+ | [ultimate] (1). Django aka BOfH (Bastard Operator from Hell) < | ||
+ | |||
+ | gpg></ | ||
+ | |||
+ | Als nächstes verschieben wir den privaten Signierungs-Unterschlüssel aus, in dem wir erst den bereits ausgewählten Verschlüsselungs-Key abwählen und dann den Signierungs-Key anwählen. | ||
+ | gpg> key 1 | ||
+ | < | ||
+ | sec rsa4096/ | ||
+ | | ||
+ | | ||
+ | ssb rsa4096/ | ||
+ | | ||
+ | ssb rsa4096/ | ||
+ | | ||
+ | ssb rsa4096/ | ||
+ | | ||
+ | [ultimate] (1). Django aka BOfH (Bastard Operator from Hell) < | ||
+ | |||
+ | gpg></ | ||
+ | gpg> key 2 | ||
+ | < | ||
+ | sec rsa4096/ | ||
+ | | ||
+ | | ||
+ | ssb rsa4096/ | ||
+ | | ||
+ | ssb* rsa4096/ | ||
+ | | ||
+ | ssb rsa4096/ | ||
+ | | ||
+ | [ultimate] (1). Django aka BOfH (Bastard Operator from Hell) < | ||
+ | |||
+ | gpg></ | ||
+ | |||
+ | Nun verschieben wir den privaten Signierungs-Unterschlüssel in Richtung SmartCard des Nitrokey Pro. Hier wählen wir nun die **'' | ||
+ | gpg> keytocard | ||
+ | < | ||
+ | (1) Signature key | ||
+ | (3) Authentication key | ||
+ | Your selection? | ||
+ | Zum Entsperren des PGP-Schlüssels werden wir um Bestätigung der Passphrase gebeten. | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | < | ||
+ | |||
+ | sec rsa4096/ | ||
+ | | ||
+ | | ||
+ | ssb rsa4096/ | ||
+ | | ||
+ | ssb* rsa4096/ | ||
+ | | ||
+ | ssb rsa4096/ | ||
+ | | ||
+ | [ultimate] (1). Django aka BOfH (Bastard Operator from Hell) < | ||
+ | |||
+ | gpg></ | ||
+ | |||
+ | Zu guter Letzt fehlt nun noch unser Authentifizierungs-Unterschlüssel. Wir wählen also wieder den Schlüssel **'' | ||
+ | gpg> key 2 | ||
+ | < | ||
+ | sec rsa4096/ | ||
+ | | ||
+ | | ||
+ | ssb rsa4096/ | ||
+ | | ||
+ | ssb rsa4096/ | ||
+ | | ||
+ | ssb rsa4096/ | ||
+ | | ||
+ | [ultimate] (1). Django aka BOfH (Bastard Operator from Hell) < | ||
+ | |||
+ | gpg></ | ||
+ | gpg> key 3 | ||
+ | < | ||
+ | sec rsa4096/ | ||
+ | | ||
+ | | ||
+ | ssb rsa4096/ | ||
+ | | ||
+ | ssb rsa4096/ | ||
+ | | ||
+ | ssb* rsa4096/ | ||
+ | | ||
+ | [ultimate] (1). Django aka BOfH (Bastard Operator from Hell) < | ||
+ | |||
+ | gpg></ | ||
+ | |||
+ | Nun verschieben wir den privaten Authentifizierungs-Unterschlüssel in Richtung SmartCard des Nitrokey Pro. Hier wählen wir nun die **'' | ||
+ | gpg> keytocard | ||
+ | < | ||
+ | (3) Authentication key | ||
+ | Your selection? 3</ | ||
+ | |||
+ | Zum Entsperren des PGP-Schlüssels werden wir um Bestätigung der Passphrase gebeten. | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | < | ||
+ | sec rsa4096/ | ||
+ | | ||
+ | | ||
+ | ssb rsa4096/ | ||
+ | | ||
+ | ssb rsa4096/ | ||
+ | | ||
+ | ssb* rsa4096/ | ||
+ | | ||
+ | [ultimate] (1). Django aka BOfH (Bastard Operator from Hell) < | ||
+ | |||
+ | gpg></ | ||
+ | |||
+ | Zum Abschluss speichern wir nun unsere Änderungen im lokalen key-ring mit dem Befehl **'' | ||
+ | gpg> save | ||
+ | |||
+ | Wenn wir jetzt den Kartenstatus abfragen, werden unsere drei Unterschlüssel entsprechend mit angezeigt. | ||
+ | $ gpg --card-status | ||
+ | |||
+ | < | ||
+ | Application ID ...: D27600012701020100066000425D0000 | ||
+ | Application type .: OpenPGP | ||
+ | Version ..........: 2.1 | ||
+ | Manufacturer .....: ZeitControl | ||
+ | Serial number ....: 000034D4 | ||
+ | Name of cardholder: Django aka Bastard Operator from Hell | ||
+ | Language prefs ...: de | ||
+ | Salutation .......: Mr. | ||
+ | URL of public key : https:// | ||
+ | Login data .......: django | ||
+ | Signature PIN ....: not forced | ||
+ | Key attributes ...: rsa4096 rsa4096 rsa4096 | ||
+ | Max. PIN lengths .: 32 32 32 | ||
+ | PIN retry counter : 3 0 3 | ||
+ | Signature counter : 0 | ||
+ | Signature key ....: 41A8 4ABC 8C4D D712 49E3 DC6E A6EC 2C06 2AEE 3AB8 | ||
+ | created ....: 2020-08-30 12:01:28 | ||
+ | Encryption key....: 1D03 3786 F875 686B 3423 9B82 D5D9 674D 9331 F388 | ||
+ | created ....: 2020-08-30 11:31:04 | ||
+ | Authentication key: 140B 5460 7269 96FE 98F7 C9AA 28B0 CB36 2EC9 939D | ||
+ | created ....: 2020-08-30 12:07:06 | ||
+ | General key info..: sub rsa4096/ | ||
+ | sec | ||
+ | ssb> | ||
+ | card-no: 0005 000034D4 | ||
+ | ssb> | ||
+ | card-no: 0005 000034D4 | ||
+ | ssb> | ||
+ | card-no: 0005 000034D4 | ||
+ | </ | ||
+ | |||
+ | == Schlüssel aus dem lokalen Schlüsselspeicher entfernen == | ||
+ | Löschen wir nun den kompletten Schlüssel aus der lokalen Schlüsseldatei, | ||
+ | $ gpg --delete-secret-key django@nausch.org | ||
+ | < | ||
+ | This is free software: you are free to change and redistribute it. | ||
+ | There is NO WARRANTY, to the extent permitted by law. | ||
+ | |||
+ | |||
+ | sec rsa4096/ | ||
+ | |||
+ | Delete this key from the keyring? (y/N) y | ||
+ | This is a secret key! - really delete? (y/N) y | ||
+ | </ | ||
+ | |||
+ | <WRAP center round alert 95%> | ||
+ | __**Doch Achtung: | ||
+ | Hier wird der komplette Schlüssel gelöscht, also den **privaten Primären Signing Key** und nicht nur die Proxy-Einträge! Dies kann zu Problemen bei der späteren Verwendung des Nitrokey Pro auf der Konsole führen, da das gpg-Programm versucht den Schlüssel im Schlüsselbund zu finden! | ||
+ | </ | ||
+ | |||
+ | Der gpg-Befehl '' | ||
+ | |||
+ | Wir exportieren also erst einmal die Unterschlüssel und legen diese in einer lokalen Datei ab. Zunächst holen wir uns aber noch die Schlüssel-IDs da wir diese beim Exportieren eigens angeben müssen. | ||
+ | $ gpg --edit-key FEFA8BFEC18C32F19968C5EE412BC6B241503EC7 | ||
+ | < | ||
+ | There is NO WARRANTY, to the extent permitted by law. | ||
+ | |||
+ | Secret key is available. | ||
+ | |||
+ | sec rsa4096/ | ||
+ | | ||
+ | | ||
+ | ssb rsa4096/ | ||
+ | | ||
+ | | ||
+ | ssb rsa4096/ | ||
+ | | ||
+ | | ||
+ | ssb rsa4096/ | ||
+ | | ||
+ | | ||
+ | [ultimate] (1). Django aka BOfH (Bastard Operator from Hell) < | ||
+ | |||
+ | gpg> | ||
+ | </ | ||
+ | Den Editierdialog verlassen wir mit dem Command **'' | ||
+ | gpg> quit | ||
+ | |||
+ | Nun exportieren wir die Unterschlüssel in die Datei **'' | ||
+ | $ gpg -o subkeys --export-secret-subkeys 564BA287! ACCE2639! EC65030E! | ||
+ | |||
+ | Nun löschen wir den primären Signierungsschlüssel inkl. der Unterschlüssel. | ||
+ | $ gpg --delete-secret-key django@nausch.org | ||
+ | < | ||
+ | This is free software: you are free to change and redistribute it. | ||
+ | There is NO WARRANTY, to the extent permitted by law. | ||
+ | |||
+ | |||
+ | sec rsa4096/ | ||
+ | |||
+ | Delete this key from the keyring? (y/N) y | ||
+ | This is a secret key! - really delete? (y/N) y</ | ||
+ | |||
+ | Ein erneuter Aufruf des privaten Schlüsselspeichers zeigt und, dass dort nun keine Einträge mehr vorhanden sind. | ||
+ | $ gpg --list-secret-keys | ||
+ | |||
+ | Nun importieren wir wieder die zuvor gesicherten privaten Unterschlüssel | ||
+ | $ gpg --import subkeys | ||
+ | < | ||
+ | gpg: To migrate ' | ||
+ | gpg: key 412BC6B241503EC7: | ||
+ | gpg: Total number processed: 1 | ||
+ | gpg: unchanged: 1 | ||
+ | gpg: | ||
+ | </ | ||
+ | |||
+ | Lassen wir uns nun den Inhalt des privaten Schlüsselbundes anzeigen, sehen wir die zurückgesicherten Unterschlüssel wieder. | ||
+ | $ gpg --edit-key FEFA8BFEC18C32F19968C5EE412BC6B241503EC7 | ||
+ | |||
+ | < | ||
+ | This is free software: you are free to change and redistribute it. | ||
+ | There is NO WARRANTY, to the extent permitted by law. | ||
+ | |||
+ | |||
+ | pub rsa4096/ | ||
+ | | ||
+ | | ||
+ | sub rsa4096/ | ||
+ | | ||
+ | sub rsa4096/ | ||
+ | | ||
+ | sub rsa4096/ | ||
+ | | ||
+ | [ultimate] (1). Django aka BOfH (Bastard Operator from Hell) < | ||
+ | |||
+ | gpg></ | ||
+ | |||
+ | Den Dialog verlassen wir wieder mit dem Connamd **'' | ||
+ | |||
+ | Zu guter letzt vernichten wir die Datei mit den gesicherten privaten Unterschlüsseln. | ||
+ | $ shred --zero --remove subkeys | ||
+ | |||
+ | |||
+ | |||
+ | |||
=== Rückruf-Zertifikat erstellen === | === Rückruf-Zertifikat erstellen === | ||
Zeile 679: | Zeile 1316: | ||
pub | pub | ||
D7ACC16061ABF3C6E14B1C3856D31D76E0C812E8 | D7ACC16061ABF3C6E14B1C3856D31D76E0C812E8 | ||
- | uid Django aka Bastard Operator from Hell <django@mailserver.guru> | + | uid Django aka Bastard Operator from Hell <django@nausch.org> |
A revocation certificate is a kind of "kill switch" | A revocation certificate is a kind of "kill switch" | ||
Zeile 730: | Zeile 1367: | ||
pub | pub | ||
D7ACC16061ABF3C6E14B1C3856D31D76E0C812E8 | D7ACC16061ABF3C6E14B1C3856D31D76E0C812E8 | ||
- | uid | + | uid |
- | sig 3 56D31D76E0C812E8 2020-08-29 | + | sig 3 56D31D76E0C812E8 2020-08-29 |
sub | sub | ||
- | sig 56D31D76E0C812E8 2020-08-29 | + | sig 56D31D76E0C812E8 2020-08-29 |
sub | sub | ||
- | sig 56D31D76E0C812E8 2020-08-29 | + | sig 56D31D76E0C812E8 2020-08-29 |
</ | </ | ||
Zeile 742: | Zeile 1379: | ||
$ gpg --gen-revoke D7ACC16061ABF3C6E14B1C3856D31D76E0C812E8 | $ gpg --gen-revoke D7ACC16061ABF3C6E14B1C3856D31D76E0C812E8 | ||
- | < | + | < |
Create a revocation certificate for this key? (y/ | Create a revocation certificate for this key? (y/ | ||
Zeile 826: | Zeile 1463: | ||
$ gpg --import revocation.crt | $ gpg --import revocation.crt | ||
- | < | + | < |
gpg: Total number processed: 1 | gpg: Total number processed: 1 | ||
gpg: new key revocations: | gpg: new key revocations: | ||
Zeile 844: | Zeile 1481: | ||
pub | pub | ||
D7ACC16061ABF3C6E14B1C3856D31D76E0C812E8 | D7ACC16061ABF3C6E14B1C3856D31D76E0C812E8 | ||
- | rev 56D31D76E0C812E8 2020-08-30 | + | rev 56D31D76E0C812E8 2020-08-30 |
reason for revocation: Key is no longer used | reason for revocation: Key is no longer used | ||
| | ||
- | uid [ revoked] Django aka Bastard Operator from Hell <django@mailserver.guru> | + | uid [ revoked] Django aka Bastard Operator from Hell <django@nausch.org> |
- | sig 3 56D31D76E0C812E8 2020-08-29 | + | sig 3 56D31D76E0C812E8 2020-08-29 |
</ | </ | ||
Zeile 938: | Zeile 1575: | ||
=== Export des public-key auf einen Keyserver === | === Export des public-key auf einen Keyserver === | ||
Den zuvor exportierten public key können wir nun in einem WEB-Formular auf einem [[http:// | Den zuvor exportierten public key können wir nun in einem WEB-Formular auf einem [[http:// | ||
- | $ gpg %%--%%keyserver keys.openpgp.org | + | $ gpg --keyserver keys.openpgp.org --send-key 4F9FC2E6F458253C |
gpg: sending key 4F9FC2E6F458253C to hkp server keys.gnupg.net | gpg: sending key 4F9FC2E6F458253C to hkp server keys.gnupg.net | ||
Zeile 953: | Zeile 1590: | ||
- | /* # apt-get install enigmail | + | ==== Secure Shell (SSH) ==== |
- | bei Thunderbird 68.10.0 (64-bit) nicht via apt sondern | + | <WRAP center round important 90%> |
+ | Ob man in Zeiten von Überwachungsphantasten in Unternehmen und vor allem auch bei einer NSA oder BND, noch **[[http:// | ||
+ | |||
+ | Der Sicherheitsguru Bruce Schneier hat in seinem **[[https:// | ||
+ | |||
+ | <wrap em>//" | ||
+ | |||
+ | **[[https:// | ||
+ | |||
+ | Mit Hinblick auf die möglichen Unsicherheiten im Bezug auf die [[https:// | ||
+ | </ | ||
+ | |||
+ | Will oder muss man weiterhin auf RSA-Schlüssel zurückgreifen, | ||
+ | |||
+ | === SSH Client vorbereiten === | ||
+ | /* | ||
+ | === SSH-Client konfigurieren === | ||
+ | Zur einfacheren Administration unserer Remote-Hosts bedienen wir uns einer User-Konfigurationsdatei im Homeverzeichnis **'' | ||
+ | $ vim ~/ | ||
+ | |||
+ | <file bash ~/ | ||
+ | | ||
+ | Port 9922 | ||
+ | User django | ||
+ | | ||
+ | | ||
+ | |||
+ | </ | ||
+ | |||
+ | Die passende **'' | ||
+ | $ sudo apt install opensc | ||
*/ | */ | ||
+ | Damit wir beim Verbindungsaufbau auf den Authentication Key zugreifen können, müssen wir unseren Client entsprechend vorbereiten. | ||
+ | |||
+ | Hierzu aktivieren wir zunächst die Option '' | ||
+ | **// des GPG-Agenten. | ||
+ | $ vim ~/ | ||
+ | <file bash ~/ | ||
+ | # See backup in '/ | ||
+ | |||
+ | # File re-created by pEp | ||
+ | # See backup in '/ | ||
+ | |||
+ | default-cache-ttl 300 | ||
+ | max-cache-ttl 999999 | ||
+ | |||
+ | # Django : 2020-08-05 | ||
+ | # SSH-Unterstützung beim gnupg-agent aktiviert | ||
+ | enable-ssh-support</ | ||
+ | |||
+ | Anschließend müssen wir noch die Datei // | ||
+ | $ vim ~/.bashrc | ||
+ | <file bash ~/ | ||
+ | |||
+ | # Source global definitions | ||
+ | if [ -f /etc/bashrc ]; then | ||
+ | . /etc/bashrc | ||
+ | fi | ||
+ | |||
+ | # User specific environment | ||
+ | PATH=" | ||
+ | export PATH | ||
+ | |||
+ | # Uncomment the following line if you don't like systemctl' | ||
+ | # export SYSTEMD_PAGER= | ||
+ | |||
+ | # User specific aliases and functions | ||
+ | |||
+ | # Django : 2020-08-05 | ||
+ | # Definition des SSH_AUTH_SOCK für den Zugriff des SSH-Schlüssels auf dem Nitrokey Start | ||
+ | unset SSH_AGENT_PID | ||
+ | if [ " | ||
+ | export SSH_AUTH_SOCK=" | ||
+ | fi</ | ||
+ | |||
+ | Damit unsere Änderungen aktiv werden, müssen wir nun zum Schluss noch den **pgp-agent** restarten bzw. einen Neustart des Clients erwirken. Der Einfachheit halber für den pragmatischen weg und melden uns einmal von unserer X-Session an unserem Clientrechner ab und wieder an! | ||
+ | |||
+ | === Public-Key des RSA4096-Keys für SSH exportieren === | ||
+ | Für den Zugriff auf unser Ziel-System mit Hilfe der SSH benötigen wir noch den öffentlichen Schlüssel unseres Authentication Keys, den wir nun exportieren werden. | ||
+ | Zunächst besorgen wir uns die betreffende Schlüsselkennung des Autentication Keys, genauer gesagt die 4 letzten Zahlenreihen des nachfolgenden Aufrufs. | ||
+ | $ gpg --card-status | grep Authentication\ key | ||
+ | |||
+ | Authentication key: 765D 1F7C 8AF0 1360 30FF FB20 872B 620E 5C5D 1F71 | ||
+ | |||
+ | In diesem Konfigurationsbeispiel ist die Schlüssel-ID des Autentication Keys also die Nummer '' | ||
+ | |||
+ | Nun exportieren wir den öffentlichen Schlüssel und schreiben diesen in eine separate Datei. | ||
+ | $ $ gpg --export-ssh-key 872B620E5C5D1F71 | ||
+ | |||
+ | Der Öffentliche Schlüssel in diesen Konfigurationsbeispiel lautet also: | ||
+ | $ cat ~/ | ||
+ | |||
+ | ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCa1OmylijwG9NXLN7OukmiZAtITHOFkEdb4ztmgL87h+Bn4PbEvMcErbXqCEtLTZK8IQYg+7JU1/ | ||
+ | |||
+ | Diesen Schlüssel kopieren wir nun auf das entsprechende Zielsystem an Ort und Stelle '' | ||
+ | $ scp ~/ | ||
+ | |||
+ | |||
+ | === SSH-Verbindung aufbauen === | ||
+ | Nun können wir wie gewohnt eine Verbindung zu unserem entfernten System aufbauen. | ||
+ | $ ssh zielhost.dmz.nausch.org | ||
+ | bzw. | ||
+ | $ ssh < | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Da der SSH-Key zur Authentication nicht im Dateisystem liegt, sondern auf der SmartCard des Nitrokey werden wir nun nach der User-PIN gefragt, damit auf den privaten Schlüssel der Karte zugegriffen werden kann. | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Der entsperrte Schlüssel der SmartCard des Nitrokey Start wird nur für den Verbindungsaufbau zum Zielsystem verwendet. Bei jedem erneuten SSH-Verbindung müssen wir erneut bei angestecktem Nitrokey Start die PIN Nummer zum Entsperren eingeben! | ||
+ | |||
+ | /* | ||
+ | $ ssh -I / | ||
+ | ############################################################################## | ||
+ | # # | ||
+ | # This is a private home server. | ||
+ | # # | ||
+ | # | ||
+ | # # | ||
+ | # This system is actively monitored and all connections may be logged. | ||
+ | # By accessing this system, you consent to this monitoring. | ||
+ | # # | ||
+ | ############################################################################## | ||
+ | Enter PIN for ' | ||
+ | Last login: Sun Aug 30 16:58:05 2020 from vml000027.dmz.nausch.org | ||
+ | ############################################################################## | ||
+ | # # | ||
+ | # This is the home server of Michael Nausch. | ||
+ | # # | ||
+ | # vml000177.nausch.org | ||
+ | # # | ||
+ | # | ||
+ | # # | ||
+ | # This system is actively monitored and all connections may be logged. | ||
+ | # By accessing this system, you consent to this monitoring. | ||
+ | # # | ||
+ | ############################################################################## | ||
+ | [django@vml000177 ~]$ | ||
+ | */ | ||
+ | ==== EMail mit Thunderbird | ||
+ | === PGP === | ||
+ | Unseren zuvor auf dem Nitrokey Pro **[[# | ||
+ | |||
+ | <WRAP center round tip 80%> | ||
+ | Bei Thunderbird **68.10.0** (64-bit) ist es angeraten **__nicht__** das benötigte add-on **Enigmail** via apt zu installieren, | ||
+ | </ | ||
+ | |||
+ | Über das Menü (das Icon mit den drei Querstreifen rechts oben am Bildschirm) wählen wir den Menüpunkt **Add-ons** aus. | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Hier suchen wir dann über die Suchoption nach dem Add-on **EnigMail**. | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Zum Installieren klicken wir auf die grüne Schaltfläche **+ Add to Thunderbird** beim angezeigtem Add-on **EnigMail**. | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Es öffnet sich ein Dialogfenster bei dem angezeigt wird, ob GnuPG im system vorhanden ist. | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Anschließend wird nach gültigem Schlüsselmaterial gesucht. | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Nun müssen wir die PGP-Unterstützung und den zugehörigen PGP-Key dem Konto zuweisen. Dazu klicken wir erneut auf das Menü-Icon rechts oben am Bildschirm (das Icon mit den drei Querstreifen) wählen nun den Menüpunkt **Preferences** aus. | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Die Einstelungen zu den Konten finden wir unter dem Menüpunkt **Account Settings**. | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Bei betreffenden Konto klicken wir dann auf die Schaltfläche **[ OpenPGP Security ]** und wählen den zur eMail-Adresse gehörigen PGP-Key, der auf dem Nitrokey generiert und gespeichert wurde, aus. | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Sobald wir nun eine Nachricht verschicken die signiert werden soll, wird vor dem Versand die PIN abgefragt und die Nachricht mit dem Signatur-Unterschlüssel unterschrieben. | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Sobald wir eine verschlüsselte Nachricht öffnen, werden wir nach der PIN gefragt, damit der Schlüssel zum Entschlüsseln auf der SmartCard freigeschalten werden kann. | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Nach eingabe der USER-PIN wird die Anchricht mit Hilfe des [[# | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Über die Schaltfläche **[ Details V ]** können wir uns Details zu der verschlüsselten Nachricht bzw. zum verwendetetn Schlüssel anzeigen lassen. | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | === S/ | ||
+ | == Vorbereitungen - micro-ca-tool und libengine-pkcs11-openssl== | ||
+ | Damit wir ein X.509-Zertifikat bei einer **[[https:// | ||
+ | |||
+ | Bevor wir es von **[[https:// | ||
+ | $ sudo apt install libengine-pkcs11-openssl | ||
+ | |||
+ | Anschließend legen wir uns ein entsprechendes Verzeichnis für das Toool im Homeverzeichnis **'' | ||
+ | $ mkdir ~/nitrokey | ||
+ | |||
+ | $ cd ~/nitrokey | ||
+ | |||
+ | Dann Clonen wir das Projekt. | ||
+ | $ git clone https:// | ||
+ | |||
+ | Anschließend verlinken wir noch das ausführbare Shell-Script, | ||
+ | $ ln -s ~/ | ||
+ | |||
+ | Mit der Option **'' | ||
+ | $ micro-ca-tool -h | ||
+ | < | ||
+ | | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | " | ||
+ | | ||
+ | | ||
+ | [#] Version: 0.1 | ||
+ | |||
+ | Welcome to µ-CA. | ||
+ | This tool will help you to perform basic tasks with your CA: | ||
+ | * Create CA as files | ||
+ | * or Create CA on a SmartCard | ||
+ | * or Create CA as files and store on SmartCard | ||
+ | * Create intermediate CA | ||
+ | * Sign other certificates | ||
+ | * Backup CA key with n-of-m scheme key sharing | ||
+ | * Create client certificates | ||
+ | * Basic SmartCard functions: Info, Read, Write, Generate keys, Reset | ||
+ | |||
+ | SECURITY NOTE: This tool handles secret keys. As such it is best to follow the | ||
+ | following guidelines: | ||
+ | * Use this tool only on single-user and non-networked systems. | ||
+ | * Make sure files are stored on an encrypted filesystem only. E.g. copy this | ||
+ | script to a crypto-container. | ||
+ | * Do not leave unencrypted private keys when done. Better encrypt them for | ||
+ | backup or store them on an HSM. | ||
+ | * When done, unmount the encrypted filesystem. | ||
+ | |||
+ | [#] Usage: / | ||
+ | [#] | ||
+ | [#] | ||
+ | [#] | ||
+ | [#] optional [< | ||
+ | |||
+ | == CSR mit Hilfe des micro-ca-tool erstellen == | ||
+ | Den **CSR**((**C**ertificate **S**igning **R**equest)) oder auf Deutsch **// | ||
+ | |||
+ | Das Tool hält alle relevanten Konfigurationsparameter in einer zugehörigen Datei **'' | ||
+ | $ cat micro-ca-tool.config | ||
+ | <file bash micro-ca-tool.config>## | ||
+ | cfg_app_openssl="/ | ||
+ | cfg_app_pkcs15_init=" | ||
+ | cfg_app_pkcs15_tool=" | ||
+ | cfg_file_engine_pkcs11="/ | ||
+ | cfg_file_opensc_pkcs11="/ | ||
+ | </ | ||
+ | |||
+ | Nun erzeugen wir uns einen **CSR** denn wir später bei der **CA** unseres Vertrauens einreichen vund bitten werden, dass diese den CSR signieren und uns siomit ein Zertifikat auisstellen mögen. | ||
+ | |||
+ | Wir müssen dem **'' | ||
+ | * **Subject** : Im Falle eines X.509 für eMailverschlüsselung ist diese die eMailadresse des betreffenden Kontos, in unserem Falle also **''/ | ||
+ | * **CSR Filename** : Dateiname der CSR-Datei | ||
+ | * **Private Key** : Zum Erstellen und Signieren des CSR muss des Tool wiossen wo es den privatzen Schlüssel auf der Karte findet. Wir lassen uns also erst einmal zur Sicherheit den Inhalt der OpenPGP-SmartCard anzeigen. < | ||
+ | | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | " | ||
+ | | ||
+ | | ||
+ | [#] Version: 0.1 | ||
+ | Using reader with a card: Nitrokey Nitrokey Pro (000034D40000000000000000) 00 00 | ||
+ | Private RSA Key [Signature key] | ||
+ | Object Flags : [0x03], private, modifiable | ||
+ | Usage | ||
+ | Access Flags : [0x1D], sensitive, alwaysSensitive, | ||
+ | ModLength | ||
+ | Key ref : 0 (0x00) | ||
+ | Native | ||
+ | Auth ID : 01 | ||
+ | ID : 01 | ||
+ | MD: | ||
+ | |||
+ | Private RSA Key [Encryption key] | ||
+ | Object Flags : [0x03], private, modifiable | ||
+ | Usage | ||
+ | Access Flags : [0x1D], sensitive, alwaysSensitive, | ||
+ | ModLength | ||
+ | Key ref : 1 (0x01) | ||
+ | Native | ||
+ | Auth ID : 02 | ||
+ | ID : 02 | ||
+ | MD: | ||
+ | |||
+ | Private RSA Key [Authentication key] | ||
+ | Object Flags : [0x03], private, modifiable | ||
+ | Usage | ||
+ | Access Flags : [0x1D], sensitive, alwaysSensitive, | ||
+ | ModLength | ||
+ | Key ref : 2 (0x02) | ||
+ | Native | ||
+ | Auth ID : 02 | ||
+ | ID : 03 | ||
+ | MD: | ||
+ | |||
+ | Public RSA Key [Signature key] | ||
+ | Object Flags : [0x02], modifiable | ||
+ | Usage | ||
+ | Access Flags : [0x02], extract | ||
+ | ModLength | ||
+ | Key ref : 0 (0x00) | ||
+ | Native | ||
+ | Path : b601 | ||
+ | ID : 01 | ||
+ | |||
+ | Public RSA Key [Encryption key] | ||
+ | Object Flags : [0x02], modifiable | ||
+ | Usage | ||
+ | Access Flags : [0x02], extract | ||
+ | ModLength | ||
+ | Key ref : 0 (0x00) | ||
+ | Native | ||
+ | Path : b801 | ||
+ | ID : 02 | ||
+ | |||
+ | Public RSA Key [Authentication key] | ||
+ | Object Flags : [0x02], modifiable | ||
+ | Usage | ||
+ | Access Flags : [0x02], extract | ||
+ | ModLength | ||
+ | Key ref : 0 (0x00) | ||
+ | Native | ||
+ | Path : a401 | ||
+ | ID : 03 | ||
+ | |||
+ | </ | ||
+ | Private RSA Key [Signature key] | ||
+ | Object Flags : [0x03], private, modifiable | ||
+ | Usage | ||
+ | Access Flags : [0x1D], sensitive, alwaysSensitive, | ||
+ | ModLength | ||
+ | Key ref : 0 (0x00) | ||
+ | Native | ||
+ | Auth ID : 01 | ||
+ | ID : 01 | ||
+ | MD: | ||
+ | |||
+ | Wir rufen nun also das Tool **'' | ||
+ | $ micro-ca-tool sc new-csr | ||
+ | < | ||
+ | | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | " | ||
+ | | ||
+ | | ||
+ | [#] Version: 0.1 | ||
+ | [?] Subject [/CN=Hans Wurst] / | ||
+ | [?] CSR Filename [usercert-0094.csr] django-nausch.org-csr.pem | ||
+ | [?] Private Key (< | ||
+ | OpenSSL> (dynamic) Dynamic engine loading support | ||
+ | [Success]: SO_PATH:/ | ||
+ | [Success]: ID:pkcs11 | ||
+ | [Success]: LIST_ADD:1 | ||
+ | [Success]: LOAD | ||
+ | [Success]: MODULE_PATH:/ | ||
+ | Loaded: (pkcs11) pkcs11 engine | ||
+ | OpenSSL> engine " | ||
+ | Enter PKCS#11 token PIN for OpenPGP card (User PIN (sig)): | ||
+ | OpenSSL></ | ||
+ | |||
+ | Nach Eingabe der **USER**-PIN wird der CSR im aktuell genutzten Pfad gespeichert. Bei Interesse können wir mit dem Befehl **'' | ||
+ | $ openssl req -noout -text -in django-nausch.org-csr.pem | ||
+ | |||
+ | < | ||
+ | Data: | ||
+ | Version: 1 (0x0) | ||
+ | Subject: CN = django@nausch.org | ||
+ | Subject Public Key Info: | ||
+ | Public Key Algorithm: rsaEncryption | ||
+ | RSA Public-Key: (4096 bit) | ||
+ | Modulus: | ||
+ | 00: | ||
+ | d5: | ||
+ | 33: | ||
+ | 8a: | ||
+ | 40: | ||
+ | 71: | ||
+ | a2: | ||
+ | 26: | ||
+ | 2d: | ||
+ | 49: | ||
+ | dc: | ||
+ | 54: | ||
+ | 7c: | ||
+ | 73: | ||
+ | 9f: | ||
+ | 4e: | ||
+ | 57: | ||
+ | 95: | ||
+ | ab: | ||
+ | 65: | ||
+ | 2e: | ||
+ | c2: | ||
+ | 1c: | ||
+ | 85: | ||
+ | 0b: | ||
+ | a6: | ||
+ | 22: | ||
+ | bd: | ||
+ | 99: | ||
+ | 9d: | ||
+ | fa: | ||
+ | 15: | ||
+ | f3: | ||
+ | ec: | ||
+ | 4b:a2:59 | ||
+ | Exponent: 65537 (0x10001) | ||
+ | Attributes: | ||
+ | a0:00 | ||
+ | Signature Algorithm: sha256WithRSAEncryption | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | |||
+ | Die Date laden wir nun entweder auf der WEB-GUI der CA hoch oder kopieren den Inhalt der Datei und fügen diese im Betreffenden Formularfeld ein, welches die CA zur Verfügung stellt. | ||
+ | $ cat django-nausch.org-csr.pem | ||
+ | < | ||
+ | MIIEZjCCAk4CAQAwITEfMB0GA1UEAwwWZGphbmdvQG1haWxzZXJ2ZXIuZ3VydTCC | ||
+ | AiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAJ3/ | ||
+ | KV9NB7UeH0SKIfR2M1KhhRxtgdpSGAF8Uw41it8Ol7mQ1fIgLauSik9OQLqZcCrT | ||
+ | bDKcR0XitjVicWDkrgB8OZAy1r9pGH4Zop2SIGmVRxjtAYcR6gSLJnlW1HY6wWgl | ||
+ | txMPWEH9LTO55ICr2iXhZbCdUmFNSeluYO96Z+DjBw6GSTZR3DGJla3M1LZy+JGC | ||
+ | wgXWVGvDMKzc5WXJCAGK4/ | ||
+ | n36H/ | ||
+ | j1b9Nz4lyPdMpebYq/ | ||
+ | XgRaAODnk8phwi/ | ||
+ | VJpNXDm/ | ||
+ | 312hvURBOroneEx4OYvxYBeLmWGzEyl/ | ||
+ | +inQKOLx0NuARFIAQyg7Fb7huB6xEF1xsuaMK3qo85CNtynYWM424n5ZtxG47MdB | ||
+ | IgfszoNnEMRKsJISS6JZAgMBAAGgADANBgkqhkiG9w0BAQsFAAOCAgEAio6J1oux | ||
+ | AbSSDPYeZA6K06siRvdH9y4yqX0zUTF4fKH9ISUiyThFMlYvNIuIpyTzbyi9wZb8 | ||
+ | fz/ | ||
+ | hzJc6bKchumJSNOd8UrsoLpvCNV6KTdUYGmg+BKH/ | ||
+ | 2NtzIWVSxD3WUcnvHbkay9C5UKtcRqsLnGaSMAhSvXQJKzfobDkPmsPM7Tt3B/ | ||
+ | 7McydngMMa9Xnc0p8F+tXs3EIb4qX8mCpttHI82KcYFOEwTiMbP71lLJZUIPXbWz | ||
+ | isn7tPYr9ETsRYoAlvCgGW3mvQ1fWWgJncDx1MToN/ | ||
+ | 9pqCtabjfw+5pzQa9XrW6WIe18kubN2Ih7SC7z7p/ | ||
+ | Kw+osxMqog4yZruCmrvlc4IyIGuvVorISRYHffGde3yZAPfgaWgXa4olHJhFIDVB | ||
+ | 0zpCrsNnuCFb9CEKVJlZHijteaDkrBHekcpMGjisgxXqgizIfjOc7DSQTFiFtW0q | ||
+ | gLJ8xkk9RpmDzY8IZ6XHjepm0y9ZOwlZD+FpYuF84sgEfW27J2MIwfxaHAeJHhs3 | ||
+ | hHljMyK8alhaPlUwb9B5DRpZ+SBJGv11ZRo= | ||
+ | -----END CERTIFICATE REQUEST-----</ | ||
+ | $ vim django-nausch.org-certificat.pem | ||
+ | |||
+ | < | ||
+ | MIIGfzCCBGegAwIBAgIDFKmlMA0GCSqGSIb3DQEBCwUAMHkxEDAOBgNVBAoTB1Jv | ||
+ | b3QgQ0ExHjAcBgNVBAsTFWh0dHA6Ly93d3cuY2FjZXJ0Lm9yZzEiMCAGA1UEAxMZ | ||
+ | dEBjYWNlcnQub3JnMB4XDTIwMDgzMDE4MDgyNVoXDTIyMDgzMDE4MDgyNVowQTEY | ||
+ | Q0EgQ2VydCBTaWduaW5nIEF1dGhvcml0eTEhMB8GCSqGSIb3DQEJARYSc3VwcG9y | ||
+ | MBYGA1UEAxMPQ0FjZXJ0IFdvVCBVc2VyMSUwIwYJKoZIhvcNAQkBFhZkamFuZ29A | ||
+ | bWFpbHNlcnZlci5ndXJ1MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA | ||
+ | nf9xAogPn2h6BBOXdn/ | ||
+ | uZDV8iAtq5KKT05AuplwKtNsMpxHReK2NWJxYOSuAHw5kDLWv2kYfhminZIgaZVH | ||
+ | GO0BhxHqBIsmeVbUdjrBaCW3Ew9YQf0tM7nkgKvaJeFlsJ1SYU1J6W5g73pn4OMH | ||
+ | DoZJNlHcMYmVrczUtnL4kYLCBdZUa8MwrNzlZckIAYrj9fl8RwbHFiSB8GsMePn6 | ||
+ | zHpzsE2nwcPYzNocrqiRNEqffof+H0grF/ | ||
+ | / | ||
+ | yueJvJVLymTB0tQuYQENeFZeBFoA4OeTymHCL9QDzv1omL7RT9a4y0Acff5tM3Zw | ||
+ | UJ5pVNDW6YqFqjfuzpSNsa1Umk1cOb8LJAZitgXd7hdHBBde82qmsczEwHA8QzvB | ||
+ | AOWdpzbTbnL5mo8MxbVbFLT6KdAo4vHQ24BEUgBDKDsVvuG4HrEQXXGy5owreqjz | ||
+ | 6uJzaEEij6TWFJ5eUN7g897fXaG9REE6uid4THg5i/ | ||
+ | kI23KdhYzjbiflm3Ebjsx0EiB+zOg2cQxEqwkhJLolkCAwEAAaOCAUYwggFCMAwG | ||
+ | A1UdEwEB/ | ||
+ | aWZpY2F0ZSBmb3IgRlJFRSBoZWFkIG92ZXIgdG8gaHR0cDovL3d3dy5DQWNlcnQu | ||
+ | b3JnMA4GA1UdDwEB/ | ||
+ | AwIGCisGAQQBgjcKAwQGCisGAQQBgjcKAwMGCWCGSAGG+EIEATAyBggrBgEFBQcB | ||
+ | AQQmMCQwIgYIKwYBBQUHMAGGFmh0dHA6Ly9vY3NwLmNhY2VydC5vcmcwMQYDVR0f | ||
+ | VR0RBBowGIEWZGphbmdvQG1haWxzZXJ2ZXIuZ3VydTANBgkqhkiG9w0BAQsFAAOC | ||
+ | BCowKDAmoCSgIoYgaHR0cDovL2NybC5jYWNlcnQub3JnL3Jldm9rZS5jcmwwIQYD | ||
+ | AgEACkbMXEhM1FGXrJUWXwkmld3vEulz62u8Frzcv/ | ||
+ | Gu5+26SlnyjCFtF3nHVY005abfri3Bvc0BNAiibodV1SFnSk9AuHFRRSGtaw4TLk | ||
+ | PybeS8dq+NB376nOpdtj8xbYU6oJV479QKuHM2etgWpFWRHWsrjoBkbAQ7I5sQZb | ||
+ | H9a21pYqdHeElkHPlfmSI3KQ+z0vo7SLqOE3alRPZnw9CUg3rh99MP11ZB5GEDOj | ||
+ | Dk3TQHfWbPQ9J3G004YfPKbfz/ | ||
+ | sU2Q/ | ||
+ | 2xpyVq3+qZwxxUQxK3mSD4LZ6XwBiiMPWF50qibfEWNajpyi3uUcPyDeOesjtNKO | ||
+ | CmjnItTPUJXrFImv8S56G4Eu5PCau0PRcLP/ | ||
+ | ZVBseQdtbKV6ePB58SEk6tOXNeNFtsWlrpWmlzuVH2ukaT9G/ | ||
+ | 3COLw+Rtw6TWRo3+izMjOREmK5O8eMHZoHaMShA3q3aAr1jwxFmk5cFU2jUzZrOh | ||
+ | 105SyG2nNDn1ndsvyka2L57qb8j6V8Hkdig/ | ||
+ | -----END CERTIFICATE----- | ||
+ | </ | ||
+ | |||
+ | Dieses Zertifikatsfile importieren wir nun mit Hilfe des Prgramms **'' | ||
+ | $ pkcs15-init --store-certificate | ||
+ | |||
+ | Using reader with a card: Nitrokey Nitrokey Pro (000034D40000000000000000) 00 00 | ||
+ | Security officer PIN [Admin PIN] required. | ||
+ | Please enter Security officer PIN [Admin PIN]: | ||
+ | |||
+ | Beim Import werden wir wie erwartet nach der **ADMIN**-PIN gefragt. | ||
+ | |||
+ | Zum Schluss können wir uns nocheinmal anzeigen lassen und somit überzeugen, | ||
+ | $ micro-ca-tool sc i | ||
+ | < | ||
+ | | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | " | ||
+ | | ||
+ | | ||
+ | [#] Version: 0.1 | ||
+ | Using reader with a card: Nitrokey Nitrokey Pro (000034D40000000000000000) 00 00 | ||
+ | X.509 Certificate [Cardholder certificate] | ||
+ | Object Flags : [0x00] | ||
+ | Authority | ||
+ | Path : 3f007f21 | ||
+ | ID : 03 | ||
+ | Encoded serial : 02 03 14A9A5 | ||
+ | |||
+ | Private RSA Key [Signature key] | ||
+ | Object Flags : [0x03], private, modifiable | ||
+ | Usage | ||
+ | Access Flags : [0x1D], sensitive, alwaysSensitive, | ||
+ | ModLength | ||
+ | Key ref : 0 (0x00) | ||
+ | Native | ||
+ | Auth ID : 01 | ||
+ | ID : 01 | ||
+ | MD: | ||
+ | |||
+ | Private RSA Key [Encryption key] | ||
+ | Object Flags : [0x03], private, modifiable | ||
+ | Usage | ||
+ | Access Flags : [0x1D], sensitive, alwaysSensitive, | ||
+ | ModLength | ||
+ | Key ref : 1 (0x01) | ||
+ | Native | ||
+ | Auth ID : 02 | ||
+ | ID : 02 | ||
+ | MD: | ||
+ | |||
+ | Private RSA Key [Authentication key] | ||
+ | Object Flags : [0x03], private, modifiable | ||
+ | Usage | ||
+ | Access Flags : [0x1D], sensitive, alwaysSensitive, | ||
+ | ModLength | ||
+ | Key ref : 2 (0x02) | ||
+ | Native | ||
+ | Auth ID : 02 | ||
+ | ID : 03 | ||
+ | MD: | ||
+ | |||
+ | Public RSA Key [Signature key] | ||
+ | Object Flags : [0x02], modifiable | ||
+ | Usage | ||
+ | Access Flags : [0x02], extract | ||
+ | ModLength | ||
+ | Key ref : 0 (0x00) | ||
+ | Native | ||
+ | Path : b601 | ||
+ | ID : 01 | ||
+ | |||
+ | Public RSA Key [Encryption key] | ||
+ | Object Flags : [0x02], modifiable | ||
+ | Usage | ||
+ | Access Flags : [0x02], extract | ||
+ | ModLength | ||
+ | Key ref : 0 (0x00) | ||
+ | Native | ||
+ | Path : b801 | ||
+ | ID : 02 | ||
+ | |||
+ | Public RSA Key [Authentication key] | ||
+ | Object Flags : [0x02], modifiable | ||
+ | Usage | ||
+ | Access Flags : [0x02], extract | ||
+ | ModLength | ||
+ | Key ref : 0 (0x00) | ||
+ | Native | ||
+ | Path : a401 | ||
+ | ID : 03 | ||
+ | |||
+ | </ | ||
+ | |||
+ | == Vorbereitungen - Thunderbird Einstellungen == | ||
+ | |||
+ | Nun müssen wir die PGP-Unterstützung und den zugehörigen PGP-Key dem Konto zuweisen. Dazu klicken wir erneut auf das Menü-Icon rechts oben am Bildschirm (das Icon mit den drei Querstreifen) wählen nun den Menüpunkt **Preferences** aus. | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Die Einstelungen zu den Konten finden wir unter dem Menüpunkt **Account Settings**. | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | In dem Fenster zu den Account-Einstellungen wählen wir dann den Punkt **Security** aus. | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Hier klicken wir dann auf die Schaltfläche **[ Securit__y__ Devices ]** | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Damit Thunderbird auf die OpenPGP-SmartCard des Nitrokey Pro zugreifen kann, müssen wir noch die dazu benötigte Bibliothek **''/ | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Zum Sichern der Eingaben klicken wir hier auf die Schaltfläche **[ OK ]**. Da auf die OpenPGP-SmartVCard des Nitrokey zugegriffen werden muss, wird entsprechend nach der **USER**-PIN gefragt. | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Da nur ein Zertifikat auf dem Nitrokey Pro gespeichert ist, fällt die Auswahl für das betreffende Zertifikat nicht sonderlich schwer. | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Zum Sichern der Eingaben klicken wir auch hier auf die Schaltfläche **[ OK ]**. | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Da wir ja mit dem Zertifikat unsere ausgehende Post signieren wollen und natürlich eingehende verschlüsselte Nachrichten entschlüsseln wollen, bejahren wir diese Frage hier natürlich mit einem Klick auf die Schaltfläche **[ __Y__es ]**. | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Sobald wir nun eine Nachricht verschicken die signiert werden soll, wird vor dem Versand die PIN abgefragt und die Nachricht mit dem Signatur-Unterschlüssel unterschrieben. | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Sobald wir eine verschlüsselte Nachricht öffnen, werden wir nach der PIN gefragt, damit der Schlüssel zum Entschlüsseln auf der SmartCard freigeschalten werden kann. | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Nach eingabe der USER-PIN wird die Anchricht mit Hilfe des [[# | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Über das Schloß-Symbol in der eMailansicht können wir uns Details zu der verschlüsselten Nachricht bzw. zum verwendetetn Schlüssel anzeigen lassen. | ||
+ | |||
+ | {{ : | ||
+ | ====== Links ====== | ||
+ | * **[[wiki: | ||
+ | * **[[http:// | ||