Kuidas kutsuda iPhone'i rakendusest VPN-i kaudu välja sisemist API-t
Klassifitseerige nurjunud päring selle NSURLError-koodi järgi enne tunnelit puudutamast ja parandage seejärel täpselt see kiht, mis katki läks.
API vastab samas telefonis Safaris, samal ajal kui rakenduse päring jookseb ajapiirini. See vahe ei ole tavaliselt tunnel: sisemist teenust kutsuv rakendus teeb tavalise HTTPS-päringu ja seadmes juba olev VPN otsustab ainult, kas sellel päringul on tee. Teise tunneli rakendusse kirjutamine on tooteotsus, mitte ajapiiri parandus. Järgnev klassifitseerib nurjumise selle järgi, kus see juhtub, kasutades veapinda, mis rakendusel juba on.
Alustage veast, mitte tunnelist
URLSession teatab transporditõrgetest kui NSError väärtustest NSURLErrorDomain sees, ja kood on odavaim saadaolev tõend. Enne mis tahes seadistuse muutmist logige see kood koos nurjuva hostinime ja ülesande möödunud ajaga. Ajapiir, nime nurjumine ja usalduse nurjumine näevad ekraanil ühesugused välja ning nõuavad kolme erinevat parandust. Kõigepealt klassifitseerige, seejärel lugege selle klassi jaotist.
Ülesande mõõdikud vastavad järgmisele küsimusele, kas ühendus üldse loodi, mis eristab päringut, millel ei olnud kunagi marsruuti, sellest, millele server vastas liiga kaua. Miski sellest ei nõua tunneli muutmist; see nõuab päringu enda diagnostika printimist kohta, kus saate seda lugeda.
Nimede lahendamine nurjub enne kõike muud
Lühike kontorinimi nagu api.corp.example sõltub tavaliselt otsingudomeenist, mida telefon ei kanna, nii et rakendus lahendab nime, mis eksisteerib ainult hoone sees. NSURLErrorCannotFindHost on allkiri. Täielik hostinimi tuleb lahendada ükskõik millise resolveri kaudu, mille VPN paigaldab, ja rakendus peaks küsima täielikult kvalifitseeritud kuju alati, kui otsingudomeen ei ole tagatud. Nime asendamine aadressiga ja sertifikaadikontrollide väljalülitamine liigutab nurjumist, selle asemel et seda parandada.
Privaatne DNS-kirje ja täpselt selle nime jaoks välja antud sertifikaat on toetatud paar. Kõik muu on möödasõit, mis jõuab kasutajateni.
Ajapiir on tee, mitte nime küsimus
NSURLErrorTimedOut tähendab, et nimi lahendati ja miski ei vastanud, mis viitab marsruudile, paketipoliitikale või teenusele. Kui tunnel on määratud rakenduse kaupa, ei ütle teine rakendus, mis jõuab samasse serverisse, teie buildi kohta midagi, sest see vastendus ei ole jagatud. Kontrollige, et käivitatav komplekt on selle määramise sees, ja seejärel kontrollige, et teenuse tee on selle jaoks lubatud. Väljaspool määramist paigaldatud arendusbuild võib asuda täielikult väljaspool tunnelit ja näida katkise API-na.
Brauseri võrdlus näitab, et mõnel seadme rakendusel on tee. See ei tõesta kunagi, et teie buildil see on, mistõttu tuleb kaks testi teha eraldi.
Usalduse nurjumised puudutavad sertifikaadil olevat nime
NSURLErrorServerCertificateUntrusted koos selle all oleva TLS-vigaga tähendab, et ahel või identiteedikontroll nurjus. Sisemine CA peab olema seadmes usaldusväärne, ja teise hostinime jaoks välja antud sertifikaat on pärast mis tahes võrgu ümberseadistamist endiselt vale. Apple'i App Transport Security juhis kehtib endiselt nende URL-i laadivate ühenduste kohta, ja tavalise HTTP-teenuse ümber olev tunnel ei muuda seda teenust otsast otsani turvaliseks.
Parandage identiteet või usaldusankur ja hoidke erandite loend tühi. Üldine erand suvaliseks laadimiseks peidab vea arenduse ajal ja jätab selle hiljem iga kasutaja jaoks alles.
HTTP keeldumine kuulub rakendusele, mitte võrgule
401 või 403 pärast lõpetatud kätlust tähendab, et päring jõudis kohale ja teenus keeldus sellest, seega jääb küsimus kontost, loa sihtrühmast, ulatusest või võtmest. Logige olekukood ja hostinimi, mitte kunagi kandetoken ega vastuse keha. Sel hetkel teeb tunnel oma tööd ja edasised võrgumuudatused ainult lükkavad tegelikku parandust edasi.
Tabel on klassifikatsioon, mida terminali kõrval hoida: üks rida iga nurjumise kohta, millest rakendus tõesti teatada saab. Printige kood enne, kui seda loete, sest valitud rida otsustab, millise jaotise te läbi töötate.
| Where it fails | What the app sees | First check |
|---|---|---|
| name resolution | NSURLErrorCannotFindHost (-1003) | resolve the fully qualified name from the device itself |
| no path, or no answer | NSURLErrorTimedOut (-1001) | is this bundle inside the per-app mapping, and is the service path allowed |
| TLS trust | NSURLErrorServerCertificateUntrusted (-1202) | does the certificate name match the host, and is the internal CA trusted |
| service refusal | HTTP 401 or 403 after a completed handshake | account, token audience, scope or key |
Iga rida on odavam testida kui selle all olev, ja igaüks välistab sama päringu erineva kihi. Liikuge tabelis alla, kuni rida sobib, ja lõpetage seejärel võrgu muutmine.