API одговара у Safari-ју на истом телефону, а захтев апликације истиче. Та разлика обично није тунел: апликација која позива интерну услугу шаље обичан HTTPS захтев, а постојећи VPN на уређају само одлучује да ли тај захтев има пут. Уписивање другог тунела у апликацију је производна одлука, а не поправка за истек. Следеће класификује неуспех према томе где настаје, користећи површину грешака коју апликација већ има.

Почните од грешке, а не од тунела

URLSession пријављује транспортне неуспехе као NSError вредности у NSURLErrorDomain, а код је најјефтинији доступан доказ. Пре него што промените било коју конфигурацију, забележите тај код заједно са именом хоста који не успева и протеклим временом задатка. Истек, неуспех имена и неуспех поверења изгледају исто на екрану и захтевају три различите поправке. Прво класификујте, затим прочитајте одељак за ту класу.

Метрике задатка одговарају на следеће питање, да ли је веза икада успостављена, што раздваја захтев који никада није имао руту од оног на који је сервер одговорио прекасно. Ништа од овога не захтева измену тунела; захтева да се дијагностика самог захтева одштампа негде где можете да је прочитате.

Резолуција имена не успева пре свега осталог

Кратко канцеларијско име као api.corp.example обично зависи од домена за претрагу који телефон не носи, па апликација разрешава име које постоји само унутар зграде. NSURLErrorCannotFindHost је потпис. Пуно име хоста мора да се разреши кроз било који резолвер који инсталира VPN, а апликација треба да затражи потпуно квалификовани облик кад год домен за претрагу није загарантован. Замена имена адресом и искључивање провера сертификата премешта неуспех уместо да га поправља.

Приватни DNS запис и сертификат издат тачно за то име су подржани пар. Све остало је заобилазно решење које стиже до корисника.

Истек је питање пута, а не имена

NSURLErrorTimedOut значи да је име разрешено и ништа није одговорило, што упућује на руту, политику пакета или услугу. Када се тунел додељује по апликацији, друга апликација која стиже до истог сервера не говори ништа о вашој изградњи, јер то мапирање није дељено. Проверите да ли је пакет који извршавате унутар те доделе, затим проверите да ли је пут услуге за њега дозвољен. Развојна изградња инсталирана изван доделе може стајати потпуно изван тунела и изгледати као покварен API.

Поређење у прегледачу показује да нека апликација на уређају има пут. Оно никада не доказује да га ваша изградња има, зато се два теста морају извести одвојено.

Неуспеси поверења тичу се имена на сертификату

NSURLErrorServerCertificateUntrusted заједно са TLS грешком испод њега значи да ланац или провера идентитета није успела. Интерни CA мора бити поуздан на уређају, а сертификат издат за друго име хоста остаје погрешан након било каквог преконфигурисања мреже. Упутство App Transport Security компаније Apple се и даље примењује на ове везе које учитавају URL, а тунел око обичне HTTP услуге не чини ту услугу безбедном од краја до краја.

Поправите идентитет или сидро поверења и држите листу изузетака празном. Општи изузетак за произвољно учитавање крије неуспех током развоја и оставља га на месту за сваког корисника после.

HTTP одбијање припада апликацији, а не мрежи

401 или 403 након завршеног руковања значи да је захтев стигао и услуга га је одбила, па је преостало питање налог, публика токена, обим или кључ. Забележите код статуса и име хоста, никада носећи токен или тело одговора. У том тренутку тунел ради свој посао, а даље мрежне измене само одлажу праву поправку.

Табела је класификација коју треба држати поред терминала: један ред за сваки неуспех о ком апликација заиста може да извести. Одштампајте код пре него што га прочитате, јер ред који изаберете одлучује који ћете одељак обрадити.

Where it failsWhat the app seesFirst check
name resolutionNSURLErrorCannotFindHost (-1003)resolve the fully qualified name from the device itself
no path, or no answerNSURLErrorTimedOut (-1001)is this bundle inside the per-app mapping, and is the service path allowed
TLS trustNSURLErrorServerCertificateUntrusted (-1202)does the certificate name match the host, and is the internal CA trusted
service refusalHTTP 401 or 403 after a completed handshakeaccount, token audience, scope or key

Сваки ред је јефтинији за тестирање од оног испод њега, и сваки искључује други слој истог захтева. Идите низ табелу док се ред не поклопи, затим престаните да мењате мрежу.

Повезани чланци