Bruk HTTPS-sertifikathåndtering for å beskytte iOS-appen din

Enhver app som kobles over Internett til en vertstjeneste, må ha en sikkerhetspolicy. Sikkerhetspolitikken vil først og fremst avhenge av følsomheten til dataene som overføres mellom appen og serveren. Selv om appen ikke overfører sensitiv kundeinformasjon, bør den imidlertid beskytte seg mot angrep. Selv det minst skadelige angrepet vil ødelegge brukerens opplevelse og appens omdømme.

I dag krever de fleste webtjenester (inkludert Twitter og Facebook) forespørselgodkjenning med OAuth som del av å få innloggingsinformasjon fra brukeren. Utvikleren får en forbruker- og hemmelig nøkkel etter å ha registrert appen. Når appen får tilgang til nettjenesten, utveksler appen først kodede nøkler for et bærertegn. I løpet av dette tokenet har appen tillatelse til å få tilgang til tjenestens API.

Det anbefales sterkt at appen din får tilgang til en webtjeneste som beskytter seg selv med OAuth-godkjenning.

Sammen med OAuth er det HTTPS, som setter HTTP på toppen av SSL / TLS-protokollen, som gir datakryptering og X.509 sertifikatutveksling. Det er mulig med iOS å bare bruke datakrypteringen og slå av utveksling av sertifikater, men i de fleste tilfeller er dette ikke nødvendig. Apple har installert mange rotsertifikater fra pålitelige sertifikatmyndigheter.

Hvis serveren appen din får tilgang til har et selvsignert sertifikat installert, kan du fortsette uten eller omgå den legitimasjonen du mottar med godkjenningsutfordringen. Eller fordi du kjenner verten på forhånd, kan du stole på den. Uansett er du ikke beskyttet mot et midt-angrep.

Mann-i-midten-angrep

Et menneske-i-midten-angrep er en form for aktiv avlytting der angriperen setter seg inn midt i en Internett-forbindelse mellom iOS-appen og en server. Diagrammet i figur A viser angriperens trinn, merket 1 til 5.

  1. Normal trafikk mellom mobilapp og server.
  2. Angriperen får forespørselen fra appen og gjør endringer i den.
  3. Forespørselen videresendes til serveren.
  4. Angriperen får svaret fra serveren og gjør endringer.
  5. Responsen blir videresendt til appen.

Apper som overfører sensitive kundedata, som kredittkort- og betalingsinformasjon, må beskyttes mot angrep fra midt-i-midten. Den beste beskyttelsen er et gjensidig autentiseringsskjema, der sertifikater utveksles for å sikre at appen er koblet til en pålitelig server og for å sikre at serveren er koblet til en pålitelig app.

NSURLConnectionDelegate

Vi antar at NSURLConnection-klassen blir brukt, uten tredjepartsbibliotek, for å koble til en server. For vårt eksempel vil NSURLConnectionDelegate-protokollmetodene håndtere autentiseringen.

Siden iOS 5 er følgende tilkoblingsdelegatmetoder blitt utdatert:

De er erstattet av metoden willSendRequestForAuthenticationChallenge; bare når denne metoden ikke er implementert, vil de utdaterte metodene bli kalt. Vi vil implementere denne metoden for å utføre klienten og serverbevisvalideringene.

Validering av klientsertifikat

Serveren validerer klientens sertifikat. Serverens administrator gir klientsertifikatet. Den private nøkkelen lagres på serveren, og den offentlige nøkkelen leveres som en del av autentiseringsutfordringen. IOS-appen lagrer sertifikatet i DER-format. Det kan være nødvendig å konvertere fra PEM til DIR (binært) format:

 $ openssl x509 - informer PEM –former DER – i cert.pem –out cert.der 

Legg til cert.der-filen i iOS-appens ressurspakke; dette er bare den offentlige nøkkelen, så det er trygt å oppbevare. Følgende metode, shouldTrustProtectionSpace, laster sertifikatet fra hovedbunten, oppretter et sertifikat fra de lastede dataene og etablerer en tillitskjede i serverens beskyttelsesrom, forankret på det medfølgende sertifikatet.

Sikkerhetsrammen må inkluderes i Xcode-prosjektet.

Den etablerte servertilliten evalueres. Følgende viser mulige resultater fra Apple-dokumentasjonen.

  • kSecTrustResultInvalid: Ugyldig innstilling eller resultat indikerer evaluering mislyktes i å fullføre
  • kSecTrustResultProceed: Du kan stole på sertifikatet
  • kSecTrustResultConfirm: Be tillatelse fra brukeren
  • kSecTrustResultDeny: Sertifikatet skal ikke klareres
  • kSecTrustResultUnspecified: Brukeren spesifiserte ikke en tillitsinnstilling.
  • kSecTrustResultRecoverableTrustFailure: Tillit nektet, men kan prøve på nytt etter å ha endret innstilling.
  • kSecTrustResultFatalTrustFailure: Tillit nektet og ingen enkel løsning kan brukes
  • kSecTrustResultOtherError: En annen feil enn tillitsevaluering

Du kan komme deg fra en utvinnbar tillitssvikt ved å få og stille unntakene i den etablerte servertilliten og revurdere.

 if (trustResult == kSecTrustResultRecoverableTrustFailure) {CFDataRef errDataRef = SecTrustCopyExceptions (serverTrust); SecTrustSetExceptions (serverTrust, errDataRef); SecTrustEvaluate (serverTrust, & trustResult); } 

Validering av serverbevis

Med serverautentisering sammenlignes SSL-sertifikatet som brukes for HTTPS-tilkoblingen med et sertifikat som er lagret på klienten. Følg instruksjonene i artikkelen Hvordan validerer SSL-sertifikater på iOS, sammenligner vi sertifikatens datahasjer. SHA256 brukes for å holde den enkel og rimelig sikker. Implementere SHA256-metoden som vist i artikkelen.

Sette alt sammen

The willSendRequestForAuthenticationChallenge delegatmetoden samtaler shouldTrustProtectionSpace for å håndtere klientsertifisering. Hvis sertifikatet valideres, blir serverens sertifikat hentet, hashet og sammenlignet med hashverdien EXPECTED_CERTIFICATE_BASE64_SHA256.

Hvis sertifikatets hashverdier stemmer, kalles metoden til utfordringens avsender useCredential (suksess!). Ellers må utfordrings avsenderens avbrytAuthenticationChallenge-metode kalles. Dette vil utløse en samtale til didCancelAuthenticationChallenge-protokollmetoden. Her kan du informere brukeren om at forbindelsen mislyktes.

Konklusjon

Ikke alle iOS-apper som kobles til en webtjeneste, trenger å implementere en gjensidig autentiseringsplan. De skal koble seg til en webtjeneste som krever OAuth-godkjenning. For de appene som overfører sensitive kundedata, er gjensidig autentisering den beste beskyttelsen.

Les også:

  • Å håndheve pålitelige SSL-sertifikater på iOS og OS X (Indelible.org)
  • Sertifikat-, nøkkel- og tillitsservicehenvisning (iOS Developer Library)
  • Opprette PKCS12-sertifikater (Flat Mountain)

© Copyright 2021 | pepebotifarra.com