X.509 1.0 - Library

Da die EI auf X.509 aufbaut, kann das gesamte Zertifikatgeschehen einschließlich der Verschlüsselungssuiten fertif übernommen werden. Liegt ein X.509-Zertifikat vor, wird dies standardmäßig behandelt, liegt ein EI-Zertifikat vor, kommt die neue Systematik zur Anwendung.

Für X.509/SSL/TLS liegen mit OpenSSL und GnuTLS sehr umfangreiche Bibliotheken vor, die wir jedoch nicht verwenden. Unsere Wahl ist auf Botan gefallen, das eine kompakte und leicht verständliche C++ - Bibliothek ist (wer sich einmal an dem C - Sammelsurium OpenSSL versucht hat, weiß, wovon wir reden).

Die Erweiterung X.509 1.0 -> 2.0 macht es notwendig, in der Botan-Bibliothek Änderungen des Quellcodes vorzunehmen. Der Quellcode ist sehr gut strukturiert und die Änderungen betreffen voraussichtlich nicht allzu viele Quellen, so dass mit Kompare oder einem anderen Vergleichswerkzeug jeweils immer mit dem Original verglichen werden kann. Auch zukünftige neue Versionen der Botan-Bibliothek sind auf diese Weise in das Projekt integrierbar. Der im Projekt verwendete Quellcode steht als ** ZIP-File ** zum Download zur Verfügung, die ** Doxygen-Dokumentation ** ist online verfügbar.

Zum Arbeiten pack das ZIP-Archiv aus und erzeugt mit configure.py eine auf dein/das Zielsystem angepasste Konfiguration. Das Konfigurationsprogramm erfordert einen Python-Interpreter, die in Linux-Systemen standardmäßig vorhanden ist und unter Windows als App kostenlos aus dem Internet installiert werden kann. Anschließend kann die Botan-Bibliothek mit make erzeugt werden. Weitere Hinweise, ob alles korrekt funktioniert hat, findest du in den ReadMe-Dateien oder auf der Botan-Webseite.

Wichtig

configure.py analysiert die Möglichkeiten, die auf einem System zur Verfügung stehen, und enthält sehr viele Optionen zur Aktivierung oder Deaktivierung von Hard- und Software-Optionen. Bitte schaut euch diese Optionen genauer an, wenn ihr auf eurem System auf Probleme stoßt. Da der Code für sehr viele Systeme entworfen wurde, ist es möglich, dass fallweise Warnungen beim Compilieren auftreten. So lange nach einem make - Lauf das Testprogramm alles als korrekt lauffähig einstuft, solltet ihr solche Meldungen nur bedingt ernst nehmen.

Wichtig

Für die Entwicklung ist als Konfigurationsoption “–link-method=symlink” anzugeben (siehe Batch-Datei config_link im Archiv).

Aktuell verwendet: Botan-1.11.32 , die aktuelle Version im Netz ist Botan-1.11-33.

Datenbank

Für die Verwaltung von Zertifikaten und Sessions setzen wir sqlite3 ein. sqlite3 kann als Library oder in Form eines großen Quellcodes ähnlich botan direkt in ein Projekt eingebunden werden. Die im Projekt verwendete Bibliotheksversion kann ebenfalls heruntergeladen werden, eine Doxy-Doku ist ebenfalls zu finden.

Das Tabellenschema ist im Projekt enthalten und kann direkt editiert werden. Für die komfortable Verwaltung der Datenbak kann dbbrowser (ähnlich phpMyAdmin für MySQL) verwendet werden.

Wichtig

Bei der Nutzung der Datenbank ist darauf zu achten, dass in allen Queries variable Eingaben über escape-Funktionen gefiltert werden !!

Programmentwicklung und IDE

Die Einrichtung einer Entwicklungsumgebung stellt nicht selten die Nerven erfahrener Programmierer auf die Probe. Deshalb hier etwas ausführlicher.

Bei der Entwicklung müssen oft auch Teile der Botan-Bibliothek angepasst werden. Deshalb sollten die Botan-Quellen direkt in der IDE eingebunden werden. Zu einem späteren Zeitpunkt kann auch eine statische oder dynamische Lib erzeugt werden, die man nur noch in das Projekt bindet.

Als IDE verwenden wir QtCreator, der für nahezu alle Plattformen verfügbar ist. Wer etwas anderes verwendet, muss erst einmal selbst klar kommen, kann seine Erfahrungen aber gerne im Forum schildern.

  1. Pack die Archive “Botan.zip”, “electronic_identity.zip” oder was immer entwickelt werden soll unter Beibehaltung der Struktur in ein Projektverzeichnis aus. Es enthält dann die Verzeichnisse “Botan”, “Electronic_Identity”, ...

  2. Für den nächsten Schritt muss Python installiert sein. Unter Linux ist das Standard, unter Windows muss ein Paket installiert werden. Damit ist das Programm “”configure.py” auszuführen. Mit der Kommandooption -h erhält man eine lange Liste mit einstellbaren Optionen

    ../../_images/foto-1.png

    Bei den Modulen kann man eine Auswahl treffen, welche eingebunden werden sollen (es ist viel hardwareabhängiges drin). Wichtig für die Entwicklung ist lediglich die Option “–link-method”. Von uns wird beispielsweise dieser Aufruf des Konfigurationsprogramms verwendet:

    ./configure.py --disable-sse2 --disable-ssse3 --disable-avx2 --disable-aes-ni --disable-altivec --disable-shared --link-method=symlink
    
  3. Mit dem Botan-Teil sind wir nach configure.py bereits fertig. Nun kommt der “Electronic_Identity”-Teil. Vermutlich sind die Qt-Konfigurationsdateien *.pro usw. nicht brauchbar, so dass sie gelöscht werden müssen und man ein Projekt neu aufsetzen muss. Notfalls erzeugt man ein leeres Non-QT-C++-Project, und kopiert alles aus dem ausgepackten Archiv hinüber.

    ../../_images/foto-2.png

    Anschließend wird über “vorhandene Dateien/Verzeichnisse hinzufügen” in das Projekt eingebunden.

  4. Nun werden die Botan-Quellen eingebunden. Das erfolgt in zwei Schritten:

    1. Das Verzeichnis “Botan/build/include/botan” enthält sämtliche Header als Symlinks und wird komplett importiert. Wichtig! Es müssen Symlinks sein, damit bei späteren Änderungen auch alles an der richtigen Stelle steht. Wenn es keine Symlinks sind (kontrollier das), fang besser noch mal mit Teil 2. an.
    2. Aus dem Verzeichnis “Botan/src/lib” und seinen Unterverzeichnissen werden nur die *.cpp-Dateien importiert. Dazu muss im Importmenü ein Filter definiert und aktualisiert werden. Es dürfen nur die CPP-Dateien importiert werden, da die Header bereits im Schritt 4.a importiert wurden.

    Das IDE-Fenster sieht dann etwa so aus:

../../_images/foto-3.png
  1. An den Quellcode der sqlite-Datenbank müssen wir nicht heran. Sie kann daher

    • als Library aus dem Systemrepository (zumindest unter Linux möglich),
    • als Library, die aus den sqlite-Quellen erzeugt wurden (ist auf der sqlite-Homepage beschrieben), oder
    • direkt als Quellcode

    eingebunden werden. Wir beschreiben hier die letzte Option. Dazu packt man das sqlite-Archiv wiederum in ein eigenes Verzeichnis aus, was auch die Möglichkeit eröffnet, selbst eine Library sowie ein command-line-Interface zu erzeugen. In das Projekt werden die Dateien sqlite.h und sqlite.c eingebunden, die den kompletten Code in einer Datei enthalten (siehe sqlite-Homepage). Da die Dateien sehr groß sind, sollte man es vermeiden, sqlite.c zu öffnen, weil zumindest der Qt-Editor damit nicht so gut klar kommt (beispielsweise beim Debuggen nicht in sqlite-Methoden verzweigen).

  2. Als nächstes ist “Electronic_Identity.pro” anzupassen. Es werden einige Compilereinstellungen benötigt, zusätzlich muss bei jedem Compilerlauf die Datei “build.h” zwangsweise eingebunden werden. Sie enthält wichtige Konfigurationsdaten, ist aber in den Dateien nicht als Header-include vorhanden. Die Details für Linux sehen so aus (g++ Compiler; wer etwas anderes verwendet, schlage bitte die Compilerflags des g++ nach und übersetze sie auf sein System):

    TEMPLATE = app
    CONFIG += console
    CONFIG += c++11
    CONFIG -= app_bundle
    CONFIG -= qt
    CONFIG += object_parallel_to_source
    
    QMAKE_CXXFLAGS += -std=c++11
    QMAKE_CXXFLAGS += -pthread
    QMAKE_CXXFLAGS += -I/home/user/Projekte/Botan/build/include
    QMAKE_CXXFLAGS += -include ../Botan/build/build.h
    
    QMAKE_LIBS += -lpthread
    QMAKE_LIBS += -ldl
    
  1. Compiliere nun das Projekt. Je nach Einstellungen im Konfigurationsschritt von Botan werden .cpp-Dateien gefunden, zu denen der Compiler keine (gleichnamigen) .h-Dateien findet. Löscht diese Dateien aus dem Projekt raus (WICHTIG! Nur aus dem Projekt, nicht komplett löschen, denn sonst funktioniert Botan mit anderen Einstellungen bei der KOnfiguration nicht mehr).

    Wenn der Compiler nicht mehr meckert, könnt ihr mit der Programmentwicklung anfangen.

  2. Für den Umgang mit sqlite-Datenbanken ist ein Datenbankbrowser recht hilfreich. Als Stand-Alone-App bietet sich “DB Browser for Sqlite” an; im Firefox-Browser kann ein Sqlite-Manager als AddOn installiert werden.

In der Regel sollte man das System in 20 Minuten lauffähig haben, wenn man Qt bereits kennt. Newcomer brauchen etwas länger, ein anderes OS als Linux macht sicher auch etwas mehr Aufwand, und die Verwendung einer anderen IDE ebenfalls.

Modifikationen in der Botan-Library

Bei der Entwicklung stellte sich uns die Frage, wo etwas dokumentiert werden sollte. Dabei stellte sich schnell heraus, dass jede Dokumentation außerhalb der Quellen schneller überrollt wird als ein Kaninchen vom ICE. Wir haben die Dokumentation daher auf die Quellen beschränkt. Wer schnell etwas finden will, kann über Kompare die Standard-Lib mit der EI-Version vergleichen; der Rest findet sich, wenn man mit den Projektcodes der einzelnen Anwendungen arbeitet.

[1]Wer das realisiert, beschreibe diese bitte im Forum.