bernhard@1080: ===================
bernhard@1080: Technische Referenz
bernhard@1080: ===================
emanuel@903: 
emanuel@903: 
emanuel@976: Welche Zertifikatsspeicher werden verwendet?
emanuel@976: ============================================
emanuel@903: 
emanuel@903: Damit Zertifikaten in Anwendungen (wie z.B. Browser oder E-Mail-Klient)
emanuel@903: vertraut werden kann, müssen die zugehörigen Wurzelzertifikate in den passenden
emanuel@903: Zertifikatsspeichern des Systems installiert werden.
bernhard@1052: TrustBridge übernimmt diesen Zugriff auf die Zertifikatsspeicher.
emanuel@903: 
emanuel@976: Es gibt zwei gängige Zertifikatsspeicher, die von TrustBridge und den meisten
emanuel@976: Anwendungen unterstützt werden:
emanuel@976: 
emanuel@976: * der Mozilla NSS-Zertifikatsspeicher ("Network Security Services") und 
emanuel@976: * der Windows-System-Zertifikatsspeicher.
emanuel@903: 
emanuel@903: 
emanuel@903: Chrome bzw. Chromium verwendet unter Windows den Windows-System-Speicher und unter
emanuel@903: Ubuntu den NSS-Zertifikatsspeicher. Die nachfolgende Abbildung veranschaulicht 
emanuel@903: die verwendeten Zertifikatsspeicher unter Windows und GNU/Linux.
emanuel@903: 
emanuel@903: .. figure:: _static/stores.png
emanuel@903:    :width: 100%
emanuel@903:    :alt: Übersicht der Zertifikatsspeicher
emanuel@903: 
emanuel@903:    *Abbildung 1: Übersicht der Zertifikatsspeicher*
emanuel@903: 
emanuel@903: Windows-Zertifikatsspeicher
emanuel@903: ---------------------------
emanuel@903: 
emanuel@976: Der Windows 7 und 8 Zertifikatsspeicher kann in drei große Gruppen aufgeteilt werden:
emanuel@976: 
emanuel@976: #. Zertifikate des aktuellen Benutzers
emanuel@976: #. Zertifikate für alle Benutzer (Lokaler Computer)
emanuel@976: #. Zertifikate für Systemdienste
emanuel@976: 
emanuel@976: Diese Gruppen unterteilen sich wieder in eine Reihe von logischen Speichern.
emanuel@976: 
emanuel@976: Für die Installation von vertrauenswürdigen Wurzelzertifikaten ist der
emanuel@976: logische *Root*-Speicher relevant. Nur dort eingetragene Zertifikate
emanuel@976: werden als *Trust Anchor* (Vertrauensanker) angesehen und zur
emanuel@976: Validierung des Vertrauenspfads zu den weiteren Zertifikaten
emanuel@976: verwendet.
emanuel@976: 
emanuel@976: Der logische *Disallowed*-Speicher hat immer Vorrang. Befindet sich ein Zertifikat
emanuel@976: sowohl im *Root* als auch im *Disallowed*-Speicher, gilt es als nicht vertrauenswürdig.
emanuel@976: 
emanuel@976: 
emanuel@976: **Einschränkungen:** 
emanuel@976: Um unbefugte Manipulationen am Zertifikatsspeicher zu verhindern, werden von Microsoft
emanuel@976: seit Windows XP SP2 folgende Schutzmaßnahmen vorgesehen:
emanuel@976: 
emanuel@976: #. Um Zertifikate für alle Benutzer des lokalen Computers zu
emanuel@976:    bearbeiten, sind erhöhte Privilegien (Administrationsrechte)
emanuel@976:    erforderlich.
emanuel@976: #. Änderungen (Löschen / Hinzufügen von Zertifikaten) am
emanuel@976:    *Root*-Speicher des aktuellen Nutzers erfordern die explizite
emanuel@976:    Einwilligung des Nutzers (siehe nachfolgende Abbildung), sofern der
emanuel@976:    Prozess keine erhöhten Privilegien besitzt.
emanuel@976: 
emanuel@976: 
emanuel@976: .. figure:: _static/sicherheitswarnung.png
emanuel@976:    :alt: Windows-Sicherheitswarnung 
emanuel@976: 
emanuel@976:    *Abbildung 2: Sicherheitswarnung beim Hinzufügen eines Wurzelzertifikats ohne Administrator-Rechte*
emanuel@903: 
emanuel@903: 
emanuel@903: 
emanuel@976: Mozilla NSS-Zertifikatsspeicher
emanuel@976: -------------------------------
emanuel@976: Die Mozilla-Anwendungen Thunderbird und Firefox, sowie Chromium unter
emanuel@976: Ubuntu, verwenden die Mozilla "Network Security
emanuel@976: Services" (NSS) Zertifikatsspeicher. 
emanuel@976: 
emanuel@976: Mozilla liefert den NSS-Zertifikatsspeicher mit einer Auswahl von
emanuel@976: voreingesetllten vertrauenswürdigen bzw. nicht
emanuel@976: vertrauenswürdigen Zertifikaten aus.
emanuel@976: 
emanuel@976: **Einschränkungen:**
emanuel@976: 
emanuel@976: * Anwendungen, die den NSS-Zertifikatsspeicher verwenden, sollten vor dem Zugriff geschlossen
emanuel@976:   werden.
emanuel@976: * Um den NSS-Speicher anderer Nutzer zu manipulieren, sind erhöhte Rechte nötig.
emanuel@976: * Um den NSS-Standard für neue Profile vorzugeben, sind abhängig vom Installationsort 
emanuel@976:   ggf. erhöhte Rechte nötig.
emanuel@976: 
emanuel@976: 
emanuel@976: 
emanuel@976: Wie wird der Transport abgesichert?
emanuel@976: ===================================
emanuel@976: TrustBridge sucht regelmäßig (alle 24 Stunden) auf dem offiziellen TrustBridge-Update-Server
emanuel@977: nach aktualisierten Zertifikatslisten und neuen Softwareversionen. 
emanuel@976: 
emanuel@976: Sämtliche Transportprozesse sind kryptografisch nach aktuellem Stand
emanuel@976: der Technik gegen unbefugte Manipulationen (Authentizität und
emanuel@977: Integrität) gesichert. Es gibt drei Transportwege, die abgesichert
emanuel@977: werden müssen:
emanuel@976: 
emanuel@976: #. Verfügbarkeit von Aktualisierungen prüfen:
emanuel@977:    Die regelmäßige Übertragung der Information, ob neue Aktualisierungen
emanuel@1005:    von Zertifikatsliste oder Software verfügbar sind, wird über eine
emanuel@977:    HTTPS-Verbindung per TLS 1.2 (mit ECDSA brainpoolP256r1) durchgeführt.
emanuel@976: #. Zertifikatslisten-Update durchführen:
emanuel@976:    Ist eine neue Zertifikatsliste verfügbar, wird die ganze Liste
emanuel@977:    gebündelt übertragen. Die Zertifikatslistendatei ist signiert (RSA 3076). 
emanuel@976:    Vor einem Zertifikatslisten-Update wird sichergestellt, dass TrustBridge bereits in der
emanuel@976:    neusten Version installiert ist.
emanuel@976: #. Software-Update durchführen:
emanuel@976:    Ist eine neue TrustBridge-Version verfügbar, kann diese mit einem
emanuel@976:    Klick auf eine entsprechende Meldung heruntergeladen und installiert
emanuel@977:    werden. Es wird eine vollständige TrustBridge-Installationsdatei übertragen 
emanuel@976:    und im Hintergrund ausgeführt. Jede Software-Installationsdatei ist signiert.
emanuel@976:    Bei Fehlschlagen der Signaturprüfung (z.B. durch fehlerhaftes
emanuel@976:    Herunterladen) wird TrustBridge nicht aktualisiert. 
emanuel@976: 
emanuel@976: 
emanuel@976: 
emanuel@976: Wie sieht das Datenformat einer Zertifikatsliste aus?
emanuel@976: =====================================================
emanuel@976: 
emanuel@976: Die Zertifikatsliste ist eine einzelne Text-Datei, welche von der
emanuel@976: TrustBridge-Verwaltungsanwendung erzeugt wird. Diese Datei enthält
emanuel@976: alle benötigten Informationen und basiert auf einer zeilenbasierten
emanuel@976: Textformat. Dabei bleibt die Struktur für Menschen lesbar und die
emanuel@976: meisten Inhalte können mit Standardwerkzeugen sowohl de- als auch
emanuel@976: enkodiert werden.
emanuel@976: 
emanuel@976: In der ersten Zeile der Datei ist die Base64-kodierte, kryptografische
emanuel@976: Signatur über alle folgenden Zeilen (inklusive der Zeilenenden)
emanuel@976: angegeben. So wird die Integrität und Authentizität dieser Daten vor
emanuel@976: der Verarbeitung gesichert.
emanuel@976: 
emanuel@976: Einzelne Zeilen haben das Format ``<Buchstabe>:<Wert><CR><LF>``, wobei
emanuel@976: der Buchstabe angibt, welche Art von Wert folgt. Die Länge der Zeilen
emanuel@976: ist (für Version 1) auf 9999 Zeichen begrenzt, inklusive der beiden
emanuel@976: Zeichen für Zeilenenden.  Die Anzahl der Zeilen ist auf 1000
emanuel@976: beschränkt, was einer Dateigröße von maximal 10 Megabyte entspricht.
emanuel@976: (In der Praxis wird die Dateigröße aber deutlich unter 100 Kilobyte
emanuel@976: liegen.) Der Text wird in 7Bit-ASCII kodiert.
emanuel@976: 
emanuel@976: Die Zertifikate selbst werden als Base64- und DER-kodierte Daten
emanuel@976: aufgeführt. Dies entspricht dem Inhalt gängiger .pem-Dateien - jedoch
emanuel@976: ohne den umschließenden BEGIN CERTIFICATE und END CERTIFICATE sowie
emanuel@976: ohne den Zeilenumbrüchen.
emanuel@976: 
emanuel@976: Jede Zeile muss mit einem der folgenden gültigen Buchstaben beginnen:
emanuel@976: 
emanuel@976: * ``S:`` Die Signatur der Zertifikatsliste.
emanuel@976: * ``F:`` Format-Version
emanuel@976: * ``D:`` Zeitpunkt der Listenerstellen (UTC)
emanuel@976: * ``I:`` Zu installierendes Zertifikat
emanuel@976: * ``R:`` Zu entfernendes Zertifikat
emanuel@976: 
emanuel@976: 
emanuel@976: Im Folgenden ein Beispiel für den Aufbau der Zertifikatslisten-Datei
emanuel@976: mit zwei zu installierenden Zertifikaten und einem zu löschenden
emanuel@976: Zertifikat. Die Signatur- und Zertifikatszeilen sind, aus Gründen der
emanuel@976: Übersichtlichkeit, in diesem Beispiel gekürzt:
emanuel@976: 
emanuel@976: .. parsed-literal::
emanuel@976:     S:EjzX0sTkstnnGbPIC7n1a5WlYCFsthPl8OYplLyihR1RdqcUsSnikrVowFo8QgpMutcz0...
emanuel@976:     F:1
emanuel@976:     D:2014-01-03T12:30Z
emanuel@976:     I:MIIEiTCCA3GgAwIBAgIDAWn+MA0GCSqGSIb3DQBQUAMEAxCzAJBVBAYTAlVTMRcwFQYDV...
emanuel@976:     I:MIIHojCCBoqgAwIBAgIDAW96MA0GCSqGSIb3DQEBBQUAGMMQswCDVQQGEwJJTDEWMBQGA...
emanuel@976:     R:MIIGUjCCBTqgAwIBAgIODocAAQACqS54FrSbGvYwDQKoZIhvcNAQBQAwfDELMAkGA1UEB...
emanuel@976: