Die “Electronic Identity”-Zentralanwendung

Generelles

Die Zentralanwendung umfasst alle Erweiterungsteile zum X.509-Zertifikatmanagement. Sie umfasst

  • Die Erzeugung und Auslieferung von eigenen EI-Zertifikaten
  • Verwaltung von fremden EI-Zertifikaten
  • Bestätigung eigener Zertifikate gegenüber Kommunikationspartnern
  • Kontrolle der Echtheit fremder Zertifikate
  • Aktualisierung von Zertifikat-Generationen bei Kommunikationspartnern

Für die Anbindung der Zentralanwendung an bestehende Anwendungen, die ohne Sicherheit oder nach dem X.509-Standard arbeiten, sind spezielle AddOns notwendig, die separat beschrieben werden.

Wichtig

Der Quellcode ist Baustelle, d.h. er sieht auch so aus. Er enthält Testcode oder Bruchstücke, die in die weitere Entwicklung integriert werden oder wieder verschwinden. Du erhälst einen echten Einblick in die Werkstatt und nicht nur ein geschöntes Endprodukt.

Auf Versionskontrolle usw. haben wir (vorläufig) verzichtet. So viele Leute arbeiten nicht koordiniert an dem Projekt, dass das sinnvoll sein würde.

Hier der aktuelle Quellcode zum Herunterladen sowie die Doxygen-Dokumentation . Die Erstellung einer verständlichen Dokumentation, die die Nutzung des Codes für eigene Projekte erlaubt, ist verständlicherweise ein Spagat. Für den Entwickler ist vieles selbstverständlich, was sich dem Betrachter auf den ersten Blick entzieht.

Für das Programm gibt es zwei Dokumentationsstränge:

  1. dieses Internetdokument und
  2. die direkte Quellcode-Dokumentation (auch in der Doxygen-Dokumentation enthalten).

Wichtige Teile der Zusammenhänge werden im Internetdokument beschrieben, Details in den Quellen (wobei einiges dort auch wiederholt wird, wenn es für das Verständnis einer Klasse sinnvoll/wichtig ist). Möglicherweise bleiben aber auch nach Konsultation beider Dokumentationsstränge noch kleinere Unklarheiten bestehen. Mach uns bitte darauf aufmerksam, wie wir die Dokumentation verbessern können ( Forum )

Grunddesign des Zentralmanagements

Das Projekt umfasst sämtliche Klassen des Zentralmanagements. Je nach Anwendungsfall müssen daraus bestimmte Programme konfiguriert werden, beispielsweise:

  • Das Zertifikatmanagement mit Datenbank und Anwenderschnittstelle sowie APIs für die Kommunikation mit anderen Anwendungen.
  • Proxy mit oder ohne direkte Datenbankanbindung
  • Lokale EI-Netzwerke mit nur rudimentärer Kopplung an andere Funktionen
  • ...

Im Projekt wird auf eine integrierte GUI verzichtet, was die Portierung zwischen Systemen erleichtert und unabhängig von bestimmten GUI-Konventionen macht. Die APIs zur Managementanwendung sind (in der Regel) Sockets, GUI-API zum Nutzer ein Browser.

Die “Konfektionierung” der Anwendung erfolgt in der main-Funktion. Der Aufbau ist sinngemäß (die genauen Details entnehme man dem Quellcode):

int main()
{
    try
    {
        ManagerBase mb;
        TCP_Server server(8888, mb, true);
        ...
        server.start();
        ...
        eval_statistics(3600);
    }
    catch(std::exception& e)
    {
        cout << "a fatal exception occurred: " << e.what() << ", application terminated" << endl;
    }
    return 0;
}

Von der Basisklasse ManagerBase werden spezielle Arbeitsklassen abgeleitet, beispielsweise eine HTML-GUI als Nutzerschnittstelle. Je nach Aufgabenumfang der speziellen Anwendung erzeugt man entsprechend viele ManagerBase-Objekte sowie Server- oder Client-Objekte für die Socket-Verbindungen nach außen und bindet die ManagerBase-Objekte an die Verbindungsobjekte. Dabei kann ein ManagerBase*-Objekt an mehrere Verbindungsobjekte gebunden werden. Die vollständigen Arbeitsobjekte werden anschließend gestartet, den Abschluss bildet eine Bewertungsfunktion der Datenbankinhalte, die sich als Endlosschleife in den angegebenen Zeitabständen aktiviert.

Sowohl ManagerBase als auch Verbindungsobjekte linken automatisch weítere benötigte Objekte hinzu. Ggf. sind weitere Einstellungen über #define-Direktiven notwendig (um beispielsweise ohne Datenbank zu arbeiten und Funktionen aus dem Ausführungscode heraus zu halten). Da auch inkompatible Zusammenstellungen von Objekten und Daten u.U. erfolgreich kompilieren können, wird in den Initialisierungen jeweils geprüft, ob mit der Konfiguration erfolgreich gearbeitet werden kann. Falls dies nicht der Fall ist, wird eine Ausnahme mit entsprechenden Hinweisen geworfen.

Design der Arbeitsobjekte