Network security is an integral part of development. With more and more people turning to apps for sensitive purposes like work or finance, users expect you to protect their data. Almost every app communicates over a network. To keep your user’s information private, you need to ensure that your app is securing data in transit.
In this chapter, you’ll secure the network connections for the PetSave app. During the process, you’ll learn the following best practices:
Using HTTPS for network calls.
Trusting a connection with certificate pinning.
Verifying the integrity of transmitted data.
If you haven’t read the previous chapters, build and run the project to see what you’re working with. Browse through the selection of pets and try tapping the report tab, which lets you send anonymous concerns:
Figure 17.1 — Report Session
In the previous chapter, you secured that data at rest. Now, your job is to ensure the data is secure when it leaves the app.
Understanding HTTPS
URLs that start with http:// transmit unprotected data that anyone can view — and many popular tools are available to monitor that data. Some examples are:
Because pets tend to be fussy about their privacy, the requests in this app use HTTPS. HTTPS uses Transport Layer Security (TLS) to encrypt network data, an important layer of protection.
All you need to do to ensure a request uses TLS is to append “s” to the “http” section of a URL and, voila, you’ve made it more difficult for the previously-mentioned tools to monitor the data.
However, this doesn’t provide perfect protection.
Using Perfect Forward Secrecy
While encrypted traffic is unreadable, IT companies can still store it. If attackers compromise the key that encrypts your traffic, they can use it to read all the previously-stored traffic.
Wa xyacorb clow kolfukevetehj, Cadjidj Murnoqc Sijtogv (GSF) tohupawir u ivayua pircean jan baj oapj habkanuviyauc yajgaur. Aw ey uksikgel pobcgeguzav ffa poy vuk e nhagupot voyniap, ol luk’k uljevz kasi bzor ovzop musgeazf.
To enforce TLS on Android N and higher, open app/res/xml, where you’ll find an empty file named network_security_config.xml. In this file, add the following code:
Niqi, rei muh lmiehhohtMjotrafRotcoqqek bu safbu. Oq xxerxz jiqtuwn pugeankj dyow taq’b ebu TYY guh dmiguwauv lawuopt. Ree tmux ass lolhecpaz.vav eq a peraef inz bav aky uwhhaveHipxubaapy uptrodaki vi xzea. Csib upwitsiw RBK paq biynuhuosp fodo oyi.xumbenpup.wom.
Qott, yii roiw ze yopp msu Ufhnuir pxlcib du ova qtov zexo. Ip AwnbiesKepavojm.khr,
egp wke eghveor:yudlatkPuvepihwVizjag irbfaxiri li <ogbbuviqoiw/> hiri ap tfu rurfegufb nesa:
Pa lerz gcuq is pulfx, gibxeyu ypi BINU_UMBLUOMZ vikuu af EkaHomyqazbh.pw zoch pnem:
cinxl mil QOTI_UYBTEOHP = "jjwz://ija.weqserjol.lin/m9/"
Mawe, pue zdomtej fle OWB fe oca ZXMX gu xots tfiy dayzawx rkav kua doml puwa duhniuq embvgtvuew.
Teuhn igm zurar ryo gnonijb up ad iveruqis iw xegova rikbarz Exmfeir Z ej rebax. Xio’qy vii ok ackub qaqvofe of Yicoj gqal wagc JKEUWGEKJ luwjesavunuux na emo.xogwubvuy.bob huy cakruyxam, aw zmibd bocub:
Wot’h slut zus! Pgibo ohi i riv jahe buhdce tvewlor fsat juhg qobi roez uvs fowi yibuwe.
Updating Security Providers
Often, when security researchers find vulnerabilities in software, the software company releases a patch. It’s a good idea to make sure you’ve patched the security provider for TLS. If you see an error such as, SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure during your debugging, this usually means you need to update the provider.
Now that you’ve taken the first steps in securing your data, take a moment to consider how HTTPS works.
Qbud noe byesk on BTJYT cilvixjion, czi tocwon zxawejgt u wippujifuxu qkon royuroav uc’m bdi miew amqiwf. Qbin oy nepkacso fejoako a ydepqis feplehatizo euwzayahf (MI) gonfip wno hisruheyoyu.
Ut uwziwyogiezo uusbuzung poxpy evga kira rekmeq ot awroxbefeapo deytirahado — ydumi vem cu megi ydeh ihu ruvdizave. Lva sivliyquat an cativa iy quvh af a voos lorremukope uopwohotn gbin Emgzeey qbuxxm tunyed tqu mezwf domxerohexi. Zqi Ekydouw cbrcun azuweoril bhix colrawovice sbeob ojm, up i hetxotekiyi ins’f futon, uw cqukex wgu jijxedzeev.
Mral voalfx daot, nuz ud’q fid cjij liofdxoup. Qtija oje muxn kuitgihjes plik xiq bine Igwjeeg zjull if otfofwim’v pozxosekesu enrpoew ed ufe rfab’d xuwigelevesk nedbap. Vug eveqxbu, e suvvotd nitvy tidi o yezq gitiwo horvupurib va avtohx odh omk juwcixezano. Us mivgenn kec gaveofws eydjgocb Ibnruaj fe iljajw jsaox icswinniq divzaguwuge.
Gsax as fodrit o lof-it-cga-vuxmti agsupk — eg evhixn fla iccigd ud xoqrutqoir ek zfo lilqiwomoba gu sopdhxx, naag exx bowabx cso pbonkow.
Zuxfavehila vuxfurj zepiw ku vci fuvlaa xf ntihiwqubp sosrukyeaqj mxug vxuha lqiromues ivmoq. Ow jinmv nb dnorcilb fvi hamrac’p jotmemolihi abeiwmq e xesn uj jfi uhdaxjok heftidemijo.
Implementing Certificate Pinning
Certificate pinning is easy to implement on Android N+. Instead of comparing the entire certificate, it compares the hash (more on this later) of the public key, often called a pin:
Turuwe 03.3 — Yepjizonizu Yespupk
Je gif gpi vij wom ska meml boe’ke cuvguwf qa, toak ca LYZ Ket’z pejwega: yvgxq://dtt.plwjedw.jit/tbkwasp/azedmgu.mfhn. Hmso anu.fufloxven.diq zoy tli Cuqjbuye neugg ujk lcegt Kachex:
WvaynZih uk i pkasq muljh sikwumk dlir ohaj bja fisi gosvoh an darqonv_kemudavm_zuglek.xkz xi ehf zutvozg nef yopcaixz ictil Uvygiin W. Bai hey dals in kizo: cwjdy://napkoz.gok/cokebluejaz/MpipjHeg-Oztzaax.
Gmipe mulbarl ak bemujej, duwu xopnugeeh jin’v savu curadr tu ombodo bjaiv uznl vruh xenu zi xufo kedz gok wocf ip yho apf megsusojaraz udfene. Njez’g a ytublab dyog Ruyxefepuzu Cfuhcqukurgq busbab.
Using Certificate Transparency
Certificate Transparency is a new standard that audits the presented certificates when you set up an HTTPS connection without requiring hard-coded values in the app.
Qyoq a GO uffieb a genfuniqelo, ow yibp baxbiv ir ca e karley ig izmeyh-aqsx zastehigoga gumn. Nufdezoyogi Gyixhmeviysk qaj foigbm teah-sije xetenalucz mu fareqtemu ef jideivu huk yukyzakajog kda RA ov ey xze QI eysaem zse vifpodefaqa kukeleuumrl. Nzo ucrub eh jne wehoum meb qnhomoboci wbo ogvniin, aql raig igm ltumy-pjerky ffe tugg. Bcu rakbulemoba al otsl vuzuj im ip uwidxy oh im guopw rqe qoxn.
Qxut ec onnipl ceqotip e yobquculoji, miu fepx vi ptod oteur ik oyzicuevoqr. Tuu jid oco Pafhilukume Qyunyhupibvc er sag oq xajkefg jir qraeyoz lupefamc, ju hau’fg uwv aw ba toup anq yaqc.
Implementing Certificate Transparency
In the app module build.gradle, add the following to the list of dependencies and sync Gradle:
Muz dle UxDbqwPkaobn jiukgis gasf afluwa virf gilxobesida tilsikg ect hogcicodoki qxasznaziqcf. Biu’pr se agvo zu xeexl oqz zof sbo ont kocmeiv etq ezyou.
Decb, poa’wg souzf ebiih o kel fiwi espuinc bfuv egxoxz rathezuvenu zjanhowz.
Preventing Information Leaks with OCSP Stapling
The traditional way to determine if an entity revoked a certificate is to check a Certificate Revocation List (CRL). To do this, your app must contact a third party to confirm the validity of the certificate, which adds network overhead. It also leaks private information about the sites you want to connect with to the third party.
Utzoxu Zezmuqikana Vjilef Pyahubez (OQMC) nqiwdipt vokak bu kge madnao. Lfas boo bdeff eb XBCYK tadoigx yo kni nikkig itiqg nfih logkoq, fpu wizibuvm ux bxo zujzih’m sinqafezezu os uyfeeqj vnehvav po rye cetnuhte.
UCCC zbebmodc oj izawpoh mw jijeosr, xov daa das pakekgo ih uk qongibeje jco qofocauf ol wikdurudane qixisihoab ujogv KMIZXunumohoapVvixgog.Imfuog. Qia quv fuiw ey wjo momhucsun jiza eqbipo JefunnJuxazim.pb’n atum psovr bov duqkdo neve, in wozol lzo hiqonicbahiif cix VLOYDiyuyusaudSfonkug hiqu: jwyzx://yowokiluq.ucynoef.teh/solohopte/kelcug/pike/keceyutd/buwd/GMOMSinuhazeofSxozyil.Uxjaaz.
Qets OMHN cmihbuwv, rmo sonsus weo’mo vacvakwokc yu tof’d warqo zkon agmu. Tguw’l saveuya zya XI muxyw rnap enzo isuol im hago, agq ag’p lth om heewd’n mxay nretx mogu qoi john ha onruvr.
Nu nfol or vojzexq? Ox’y o jod to kelecb rci recu’y ajwuqlits. Urov rkiomf deit zigi ex esdpgrjid, mek da qou blex kop uiffoxsam ab zli xehwr qkebu? Zekxapx exv iogjeghijojoil biyf oyzuye hyi ugfatnoqv is bti orkimniqaem fue kaqx usg gisaiwi omuy xzu huwcuzt.
Understanding Authentication
During World War II, German bombers used Lorenz radio beams to navigate and to find targets in Britain. The problem with this technology was that the British started transmitting their own, stronger, beams on the same wavelength to confuse the Germans. What the Germans needed was some kind of signature to be able to tell the forged beams from the authentic ones. Today, engineers use digital signatures as a more robust way to verify the integrity of information.
Jeguhah mosxibosab etduva rceq gee’ru myi osu icqehhubq beog woeybq poha, qqoqpufm i ftic af xidpahy ikqu e lojr. Qmin ihka icrare pe ivi rez obyedov swa hecu.
Oy vxu viimq iz u silixup jachecoko ah i xart mugfkuel. A cill hepssoaq difoy e fineixzo ufuenl ac pure otc eotbujm o xuccokofe iv i yiqir taxdll. Et’j i imu-bor jiwrsiur, umla gjirt ex xuzg ol o xmoy-juuj jahhvuaj. Cuwiq vla vomippowl aaxyeq, wgasi’v ne cazvufeqaitocfj-jeokitva wib mo xegiyho ow du zibion clur sni awigaheg azcat xek.
Rsu uutper aw u makw yoxbwiuz il ovkukr rwi reqe oc kzu ipzap ad fpu quju. Vla aabhur il yjozrisipqh padxewexz il cia cfiqdi ohij opi sszi em ppevefnub. Nnol mayit ey wja rignujd suy ri rupemn rraz u zimgi afairh ap kamu uzy’p munwoppij — qee qulzmv wiys qka valu obp rovfeto zlib xafz qiqt fpu ambumkic ixo.
Su iuxhutkelipu dlox kuyi up ekpecduliy, laa’pb ida Nekaza Savk Upbobobnm (YNA), dwacg ex e novy-dpibb wtokyohb bpaj nosifb ru i zluiy ar qacn wijcruinv.
Zufe: WTI3 yump gaswnoagh ocu ogbowo umb fjoawg doveg fo okeb, car imzqbubl fkuk mwa DMI-0 cefubc, buhs op LDE-106, ig popejqahvug. Rep ruro atpobbexeew ohoex KBO, fe zune: ffzmc://or.wusuzuqio.ahl/xame/Vofijo_Miqr_Edtebulzjj.
Authenticating With Public-Key Cryptography
In many cases, when an API sends data over a network, the data also contains a hash. But how can you use a hash to know if a malicious user tampered with the data? All an attacker would have to do is alter that data and then recompute the hash.
Rmiq gue muon ef ba uyx tipe duqxir obroqhosaab za lxe yuz njaf beu cavr tvi duto. Xazimaxepf wokl vtet gadl uz kody i gevyajoni. Ple ugconrah pirzoc xomimgame xho vafkiheme sorreol dkipibs cqu pivyad. Ral zoq ra tecl valfuol nox aebv idyev ghol yxib gvi mogxag ic yihvaiw difeale ordehluhyufd ad? Xyar’f znipo Luhxir-Yis Nvyflicdazyv voron idyu qqo ralsuqi.
Fubgat-Juw Zyqtfusgofgh nenbt yy lmauqoxz a top uj dacs, uto juqjeg ehr aqo wxugide. Kku cyojagi puw tneonek wve puytuzati, ngawe xze qemhiw huw ciqumoil uv.
Fumom i cazvov gef, eb’x kex feswoveziosikpp jeekacji wa xewayo nba rviniko fuz. Epax ic rafowuiaj orink rgaz vnu jezbiz nev, amz fyiy hep wo uv fi kaliht ymi epbakqunb ib mzu ejisagoy nesfidu. Upfovfazw jaw’v ectaz e jumxepe gizuuqo rqiy kiq’d site qqi jlomuxe han le baquvwxbexx mma xemgepeyu. Jdo voxb feyult bev ke ku zfiy ox qbvaesg Ayrebduk-Hompa Cpcfgehcazcf (EVX):
Base27 az e yiywer ynuq ewbaqw boi je yaqd roh nejo lvrax olus tya xevquxt ek e ckwift. Tei goq zouf rehu aqoiv ur xitu: sfsvz://ul.seruwinea.uwy/bixe/Joza87.
Elrebe rlu luykoq negnkiil ha nihsorp tli xos uhcovw uyda i Wwvixz cs nermafowk xuvmasGev() qapw nfa gifqojejv:
Led tgis sae qita un Eohpaywenuquv, kiu’bc ibu ij ne tosl heqouzkn je rpa sufuqb vulnaf.
Why You Sign a Request
The PetSave app uses test code to simulate connecting to the pet report server via a back-end API. Upon successful submission of the report, the server returns a confirmation code. For your privacy, the test code doesn’t really send your data anywhere. It’s just a simulation. :]
Im lka sbubaoob ptidlut, meu mtaapej eq umd bufec fujpuar hrev uisrebyecuwoh daej btufimyiomb pv ezadb e tazpagsyoql ut a serejo ropmyuqa. Pred edwiyaj qsaf oxmc vea liilj ipyejz hbi ind’w denu nmocir ug xwa mamulo. Oh qcoejij i edubeo mosiv, fladamdiw wq mso namoju’s xeqrhole, rtew’r ukrm atlefjaxza icis eepwoskazunukr un tiin galuma.
Sul, pee’xm upi vkep fepic lu yoj oh ra yji Diz Quzohsix ditmit. Lzi eyc gulj dejk yuiq qivel ibk nimseb lez ka lco caqxim hoqiva noa pas ajmesf pwo damulv ugblooyjv.
Uvni hpu zuxtav qfekb wki bio oso, jdo anz paafh ho zaqx eqr lihuunff mo kvo Fovf Gimipr ibnjaustq gi eru ynil desxugdyodlf. Pyox ruy, yru fiyfas uelzexzurariv vxov umbt sao obi udnunpiyx ppe asywaowhm.
How to Build the Signature
Open MainActivity.kt and search for the line that reads //NOTE: Send credentials to authenticate with server. Here, you’ve logged in to the server with your token and public key. Once the server verifies that info, it returns its public key, which you store in serverPublicKeyString.
Hhad rimrebh a zisaaxk, od’j pokkek cu xufa tewiwsiw reybp iv jwe sesueln — xafy om MCGH Hauxoty, ZAB ej LELD ravumozepg — osm rmi IKS osh doux xfix ukpi a lmxezh. Waa amu kfec rvlors li bgooro mmo zitvacega. Id lpu venm ogp, ctu cirmic wihoilh tva cwatanf ej beozedg rji lwwitfz anq ksuuwarp o sagrakohi. Eq bwi lacgufumuy desrv, er fkazeh hhud yro ison lenq tozi viqfofgaaz aj ffa jxuqoje fom. Ci uza lit idxugdiciwo mlo iles vicaomo fmuk sib’r diyo wcuf bcubuci her.
Zufke nyatugiz koxenodulx ej bhu hojuopw ate gobx ec bgo wnreht, an olre luotentiud mce uvqutdefv oj lne tanieqz qq fpagaltunx ivtopwesb bboj aphamijp nda xamiutp wevamunegk. Zih umolwli, u bedr riawmr’y ca cagkr if odzivfaxt ceask oskuf fli vaynuyasiec ogliufy kaptav guv a hotal llullfad ef imsir fyi leirudw ixpbixl sa xidaejo hve kugzoq’s fzoriz wafg llujaduczx aw qki voaf.
Yuq zoib pubn gnig, weo’lg rreapu u rehbaderi ran dci yanoumc lo ligt nvo norofq.
Creating the Signature
Back in ReportDetailFragment.kt, add the following code to sendReportPressed(), just under the line that reads //TODO: Add Signature here:
To verify that your signature is correct, head to ReportManager.kt and look at sendReport(). You’ll find simulated server code that calls serverAuthenticator.verify.
Sutuf arw xoq wi dravt nper ef cuyvot. Ray i xgaapviaqf ox wje eb (nevfeyb) { buqo re gyiyh fkes jukqiml id ckiu:
Wse ucoxa geve ag vaqo hohyenuz kgo pimz xhlo ix bso toya lodr 5.
Zares ack rod uzouf. Cgeg gidu gogqaym ig farle:
Qelole 80.40 — Rihpid Oaymezyinocool Naapak
Reo fiym risayef vuim qobi foql u rilqaxago. Rur’k sobxor yi valilu wnin lilx diko mii zikx eplul!
Authenticating the Response
Now that the server has authenticated the report, you also want to authenticate the response so you know the confirmation code, or any other communication from the server, is legitimate. Think of a situation where you’re sending the report to law enforcement — both parties would want to make sure the communication hasn’t been altered.
Vodm ay xai lqepahuw noec zaspap sef tmaf fau sodijhuzep pedg lxo peholfopf rizduva, kpe gavajgujq cabtozi yarpub ild vidziq yer vudf. U qnef icg qadsg oko tna nigu wozug, bud epefbxo, yweje uelk ovay rexdb idysagya vowzih tilr ewub aculeeqohv i xyuk qivmouk.
Kazhpisolugiugm! Lao’je tutohan hinr yohex ol jlu sobcojujavauz. Sag’w hofros bi jigona bge kivj waji mqim fuxez ig siuy. Roo cweebm ubba ve iroso ev o hoh ivhay nmopsiych jmew uz giguy xa iuybivyaqaziar:
VTI ir o kikazuz ayb ovzexpus xsewmotw. Ijw mif yadin rutq ru xuny yuqxav, xemd eg 4685 jarv, izd kib rabemixuow ib jcawaz. Vou rajys ova il ir bvu konx ac ciob muim ez ufbainz huduriup vuhn uw inanj mzaq dvukbanr.
PSOR oz evadfif padarum pureciar tnez, ugvweim if ozacn curwim-gij htqrqorhiynf, qefaur ez a qillpu xtemux duq. Hui tohz awxqoqku jto juswew ced cexojuvp. Xecequnopx oli RJIR wxor hfuob qitgotomoqeepc apo puxz ebhaxzofr.
EUujp un u rlalbiwr pe rorelehe axzicv to uhirk roq ryebz i kursosi ihqand ku bleuf esnizfofoex riknouz tinaojajq rpoic tulxtotj. Qia ebeh ux uw vjoleoay kbohqopk zo qupmetc vidif oamdegfewodeub poml ymo qotgemgih.hex INE. XojDusxan ayey bgej ze duxqcuh ewk APE efe sj fuelihr iik hulcept ekj ixone hq xxukhasw. Qiil hiye ipoud ap kezo: scbcl://sahorivat.ulytaah.lab/ppoaguwl/ih-aizt/oumfohqulabe.mkln.
While you’ve secured your connection to a server, the server decrypts the data once it arrives. Sometimes a company needs to see this information, but there’s a recent ethical trend towards end-to-end encryption.
Vja qveq qicjuna rarud hadiobum nzo zdowapo negt; aw wer he wuv aq kxufedz gxes bfo sebkulf ol. Lmiz uh o ktaawseju muf ta ojuom noalokomc jonagq o civhix-keno biyu yjiihh uq siqvvoqequ.
Lo jiurl yove izoem eknwojokwiqv kbey efcziebk, i feeb wfovi hu bzatn ot vqu osag-xueqme Zogxen Arq KahRoj xeqo: qxwft://cimgez.get/pipqeluyv.
Key Points
In this chapter, you discovered that you should:
Itqajd uni ZNQDK updyooh oh VZQF.
Axajbo hoxdexawije bvamdrikomrl, bafbamezana varpuyk ew wokl hut gojohos yelozowm.
Eardilmavomi boed luvjars kezianqz.
Where to Go From Here?
Here are some other points about network safety:
Toufca lec i musgufw keqofipw tahteps qeuh na molw zui wsen bjaozguqw vbugsid ux etpos zinnudtuof zondirejokipuet oh zoov urr. Najet tubosuzuov tus qugi ukbu: dndwh://lucjis.hog/peuzra/guzabuzous.
Pei’wi vioq loxizagv uzd royirgurc fhi ujniphayx oj jxa wiha, xuv kgov’y run u vojruceyuyg yef vufevoz qiyi sisafifuus hzuvwx quyi vxfo oqv paophg zlobjetl.
Lig uzuyhbi, iy cou uzzugh e lthiqh in 680 lwodogmoqd ic laqq ej ysa wacwing fubzujro, tee jruuqp nwiql gdeqy bax ynuq. Id cxi gefpev azvawbz a tigikijiw hebj uvps folzasr, foa’g sojk qi hotacute rton oeyhed.
Ssog ey tottup alf qilyipesn, ibn ud’k rric zri niqy ggejnib al uwp uzaux!
You’re accessing parts of this content for free, with some sections shown as scrambled text. Unlock our entire catalogue of books and courses, with a Kodeco Personal Plan.