Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
centos:cryptos [20.07.2011 19:17. ] – Kapitel zum Thema M$-Windows XP angelegt und Verweis eingetragen djangocentos:cryptos [22.07.2019 14:57. ] (aktuell) – Externe Bearbeitung 127.0.0.1
Zeile 1: Zeile 1:
 +====== GPF CryptoStick in der Praxis ======
 +In diesem Kapitel befassen wir uns mit dem [[http://www.privacyfoundation.de/shop/crypto-stick.html|CryptoStick]] des [[http://www.privacyfoundation.de/|German Privacy Foundation e. V.]] unter CentOS 6.x. Auf diesem Crypto-USB-Stick können bis zu drei Anwender ihre GPG-Schlüssel und/oder ihr PKC#11-Zertifikat von [[http://cacert.org|CAcert]] ablegen. Plattformunabhängig lassen sich dann mit Hilfe dieses Sticks eMails signieren und entschlüsseln oder man kann sich im Browser an einer Webseite oder via SSH authentifizieren. Hierzu muss lediglich der Cryptostick an einen freien USB-Port unseres CentOS Clients gesteckt werden. 
 +
 +Der Cryptostick vereint in einem kleinen Plastikgehäuse einen Kartenleser mit zugehöriger OpenPGP Chipkarte. Technische Details zum CryptoStick findet man im [[https://www.privacyfoundation.de/wiki/GPFCryptoStick#Version_2|Wiki der GPF]]; zu den Details der **//OpenPGP Card//** wird man [[http://www.g10code.com/p-card.html|hier]] fündig. Eine Übersicht und viele hilfreiche Anleitungen zur Verwendung des GPF CryptoStick mit zahlreicher OpenSource Software findet man [[https://www.privacyfoundation.de/wiki/CryptoStickSoftware|hier]]. 
 +
 +{{ :centos:gpf-cs.png?nolink&600 |Photo des Cryptosticks}}
 +
 +Im Gegensatz zu klassischen Variante bei der Speicherung der Schlüsseldaten auf einem Computer, werden beim CryptoStick die Schlüsseldaten direkt auf der OpenPGP Chipkarte verwaltet, gespeichert und bei Bedarf auch erzeugt. Dies erfolgt mit Hilfe der Software //GnuPG V2//, die kompatibel zum OpenPGP Standard ist. Entscheidet man sich für das Verschieben des Schlüsselringes von unserem CentOS6.x Client auf den CryptoStick, so wird in der Schlüsselringdatei im Verzeichn is //~/.gnupg// nur noch ein Verweis auf die OpenPGP Chipkarte im CryptoStick gemacht.
 +
 +\\
 +
 +<WRAP center round tip 80%>
 +Einsatz- und Konfigurationsbeispiele zur Kryptographie-Hardware der neueren Generation finden sich hier:
 +  * **[[centos:nitrokey:fidou2f|Nitrokey FIDO U2F in der Praxis unter CentOS 7.x]]**
 +  * **[[centos:nitrokey:start|Nitrokey Start in der Praxis unter CentOS 7.x]]**
 +  * **[[centos:nitrokey:pro|Nitrokey Pro in der Praxis unter CentOS 7.x]]**
 +</WRAP>
 +
 +\\
 +
 +
 +===== Hardwareinformationen =====
 +Informationen über den Cryptostick können wir mit Hilfe des Befehls **usb-devices** dem System abverlangen.
 +   $ usb-devices
 +<code>T:  Bus=02 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#=  2 Spd=12  MxCh= 0
 +D:  Ver= 1.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
 +P:  Vendor=20a0 ProdID=4107 Rev=01.00
 +S:  Manufacturer=German Privacy Foundation
 +S:  Product=Crypto Stick v1.2
 +C:  #Ifs= 1 Cfg#= 1 Atr=80 MxPwr=100mA
 +I:  If#= 0 Alt= 0 #EPs= 3 Cls=0b(scard) Sub=00 Prot=00 Driver=usbfs</code>
 +
 +
 +Im Syslog wird uns beim Anstecken des Sticks dies entsprechend protokolliert:
 +<code>Jul 13 13:44:28 proton kernel: usb 2-1: new full speed USB device using uhci_hcd and address 2
 +Jul 13 13:44:28 proton kernel: usb 2-1: New USB device found, idVendor=20a0, idProduct=4107
 +Jul 13 13:44:28 proton kernel: usb 2-1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
 +Jul 13 13:44:28 proton kernel: usb 2-1: Product: Crypto Stick v1.2
 +Jul 13 13:44:28 proton kernel: usb 2-1: Manufacturer: German Privacy Foundation
 +Jul 13 13:44:28 proton kernel: usb 2-1: configuration #1 chosen from 1 choice</code>
 +
 +Wer es lieber graphisch dargestellt haben will, nutzt einfach den Befehl **hardinfo** aus dem gleichnamigen RPM-Paket.
 +
 +{{ :centos:hardinfo.png?400 |Bild zu denSysteminformationen mit Hilfe von hardinfo}}
 +
 +===== Softwarepaket =====
 +Rufen wir nun mit Hilfe von **gpg --card-status ** den Kartenstatus ab, wird uns mit unter folgende Fehlermeldung präsentiert:
 +<code>gpg-agent[2846]: can't connect server: `ERR 67109133 can't exec `/usr/bin/scdaemon': Datei oder Verzeichnis nicht gefunden'
 +gpg-agent[2846]: can't connect to the SCdaemon: IPC "connect" Aufruf fehlgeschlagen</code>
 +Das fehlende Programm **/usr/bin/scdaemon** ist im Paket **gnupg2-smime** enthalten. Ist dies noch nicht installiert, wird uns obige Fehlermeldung präsentiert. Wir installieren also das fehlende RPM-Paket.
 +   # yum install gnupg2-smime -y
 +
 +===== Aktivierung im System =====
 +Möchten wir nun auf unseren Stick als //normaler User// Zugreifen, werden wir im ersten Schritt erst einmal nicht viel Erfolg haben.
 +<code>[django@proton ~]$ gpg --card-status 
 +gpg: selecting openpgp failed: Kein passendes Gerät gefunden
 +gpg: OpenPGP Karte ist nicht vorhanden: Kein passendes Gerät gefunden</code>
 +Als **root** hingegen klappt dies erst einmal ohne größere Probleme.
 +   # gpg --card-status
 +
 +==== Variante 1 ====
 +In der ersten Variante beschreiten wir den Weg über eine entsprechende udev-Regel und dem Aufruf des **pgp-agent** als Autostarter.
 +=== udev-Regel ===
 +Damit nun unser User //django// auch auf den Stick zugreifen kann, legen wir uns eine passende udev-regel an.
 +   # vim /etc/udev/rules.d/40-cryptostick.rules
 +<file | /etc/udev/rules.d/40-cryptostick.rules>
 +# django: 2011-07-13
 +# udev-Regel für CryptoStick der GPF
 +ATTR{idVendor}=="20a0", ATTR{idProduct}=="4107", ENV{ID_SMARTCARD_READER}="1", ENV{ID_SMARTCARD_READER_DRIVER}="gnupg"
 +</file>
 +Anschließend können wir auch als normaler User auf den CryptoStick zugreifen.
 +   $ gpg --card-status
 +<code>Application ID ...: D2760001240102000005000008D10000
 +Version ..........: 2.0
 +Manufacturer .....: ZeitControl
 +Serial number ....: 000008D1
 +Name of cardholder: [nicht gesetzt]
 +Language prefs ...: de
 +Sex ..............: unbestimmt
 +URL of public key : [nicht gesetzt]
 +Login data .......: [nicht gesetzt]
 +Signature PIN ....: zwingend
 +Key attributes ...: 2048R 2048R 2048R
 +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]
 +</code>
 +=== pgp-agent ===
 +== socket-Zugriff ==
 +Beim Abfragen des Kartenstatus mittels **//gpg --card-status//**, wird unter CentOS 6.x ein Fehlermeldung ausgegeben, dass die Datei für den Unix-Socket **S.gpg-agent** nicht gefunden wird.
 +   $ gpg --card-status
 +   can't connect to `/home/django/.gnupg/S.gpg-agent': Datei oder Verzeichnis nicht gefunden
 +Dies liegt zum einen daran, dass der pgp-agent nicht läuft. Startet man diesen mit:
 +   $ gpg-agent --daemon
 +   GPG_AGENT_INFO=/tmp/gpg-J5EWOb/S.gpg-agent:2792:1; export GPG_AGENT_INFO;
 +Sieht man aber, dass der Socket im Verzeichnis **/tmp/gpg..** angelegt wird.
 +Mit der Option **--use-standard-socket** können wir jedoch festlegen, dass der Socket im Verzecihnis **~/.gnupg/** angelegt wird und wir dann dort auf eben diesen Socket zugreifen können
 +   $ gpg-agent --daemon --use-standard-socket
 +   GPG_AGENT_INFO=/home/django/.gnupg/S.gpg-agent:2804:1; export GPG_AGENT_INFO;
 +Beim anschließenden Versuch, auf den Stick zuzugreifen, bekommen wir kein Fehlermeldung mehr.
 +== automatischer Start ==
 +Damit nun der **pgp-agent** bei unserer Anmeldung am System automatisch mit der richtigen Option gestartet wird legen wir uns einen Autostarter an.
 +  $ mkdir ~/.config/autostart/
 +  $ vim ~/.config/autostart/gpg-agent-start.desktop
 +<file | ~/.config/autostart/gpg-agent-start.desktop>
 +[Desktop Entry]
 +Type=Application
 +Exec=gpg-agent --daemon --use-standard-socket
 +Hidden=false
 +X-GNOME-Autostart-enabled=true
 +Name[de_DE]=GPG-Daemon
 +Name=GPG-Daemon
 +Comment[de_DE]=Starten des GPG-Daemon beim Systemstart
 +Comment=Starten des GPG-Daemon beim Systemstart
 +</file>
 +Alternativ können wir auch unter dem Menüpunkt **[System]** -> **[Einstellungen]** -> **[Startprogramme]** uns die vorgenannte Konfigurationsdatei erstellen (lassen).
 +
 +{{ :centos:startpgrogrammeinstellungen.png?300 |Bildschirmhardcopy des Startprogramme Agenten}}
 +=== Einschränkung(en) ===
 +In dem vorgenannten Beispiel gibt es leider eine kleine Einschränkung, auf die nun noch hingewiesen wird. Hier wird davon ausgegangen, dass der CryptoStick sich während der kompletten Sitzung am System angesteckt bleibt. Zieht man den Stick ab und steckt diesen wieder an, so bekommt man wieder den bekannten Fehler präsentiert:
 +
 +  gpg: selecting openpgp failed: Kein passendes Gerät gefunden
 +  gpg: OpenPGP Karte ist nicht vorhanden: Kein passendes Gerät gefunden
 +
 +Wie dieser Makel umgangen werden kann, ist im folgenden Artikel beschrieben.
 +==== Variante 2 ====
 +Da es mit unter sehr lästig werden kann, wenn der Stick des öfteren an- und wieder abgesteckt wird, ist im nachfolgenden Kapitel beschrieben in einem Beispiel beschrieben, wie wir das elegant umschiffen können.
 +Um es gleich vorweg zu nehmen, wir unterstellen mal, dass an dem Rechner sich nur ein User aufhält und eben nur dieser auch einen CryptoStick verwendet. 
 +
 +Im Gegensatz zur zuvor beschriebenen //Variante 1// verlagern wir hier das Starten des **//gpg-agent//** in Richtung udev-Regel.
 +=== gpg-agent recycle-script ===
 +Wir legen uns als erstes mal ein **bin**-Verzeichnis im Home-Verzeichnis unseres Users an.
 +   $ mdir ~/bin
 +Dort legen wir uns ein kleines Bash-Script an
 +  $ vim ~/bin/gpg-agent-recycle
 +<file | ~/bin/gpg-agent-recycle>
 +#!/bin/bash
 +# Variablen definieren
 +
 +PID=$(/sbin/pidof -s /usr/bin/gpg-agent)
 +
 +echo "Die PID des gpg-agenten lautet: "$PID
 +
 +echo "Daemon stoppen: "
 +/bin/kill $PID
 +
 +echo "Daemon neu starten: "
 +/usr/bin/gpg-agent --daemon --use-standard-socket
 +</file>
 +Im Anschluss statten wir nun noch das Script(chen) mit **x**-Rechten aus.
 +   $ chmod +x ~/bin/gpg-agent-recycle
 +Damit nun neben dem richtigen Treiber/Programm auch noch gleich passend unser gpg-agent gestartet werden kann oder eben dieser neu gestartet werden kann, legen wir uns noch eine geeignete udev-Regel an.
 +   $ vim /etc/udev/rules.d/40-cryptostick.rules
 +<file | /etc/udev/rules.d/40-cryptostick.rules>
 +# django: 2011-07-20
 +# udev-Regel für CryptoStick der GPF
 +ATTR{idVendor}=="20a0", ATTR{idProduct}=="4107", ENV{ID_SMARTCARD_READER}="1", ENV{ID_SMARTCARD_READER_DRIVER}="gnupg", RUN+="/bin/su -c /home/django/bin/gpg-agent-recycle django"
 +</file>
 +Darin passen wir natürlich den Usernamen, in dem hier gezeigten Beispiel **django** unseren Bedürfnissen nach an.
 +
 +Nun können wir unseren Cryptostick an- und abstecken, der Stick kann mit Hilfe des gpg-agenten immer angesprochen werden. So brauchen wir den Stick z.B. nur anstecken, wenn wir in Thunderbird eine Nachricht signieren oder entschlüsseln wollen.
 +
 +===== Cryptostick im Windows-Umfeld =====
 +Den Umgang mit dem CryptoStick im Windowsumfeld, im speziellen unter XP, widmet sich ein separates [[centos:cryptos-win|Kapitel]].
 +
 +===== Praxisbeispiele rund um den Cryptostick  =====
 +Für die einzelnen Anwendungsfälle, gibt es auf den nachfolgenden Seiten ausführliche Beispiele:
 +  * **[[centos:cryptos-manag|Kartenverwaltung]]** \\ An Hand eines Beispieles wird erklärt, wie die User- und Admin-PIN verändert werden kann. Weiter wird beschrieben, wie die Schlüsselgenerierung erfolgen kann. Alternativ dazu wird auch auf eine **GUI** zur Kartenverwaltung eingegangen.
 +  * **[[centos:cryptos-use1|PGP in der Praxis]]** \\ Im Detail wird der Umgang beim Signieren, Verschlüsseln und Entschlüssen von Daten mit Hilfe des Cryptosticks in einzelnen Beispielen beschrieben.
 +  * **[[centos:cryptos-x.509|X.509 Zertifikat auf dem CryptoStick]]** \\ Wie man ein X.509 Zertifikat am Beispiel eines [[http://cacert.org|CAcert-Zertifikats]] auf den Cryptostick generiert und später auch verwendet ist in diesem Kapitel beschrieben.
 +