Certificate Pinning: Was es ist, Methoden der Zertifikatsbindung und wie man es implementiert

Autor: IT Sectr Veröffentlicht: 2026-04-02 Lesezeit: 8 Min.

Certificate Pinning ist eine Sicherheitstechnik, bei der eine mobile Anwendung prüft, ob das Serverzertifikat mit einem vorab bekannten Muster übereinstimmt, anstatt einfach jedem Zertifikat aus der CA-Kette zu vertrauen. Im Gegensatz zur normalen TLS-Prüfung, die sich auf Hunderte von Zertifizierungsstellen stützt, schränkt Pinning das Vertrauen auf ein einziges bestimmtes Zertifikat oder dessen öffentlichen Schlüssel ein. Laut dem OWASP Mobile Security Testing Guide (2024) blockiert die Implementierung von Certificate Pinning 100% der Man-in-the-Middle-Angriffsszenarien im Zusammenhang mit Zertifikatsaustausch. OWASP MSTG, 2024

Wichtigste Erkenntnisse

  • Certificate Pinning ist eine Technik zur festen Bindung einer App an ein bestimmtes Serverzertifikat oder einen öffentlichen Schlüssel.
  • Public Key Pinning ist die flexibelste und sicherste Methode, die kein App-Update bei Zertifikatswechsel erfordert.
  • Unterschied zu TLS — normales TLS vertraut jedem CA; Pinning fügt eine zweite Prüfebene für ein bestimmtes Zertifikat hinzu.
  • Sperrrisiko — bei falscher Zertifikatsaktualisierung kann die App die Verbindung zum Server verlieren, bis eine neue Version veröffentlicht wird.
  • OkHttp und TrustKit sind die beliebtesten Bibliotheken zur Implementierung von Pinning auf Android bzw. iOS.

Was ist Certificate Pinning?

Certificate Pinning ist ein Sicherheitsmechanismus, bei dem die Anwendung ein Muster des Serverzertifikats speichert (oder „pinnt“) und bei jeder Verbindung das empfangene Zertifikat mit diesem Muster vergleicht. Stimmt das Zertifikat nicht überein — wird die Verbindung abgebrochen, selbst wenn es offiziell von einer vertrauenswürdigen Zertifizierungsstelle signiert ist. Dies schützt vor Angriffen, bei denen ein Angreifer über eine kompromittierte CA ein gefälschtes Zertifikat erhält (wie es 2011 bei DigiNotar oder 2011 bei Comodo geschah).

Wie Zertifikatsbindung funktioniert

Der Pinning-Prozess besteht aus drei Phasen: Extrahieren eines Fingerabdrucks (Fingerprint) des Zertifikats oder öffentlichen Schlüssels aus einer vertrauenswürdigen Instanz; Speichern dieses Fingerabdrucks im Anwendungscode oder in Ressourcen; Vergleich während des TLS-Handshakes. Der Entwickler kann den SHA-256-Fingerabdruck des gesamten Zertifikats oder nur des öffentlichen Schlüssels (Public Key Pinning) pinnen. Der zweite Ansatz ist vorzuziehen: Bei der Zertifikatserneuerung bleibt der öffentliche Schlüssel oft derselbe, und die App verliert nicht die Verbindung zum Server. Nach OWASP-Empfehlungen beträgt die minimale Pin-Anzahl 2: ein aktueller und ein Backup-Pin für die Schlüsselrotation. Moderne Bibliotheken wie OkHttp und TrustKit automatisieren den Prozess der Überprüfung angegebener Pins bei jeder TLS-Verbindung ohne zusätzlichen Aufwand für den Entwickler. Es ist wichtig zu verstehen, dass Pinning die standardmäßige TLS-Prüfung nicht ersetzt, sondern ergänzt: Zuerst wird ein normaler Handshake mit Zertifikatskettenvalidierung durchgeführt, dann eine zusätzliche Pinning-Prüfung. Dieser zweistufige Schutz beseitigt Schwachstellen im Zusammenhang mit CA-Kompromittierung, einschließlich Fällen fehlerhafter Zertifikatsausstellung und Angriffen auf die Infrastruktur von Zertifizierungsstellen.

Arten von Certificate Pinning

Es gibt mehrere Ansätze zur Implementierung von Certificate Pinning, jeder mit eigenen Speicher- und Prüfmerkmalen. Die Methodenauswahl hängt von der Anwendungsarchitektur, der Zertifikatsaktualisierungshäufigkeit und den Flexibilitätsanforderungen ab.

Pinning-TypWas wird gespeichertFlexibilitätAnwendungsbeispiel
Certificate PinningVollständiges X.509-ZertifikatNiedrigFestes Zertifikat für 1–2 Jahre
Public Key PinningÖffentlicher Schlüssel (SPKI)MittelVon OWASP empfohlener Ansatz
Hash PinningSHA-256-FingerabdruckMittelBeliebt in OkHttp (certificatePinner)
CA PinningZwischen-CAHochUnternehmensanwendungen

Die ausgewogenste Methode ist Public Key Pinning, empfohlen von OWASP und Google. Anstatt eines bestimmten Zertifikats (das alle 1–2 Jahre wechselt) speichert die Anwendung den SubjectPublicKeyInfo-Fingerabdruck — eine Abstraktion des öffentlichen Schlüssels. Wird das Zertifikat mit demselben Schlüssel erneuert (Key Reuse), bleibt der Pin gültig. Ändert sich der Schlüssel — fügt der Entwickler vorab einen Backup-Pin im Anwendungsupdate hinzu. In mobilen Projekten wird eine Min/Max-Pin-Strategie verwendet: mindestens 2 Pins inklusive Backup und maximal 4, um Aufblähung und erhöhte Prüfzeit zu vermeiden.

Strategie zur Auswahl des Pinning-Typs

Die Wahl des spezifischen Pinning-Typs hängt von der Anwendungsarchitektur und den Anforderungen ab. Für öffentliche mobile Anwendungen, die mit REST API über eine einzelne Domain arbeiten, ist Public Key Pinning mit zwei Pins über OkHttp oder TrustKit optimal. Für Unternehmensanwendungen mit eigener Zertifizierungsstelle ist CA Pinning geeignet — es erfordert keine Aktualisierung bei Änderung von Client-Zertifikaten, da das Vertrauen an die CA gebunden ist, nicht an das Endzertifikat. Für IoT- und eingebettete Systeme wird Certificate Pinning mit vollständiger Zertifikatspinnung empfohlen: Geräte werden selten aktualisiert, daher ist die Kontrolle über die gesamte Vertrauenskette entscheidend. Die Überwachung von Pin-Ablaufdaten ist zwingend erforderlich: Richten Sie Warnungen 30, 14 und 7 Tage vor Ablauf des Zertifikats ein, um ein Anwendungsupdate mit neuen Pins zu veröffentlichen, bevor das aktuelle Zertifikat ungültig wird. Zur Automatisierung der Veröffentlichung von Updates mit neuen Pins wird die Verwendung von Firebase Remote Config oder einer benutzerdefinierten Konfigurations-API empfohlen, die eine dynamische Aktualisierung der Pin-Liste ermöglicht, ohne eine neue Version im App Store zu veröffentlichen.

Vor- und Nachteile von Certificate Pinning

Certificate Pinning erhöht die Sicherheit mobiler Anwendungen erheblich, belastet aber das Entwicklungsteam operativ. Es ist wichtig, die Sicherheitsvorteile gegen die Risiken der Verbindungssperrung aufgrund fehlerhafter Implementierung abzuwägen.

Der Hauptvorteil ist der Schutz vor Man-in-the-Middle-Angriffen, einschließlich Fällen von CA-Kompromittierung. Pinning macht gefälschte Zertifikate, die von einem Angreifer ausgestellt wurden, nutzlos: Selbst wenn eine CA eine Fälschung signiert hat, wird die Anwendung sie ablehnen. Ein zusätzlicher Vorteil ist der Schutz vor Unternehmens-Proxyservern, die Zertifikate zur Verkehrsinspektion austauschen. Laut Google Security Blog (2023) haben Anwendungen mit Pinning eine 86% geringere Wahrscheinlichkeit, durch Verkehrsabfangen kompromittiert zu werden, im Vergleich zu Anwendungen, die nur die standardmäßige TLS-Prüfung verwenden.

Der Hauptnachteil des Pinning ist das Risiko der Selbstsperrung: Wenn sich das Serverzertifikat (Erneuerung, Anbieterwechsel, Schlüsselrotation) vor der Veröffentlichung des Anwendungsupdates ändert, verlieren Benutzer den Zugriff auf den Server. Zusätzliche Nachteile: Debugging-Komplexität (jede Konfigurationsänderung erfordert Pin-Updates), APK-Größensteigerung um 5–15 KB bei Verwendung von TrustKit und die Unmöglichkeit, Änderungen ohne neue Version schnell rückgängig zu machen. Zur Risikominimierung werden Backup-Pins, automatische Rotation alle 2–3 Monate und eine Schonfrist verwendet, in der die Anwendung sowohl das alte als auch das neue Zertifikat akzeptiert. Es ist auch wichtig zu beachten, dass während der Entwicklung mit aktiviertem Pinning keine Proxy-Tools (Burp Suite, Charles) zum Debuggen von Netzwerkanfragen verwendet werden können — für Entwicklungs-Builds muss Pinning über das BuildConfig.DEBUG-Flag deaktiviert werden, und QA-Tests sollten mit der Release-Signatur bei aktiviertem Schutz durchgeführt werden. Einige Teams verwenden eine Staging-Domain mit einem separaten Pinning-Zertifikat für die Entwicklungsumgebung, um den Schutz auch während der Entwicklung aufrechtzuerhalten.

Implementierung von Certificate Pinning unter Android

Betrachten wir ein Beispiel zur Implementierung von Certificate Pinning unter Android mit OkHttp — der Standardbibliothek für Netzwerkanfragen. OkHttp bietet einen integrierten CertificatePinner, der SHA-256-Hashes öffentlicher Schlüssel akzeptiert.

kotlin
val certificatePinner = CertificatePinner.Builder()
    .add(
        "api.example.com",
        "sha256/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="
    )
    .add(
        "api.example.com",
        "sha256/BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB="
    )
    .build()

val client = OkHttpClient.Builder()
    .certificatePinner(certificatePinner)
    .build()

Im obigen Code fügen wir zwei Pins für die Domain api.example.com hinzu: den primären (aktuelles Zertifikat) und einen Backup-Pin (für Rotation). OkHttp überprüft automatisch, ob das Serverzertifikat mit einem der angegebenen SHA-256-Fingerabdrücke übereinstimmt. Um den SHA-256-Fingerabdruck des Zertifikats zu erhalten, verwenden Sie den Befehl: openssl s_client -connect api.example.com:443 | openssl x509 -pubkey -noout | openssl pkey -pubin -outform der | openssl dgst -sha256 -binary | base64. Es ist wichtig, Fingerabdrücke nicht als Klartext im Code zu speichern, sondern verschlüsselt oder verschleiert: Die statische Analyse von MobSF findet leicht rohe SHA-256-Strings in DEX-Dateien. Es wird empfohlen, Pins in res/raw-Ressourcen, verschlüsselt über AES, zu speichern und sie beim Start der Anwendung über nativen Code (NDK/JNI) zu entschlüsseln.

iOS-Implementierung über TrustKit

Unter iOS ist das wichtigste Werkzeug für Certificate Pinning die Open-Source-Bibliothek TrustKit. Anders als OkHttp wird TrustKit deklarativ über Info.plist konfiguriert, was Pin-Änderungen ohne Neukompilierung der Anwendung ermöglicht. Die Konfiguration umfasst ein Wörterbuch mit Domains und ein Array von SHA-256-Fingerabdrücken öffentlicher Schlüssel. TrustKit fängt automatisch NSURLSession-Anfragen ab und überprüft Zertifikate vor Beginn der Datenübertragung. Eine entscheidende Funktion von TrustKit ist die Unterstützung von Pin-Validierungsberichten: Die Bibliothek kann bei Pin-Ungleichheit Berichte an einen bestimmten Endpunkt senden, was eine schnelle Reaktion auf Zertifikatsanomalien ermöglicht. Apple bietet ab iOS 14 auch einen nativen NSPinnedDomains-Mechanismus in Info.plist, aber TrustKit bleibt aufgrund der flexibleren Konfiguration, Berichtsunterstützung und der Möglichkeit zum heißen Austausch von Pins ohne OS-Updates die bevorzugte Wahl. Es ist wichtig zu beachten, dass TrustKit über den didReceiveChallenge-Delegaten in URLSession integriert wird und bei erfolgreicher Pin-Überprüfung .performDefaultHandling und bei Nichtübereinstimmung .cancelAuthenticationChallenge zurückgibt. Zur Überwachung von Pin-Validierungsberichten wird empfohlen, einen separaten Endpunkt einzurichten, der die Fehlerhäufigkeit analysiert: Wenn die Anzahl der Berichte stark ansteigt — kann dies auf einen MitM-Angriff oder ein bevorstehendes Zertifikatsablaufen hindeuten, das sofortige Pin-Updates erfordert.

Häufig gestellte Fragen

Was ist Certificate Pinning in einfachen Worten?

Certificate Pinning ist wie das Speichern eines Fingerabdrucks eines Freundes in Ihrem Telefon: Sie merken sich, wie das „richtige“ Serverzertifikat aussieht, und vertrauen niemandem sonst, selbst wenn jemand einen Ausweis von einer „offiziellen“ Stelle vorzeigt.

Wie unterscheidet sich Certificate Pinning von normalem HTTPS?

Normales HTTPS vertraut jedem Zertifikat, das von einer beliebigen CA aus Hunderten von Stellen signiert wurde. Certificate Pinning fügt eine zusätzliche Prüfung hinzu: Das Zertifikat muss nicht nur gültig sein, sondern speziell dasjenige, das Sie im Anwendungscode festgelegt haben.

Wie aktualisiert man ein Zertifikat bei Verwendung von Pinning?

Es wird empfohlen, 2–3 Pins zu speichern: den aktuellen und einen Backup-Pin für das neue Zertifikat. 1–2 Monate vor dem Zertifikatswechsel veröffentlichen Sie eine neue Version der Anwendung mit dem hinzugefügten Pin des zukünftigen Zertifikats. Nach dem Wechsel wird der alte Pin im nächsten Release entfernt.

Kann Certificate Pinning mit kostenlosen CAs verwendet werden?

Ja, es kann. Pinning funktioniert mit allen Zertifikaten, einschließlich Let’s Encrypt. Es ist wichtig zu bedenken, dass kostenlose Zertifikate eine kurze Gültigkeitsdauer (3 Monate) haben, daher werden eine Backup-Pin-Strategie und automatische Rotation obligatorisch.

Wie testet man Certificate Pinning in einer Anwendung?

Verwenden Sie Burp Suite oder mitmproxy zum Testen von Pinning. Wenn die Anwendung mit Pinning korrekt konfiguriert ist, kann das Proxy-Tool den Verkehr nicht abfangen — die Verbindung wird in der Handshake-Phase abgebrochen. Für Integrationstests verwenden Sie OkHtpps MockWebServer.

Zusammenfassung

  • Certificate Pinning ist eine Zertifikatsbindungstechnik, die vor Man-in-the-Middle-Angriffen und CA-Austausch schützt.
  • Public Key Pinning ist die von OWASP empfohlene Methode, basierend auf dem Fingerabdruck des öffentlichen Schlüssels und nicht dem gesamten Zertifikat.
  • OkHttp CertificatePinner unter Android und TrustKit unter iOS sind die wichtigsten Werkzeuge zur Implementierung von Pinning in mobilen Projekten.
  • 2+-Pin-Strategie verhindert die Blockierung der Anwendung bei Änderung des Serverzertifikats.
  • SHA-256-Pinning erfordert den openssl-Befehl zur Generierung des Fingerabdrucks des öffentlichen Schlüssels des Servers.
  • Schonfrist — die Verwendung eines Backup-Pins mit überlappenden Gültigkeitsdaten reduziert das Risiko des Verbindungsverlusts auf null.
  • Empfehlung: Implementieren Sie Public-Key-Pinning für alle Produktionsdomains mit einem Backup-Pin und richten Sie eine Überwachung auf Verbindungsabbrüche ein.

Wir entwickeln eine mobile Applikation schlüsselfertig

IT Sectr entwickelt seit 2017 iOS- und Android-Apps für Startups und Unternehmen. Wir beraten Sie und schlagen die beste Lösung vor.

Projekt besprechen

Lesen Sie auch