Certificate Pinning: vad är det, metoder för certifikatbindning och hur implementerar man

Författare: IT Sectr Publicerad: 2026-04-02 Lästid: 8 min

Certificate Pinning (certifikatbindning) — är en säkerhetsteknik där den mobila appen kontrollerar att serverns certifikat matchar ett fördefinierat prov, och inte bara litar på vilket certifikat som helst i CA-kedjan. Till skillnad från vanlig TLS-verifiering som förlitar sig på hundratals certifieringsmyndigheter, begränsar pinning förtroendet till ett specifikt certifikat eller dess offentliga nyckel. Enligt OWASP Mobile Security Testing Guide (2024) täcker implementeringen av Certificate Pinning 100% av Man-in-the-Middle-attackscenarier relaterade till certifikatersättning. OWASP MSTG, 2024

Huvudpunkter

  • Certificate Pinning — teknik för att binda appen till ett specifikt certifikat eller serverns offentliga nyckel.
  • Pinning via offentlig nyckel — den mest flexibla och säkra metoden, som inte kräver appuppdatering vid certifikatbyte.
  • Skillnad från TLS — vid vanlig TLS litar klienten på vilken CA som helst; pinning lägger till en andra verifieringsnivå för ett specifikt certifikat.
  • Risk för blockering — vid felaktig certifikatuppdatering kan appen förlora anslutningen till servern tills en ny version släpps.
  • OkHttp och TrustKit — de mest populära biblioteken för pinning-implementering på Android respektive iOS.

Vad är Certificate Pinning?

Certificate Pinning — är en säkerhetsmekanism där appen sparar (eller “syr in” — pin) ett prov av serverns certifikat och vid varje anslutning jämför det mottagna certifikatet med detta prov. Om certifikatet inte matchar — bryts anslutningen, även om det är officiellt signerat av en betrodd certifieringsmyndighet. Detta skyddar mot attacker där angriparen får ett falskt certifikat via en komprometterad CA (som hände med DigiNotar 2011 eller Comodo 2011).

Hur certifikatbindning fungerar

Pinning-processen består av tre steg: extrahera fingeravtrycket (fingerprint) av certifikatet eller den offentliga nyckeln från en betrodd instans; lagra detta fingeravtryck i appens kod eller resurser; jämföra under TLS-handshake-fasen. Utvecklaren kan fixera SHA-256-fingeravtrycket av hela certifikatet eller endast den offentliga nyckeln (Public Key Pinning). Det andra tillvägagångssättet är att föredra: vid certifikatförlängning förblir den offentliga nyckeln ofta densamma och appen förlorar inte anslutningen till servern. Enligt OWASP-rekommendation är det minsta antalet pins — 2: en aktuell och en reserv för nyckelrotation. Moderna bibliotek som OkHttp och TrustKit automatiserar verifieringsprocessen av angivna pins vid varje TLS-anslutning utan extra arbete för utvecklaren. Det är viktigt att förstå att pinning inte ersätter standard TLS-verifiering utan kompletterar den: först utförs vanlig handshake med validering av certifikatkedjan, sedan — ytterligare pinning-verifiering. Ett sådant tvånivåskydd eliminerar sårbarheter relaterade till CA-kompromettering, inklusive fall av felaktig certifikatutfärdning och attacker mot certifieringsmyndigheters infrastruktur.

Typer av Certificate Pinning

Det finns flera tillvägagångssätt för att implementera Certificate Pinning, var och en med sina egna lagrings- och verifieringsegenskaper. Valet av metod beror på appens arkitektur, frekvensen av certifikatuppdateringar och flexibilitetskrav.

Typ av pinningVad som sparasFlexibilitetAnvändningsexempel
Certificate PinningHela X.509-certifikatetLågFast certifikat i 1–2 år
Public Key PinningOffentlig nyckel (SPKI)MedelOWASP-rekommenderat tillvägagångssätt
Hash PinningSHA-256-fingeravtryckMedelPopulärt i OkHttp (certificatePinner)
CA PinningMellanliggande CAHögFöretagsappar

Den mest balanserade metoden är Public Key Pinning, rekommenderad av OWASP och Google. Istället för ett specifikt certifikat (som ändras varje 1–2 år) lagrar appen SubjectPublicKeyInfo-fingeravtrycket — en abstraktion av den offentliga nyckeln. Om certifikatet förlängs med samma nyckel (key reuse) förblir pin giltig. Om nyckeln ändras — lägger utvecklaren till en reservpin i appuppdateringen. I mobila projekt används min/max pins-strategin: minst 2 pins, inklusive reserv, och högst 4 för att förhindra svullnad och ökad verifieringstid.

Strategi för val av pinning-typ

Valet av specifik pinning-typ beror på appens arkitektur och krav. För offentliga mobila appar som kommunicerar med REST API via en domän är Public Key Pinning med två pins via OkHttp eller TrustKit optimalt. För företagsappar med egen certifieringsmyndighet är CA Pinning lämpligt — det kräver ingen uppdatering vid ändring av klientcertifikat eftersom förtroendet är bundet till CA, inte till slutcertifikatet. För IoT och inbyggda system rekommenderas Certificate Pinning med fixering av hela certifikatet: enheter uppdateras sällan, därför är kontroll över hela förtroendekedjan kritisk. Övervakning av pins utgångsdatum — obligatorisk praxis: ställ in varningar 30, 14 och 7 dagar före certifikatets utgång för att hinna släppa en appuppdatering med nya pins innan det aktuella certifikatet blir ogiltigt. För automatisering av uppdateringssläpp med nya pins rekommenderas Firebase Remote Config eller ett eget konfigurations-API som möjliggör dynamisk uppdatering av pin-listan utan att publicera en ny version i appbutiken.

Fördelar och nackdelar med Certificate Pinning

Certificate Pinning ökar säkerheten för mobilappen avsevärt, men lägger en operativ börda på utvecklingsteamet. Det är viktigt att väga fördelarna med skydd mot risken för anslutningsblockering vid felaktig implementering.

Den största fördelen — skydd mot Man-in-the-Middle-attacker, inklusive fall av CA-kompromettering. Pinning gör falska certifikat utfärdade av angriparen värdelösa: även om CA har signerat en förfalskning kommer appen att avvisa den. En extra fördel — skydd mot företagsproxyservrar som byter ut certifikat för trafikinspektion. Enligt Google Security Blog (2023) har appar med pinning 86% mindre chans att bli hackade genom trafikavlyssning jämfört med appar som endast använder standard TLS-verifiering.

Den största nackdelen med pinning — risken för självblockering: om serverns certifikat ändras (förlängning, byte av leverantör, nyckelrotation) innan appuppdateringen släpps förlorar användarna åtkomst till servern. Ytterligare nackdelar: svårighet med felsökning (vid varje ändring av inställningar måste pins uppdateras), ökning av APK-storleken med 5–15 KB vid användning av TrustKit och omöjlighet att snabbt återställa ändringar utan ny version. För att minimera risker används reservpins, automatisk rotation varannan till var tredje månad och en grace-period där appen accepterar både gamla och nya certifikat. Man måste också beakta att med aktiverad pinning under utveckling kan man inte använda proxyverktyg (Burp Suite, Charles) för felsökning av nätverksförfrågningar — för utvecklingsbyggen bör pinning inaktiveras via flaggan BuildConfig.DEBUG, och QA-testning bör utföras på releasesignaturen med aktiverat skydd. Vissa team använder en staging-domän med separat pinning-certifikat för utvecklingsmiljön för att behålla skyddet även i utvecklingsfasen.

Implementera Certificate Pinning i Android

Låt oss titta på ett exempel på hur man implementerar Certificate Pinning på Android med OkHttp — standardbiblioteket för nätverksförfrågningar. OkHttp tillhandahåller en inbyggd CertificatePinner som accepterar SHA-256-hashar av offentliga nycklar.

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()

I koden ovan lägger vi till två pins för domänen api.example.com: primär (aktuellt certifikat) och reserv (för rotation). OkHttp kontrollerar automatiskt om serverns certifikat matchar någon av de angivna SHA-256-fingeravtrycken. För att få SHA-256-fingeravtrycket av certifikatet används kommandot: openssl s_client -connect api.example.com:443 | openssl x509 -pubkey -noout | openssl pkey -pubin -outform der | openssl dgst -sha256 -binary | base64. Det är viktigt att lagra fingeravtrycken inte i öppen form i koden utan krypterade eller förskingrade: statisk analys MobSF hittar lätt nakna SHA-256-strängar i DEX-filer. Det rekommenderas att lagra pins i res/raw-resurser, krypterade via AES, och dekryptera dem vid appstart via inbyggd kod (NDK/JNI).

Implementering på iOS via TrustKit

iOS är huvudverktyget för Certificate Pinning det öppna källkodsbiblioteket TrustKit. Till skillnad från OkHttp konfigureras TrustKit deklarativt via Info.plist, vilket gör det möjligt att ändra pins utan att omkompilera appen. Konfigurationen innehåller en ordbok med domäner och en array av SHA-256-fingeravtryck av offentliga nycklar. TrustKit fångar automatiskt upp NSURLSession-förfrågningar och kontrollerar certifikat innan dataöverföringen börjar. En nyckelfunktion hos TrustKit — stöd för pin-valideringsrapporter: biblioteket kan skicka rapporter till en angiven slutpunkt vid pin-avvikelse, vilket möjliggör snabb reaktion på certifikatanomalier. Apple tillhandahåller också den inbyggda mekanismen NSPinnedDomains i Info.plist från och med iOS 14, men TrustKit förblir det föredragna valet tack vare mer flexibel konfiguration, rapportstöd och möjlighet till het utbyte av pins utan systemuppdatering. TrustKit integreras med URLSession via delegaten didReceiveChallenge och returnerar .performDefaultHandling vid lyckad pin-verifiering och .cancelAuthenticationChallenge vid avvikelse. För övervakning av pin-valideringsrapporter rekommenderas att konfigurera en separat slutpunkt som analyserar frekvensen av fel: om antalet rapporter plötsligt ökar — kan detta indikera en MitM-attack eller förestående certifikatutgång som kräver omedelbar pin-uppdatering.

Vanliga frågor

Vad är Certificate Pinning med enkla ord?

Certificate Pinning — är som att spara en väns fingeravtryck i telefonen: du kommer ihåg hur serverns “rätta” certifikat ser ut och litar inte på någon annan, även om någon uppvisar ett id-kort från ett “officiellt” center.

Vad skiljer Certificate Pinning från vanlig HTTPS?

Vanlig HTTPS litar på vilket certifikat som helst signerat av vilken CA som helst från hundratals center. Certificate Pinning lägger till en verifiering ”uppifrån”: certifikatet måste inte bara vara giltigt utan specifikt det du har fixerat i appens kod.

Hur uppdaterar man certifikatet vid användning av Pinning?

Det rekommenderas att lagra 2–3 pins: aktuell och reserv för det nya certifikatet. 1–2 månader före certifikatändringen, släpp en ny version av appen med det framtida certifikatets pin tillagd. Efter ändringen tas den gamla pin bort från nästa utgåva.

Kan man använda Certificate Pinning med gratis CA?

Ja, det går. Pinning fungerar med alla certifikat, inklusive Let's Encrypt. Det är viktigt att komma ihåg att gratis certifikat har kort giltighetstid (3 månader), därför blir strategin med reservpins och automatisk rotation obligatorisk.

Hur testar man Certificate Pinning i appen?

För att testa pinning, använd Burp Suite eller mitmproxy. Om appen med pinning är korrekt konfigurerad kommer proxyverktyget inte att kunna avlyssna trafiken — anslutningen bryts under handshake-fasen. För integrationstester, använd MockWebServer från OkHttp.

Sammanfattning

  • Certificate Pinning — certifikatbindningsteknik som skyddar mot Man-in-the-Middle-attacker och CA-ersättning.
  • Public Key Pinning — OWASP-rekommenderad metod baserad på fingeravtryck av offentlig nyckel, inte hela certifikatet.
  • OkHttp CertificatePinner på Android och TrustKit på iOS — huvudverktygen för pinning-implementering i mobila projekt.
  • 2+ pins-strategi förhindrar appblockering vid certifikatändring på servern.
  • SHA-256 pinning kräver kommandot openssl för att generera fingeravtryck av serverns offentliga nyckel.
  • Grace-period — användning av reservpin med överlappande giltighetsdatum minskar risken för anslutningsförlust till noll.
  • Rekommendation: implementera pinning via offentlig nyckel för alla produktionsdomäner med en reservpin och konfigurera övervakning av anslutningsbrott.

Vi utvecklar en mobil applikation nyckelfärdigt

IT Sectr skapar iOS- och Android-applikationer för startups och företag sedan 2017. Vi ger dig råd och föreslår den bästa lösningen.

Diskutera projektet

Läs också