= Chipkarten-Leser =

Chipkarten werden für verschiedene Zwecke eingesetzt. Zumeist
handelt es sich um Identitätsnachweise durch Karten mit
Verschlüsselungsfunktion (HBCI-Karte, Pay-TV-Karte), oder
Guthabenkarten (Geldkarte, Telefonkarte) aber auch Speicherkarten
mit einigen Kilobyte Daten (Krankenkassen-Karte) sind erhältlich.
Meine eigene Intention war die Nutzung von OpenHBCI, um HomeBanking
damit zu betreiben.

Die Grundlage, um Chipkarten unter Linux lesen zu können, ist die
[http://www.libchipcard.de libchipcard]. Auf deren Homepage steht
auch eine Liste der unterstützten Kartenleser. Ich habe bisher
Erfahrung mit folgenden Geräten, die bei mir gut liefen:

* [http://www.towitoko.de Towitoko] Chipdrive micro (serieller
Anschluss mit Stromversorgung über PS/2-Stecker)

Die Bibliothek unterstützt serielle und USB-Leser und hat auch
Unterstützung für Klasse-2-Leser (mit Tastatur zur PIN-Eingabe).
''(Erst Klasse-2-Leser bieten die 100%ige Sicherheit z.B. bei
HomeBanking per HBCI)''.

== Installation ==

Das Problem mit nicht getesteten Chipkarten-Lesern ist, daß es
einen (unter Linux lauffähigen) Hardware-Treiber geben muss, der
eine sog. CT-API Schnittstelle zur Verfügung stellt. Für
Towitoko-Geräte findet sich ein solcher Treiber Opensource unter
http://www.geocities.com/cprados/. Also vor dem Kauf eines neuen
Lesers eventuell dort mal nachsehen, welche Geräte unterstützt
werden.

Unter Debian-Linux habe ich nun insgesamt die folgenden Pakete
installiert:

  apt-get install libtowitoko2 chipcard-tools libchipcard20
libchipcard-doc

== Konfiguration ==

Auf der Webseite http://www.libchipcard.de gibt es auch
Konfigurations- und Anzeigeprogramme für KDE. Leider sind diese
nicht als Debian-Paket verfügbar. Deshalb habe ich es von Hand
gemacht. Dafür habe ich in der Datei
''/etc/libchipcard/libchipcardd.conf'' folgende Änderungen
vorgenommen:

  enabled="1"
  port="COM1"     (mein Leser sitzt an der ersten seriellen
Schnittstelle)

Danach habe ich mit ''/etc/init.d/chipcard-tools restart'' den
Chipcard-Server neu gestartet.

Nun kann man z.B. eine Geldkarte nehmen (hat wohl jeder in Form der
EC-Karte, eignet sich also gut zum testen) und mit '''geldkarte
loaded''' den enthaltenen Betrag ansehen. Wer keine Geldkarte hat,
kann auch eine Krankenkassen-Karte mit ''memcard read -s 128''
lesen. In dem Zeichensalat sollte der Name der Krankenkasse
auftauchen.  Wer soweit ist, hat auch schon gewonnen.

== Probleme ==

Bei Schwierigkeiten lohnt sich ein Blick mit ''dpkg -L
chipcard-tools'', welche Programme alle mitgeliefert werden. Dabei
ist auch z.B. ''readertest'', mit dem man den Reader ohne den
Server testen kann (nicht vergessen, diesen vorher zu beenden) oder
auch ''ctfstool'', mit dem man Speicherkarten lesen und schreiben
kann.

Unter Umständen kann es auch einfacher sein, die graphischen
Konfigurationsprogramme zu benutzen. Bis man diese unter Debian
selbst kompiliert hat, hat man IMHO jedoch schneller die
Kommandozeilentools "besiegt". Wer eine andere Distribution hat,
kann jedoch mal nach ''<nowiki>KCardSetup</nowiki>''
suchen und dieses benutzen.

-- ThomasBayen

= aktuelle (Ende 2007) Installation mit Netzwerkzugriff =

Ich habe mit einer neuen Installation ein wenig herumexperimentiert, weil ich den Chipkarten-Reader an einen anderen Rechner (einen ThinClient) anschliessen wollte, als den, auf dem die Applikation läuft. Das lief recht gut, half mir aber letztlich nicht, weil die von mir verwendete HBCI4Java-Bibliothek nicht den chipcardd benutzt, sondern direkt auf den Kartenleser zugreift. Dennoch wollte ich die gewonnenen Erkenntnisse hier festhalten:

== Chipkarten-Zugriff ==

Die Chipkarte soll, wenn möglich, nicht an diesem Rechner angeschlossen werden müssen. Erstens handelt es sich um ein virtuelles System im XenServer und zweitens soll die Chipkarte ja nicht am Server, sondern am Arbeitsplatz eingesteckt werden können.

=== Chipkarten-Server ===

Dies ist der Rechner, an dem das Chipkarten-Terminal hängt. Hier habe ich folgendes installiert:

  aptitude install libchipcard2-tools libtowitoko2

(letzteres ist der Treiber zu meinem konkreten Chipkarten-Terminal der Firma [http://www.chipdrive.de/cgi-bin/edcstore.cgi Towitoko]). Ich habe allerdings auch mit einem Reinert SCT experimentiert, der auch klaglos lief.

Um den Reader jetzt einzubinden, kann eine Zeile wie diese nötig sein: 

chipcardd2 addreader -C /etc/chipcard2-server/chipcardd2.conf --dtype tow_ctapi --rtype tow_cdm --rname towitoko --rport COM1

Viele (insbesondere USB-)Reader sollen aber auch von selbst erkannt werden (So auch mein serieller, wenn er über einen USB-RS232-Wandler angeschlossen ist, weshalb obige Zeile dann nicht nötig ist). Mit den Befehlen

  chipcard-tool list
  chipcard-tool check

kann man anzeigen, welche Reader die Client-Bibliothek erkennen kann und ob der Reader auch wirklich angesprochen werden kann. Bei Problemen mit der Einrichtung von neuen Readern oder anderem hilft ein Blick auf http://www.libchipcard.de .

Nachdem der Reader nun erstmal grundsätzlich erkannt wird, will ich ihn im Netzwerk freigeben. Dazu füge ich folgendes in ''/etc/chipcard2-server/chipcardd2.conf'' ein:

  server {
    typ="public"
    addr="192.168.1.8"
    port="55555"
  } # server


=== Chipkarten-Client ===

  aptitude install libchipcard2-tools

Hier kann in ''/etc/chipcard2-server/chipcardd2.conf'' die '''enabled'''-Einstellung auf '''0''' gesetzt werden, da wir auf diesem System nur den Client benötigen.

Nun kommt in die Datei ''/etc/chipcard2-client/chipcardc2.conf'' der gleiche "server"-Block wie oben auf dem Server. Das war es dann auch schon. Man sollte zur Absicherung noch mit SSL und Authentifizierung durch Zertifikate arbeiten, was aber vielleicht nicht immer nötig ist, wenn man nur verschlüsselte oder virtuelle Netzwerke sowie eine gute Firewall benutzt.

Um nun testweise auf meine HBCI-Karte zugreifen zu können, habe ich folgendes gemacht:

  aptitude install libgwenhywfar38-dev libchipcard2-libgwenhywfar38-plugins
  gct-tool showuser -t ddvcard

Nun muss man die PIN seiner Karte bereithalten und kann einige Userdaten wie den Namen seiner Bank und seine Kundennummer lesen. Das sollte reichen, um die libchipcard für funktionsfähig zu erklären.

=== Verschlüsselung ===

Der chipcardd bietet auch die Möglichkeit, die Verbindung zum Server SSL-verschlüsselt aufzubauen. Dies habe ich nicht getestet, empfehle es im richtigen Betrieb aber dringend, weil der Einsatz einer Chipkarte ja meinstens bedeutet, daß man es mit der Sicherheit ernst nehmen will. Soweit ich die Protokolle verstanden habe, ist Verschlüsselung übrigens nicht unbedingt nötig, wenn man HBCI mit einem Klasse-2-Leser nutzen will (also mit Eingabe der PIN an einem Pinpad auf dem Leser). 

-- ThomasBayen

== Links ==

* http://www.opencard.org - alternativer API-Standard, bisher in Java
* http://www.openscdp.org - Enthält u.a. einen CT-API-Treiber für Opencard

[{Tag Hardware}]