Die API antwoord in Safari op dieselfde foon, en die app se versoek hou aan tyd uit. Daardie gaping is gewoonlik nie die tonnel nie: ’n app wat ’n interne diens aanroep, maak ’n gewone HTTPS-versoek, en die toestel se bestaande VPN besluit net of daardie versoek ’n pad het. Om ’n tweede tonnel in die app te bou, is ’n produkbesluit, nie ’n herstel vir ’n tydsverloop nie. Wat volg, klassifiseer die fout volgens waar dit gebeur, met die foutoppervlak wat die app reeds het.

Begin by die fout, nie by die tonnel nie

URLSession rapporteer vervoerfoute as NSError-waardes in NSURLErrorDomain, en die kode is die goedkoopste bewys beskikbaar. Voordat jy enige konfigurasie verander, teken daardie kode saam met die mislukte gasheernaam en die taak se verstreke tyd aan. ’n Tydsverloop, ’n naamfout en ’n vertrouensfout lyk dieselfde op die skerm en verg drie verskillende herstellings. Klassifiseer eers, lees dan die afdeling vir daardie klas.

Taakmaatstawwe beantwoord die opvolgvraag, of daar ooit ’n verbinding opgestel is, wat ’n versoek wat nooit ’n roete gehad het nie, skei van een waarop die bediener te lank geneem het om te antwoord. Niks hiervan vereis dat die tonnel verander word nie; dit vereis dat die versoek se eie diagnostiek op ’n leesbare plek gedruk word.

Naamresolusie misluk voordat enigiets anders kan

’n Kort kantoornaam soos api.corp.example hang gewoonlik van ’n soekdomein af wat die foon nie dra nie, so die app los ’n naam op wat net binne die gebou bestaan. NSURLErrorCannotFindHost is die handtekening. Die volle gasheernaam moet deur watter resolusieprogram die VPN ook al installeer, opgelos word, en die app moet die ten volle gekwalifiseerde vorm aanvra wanneer die soekdomein nie gewaarborg is nie. Om die naam vir ’n adres te ruil en sertifikaatkontroles af te skakel, skuif die fout eerder as om dit reg te maak.

’n Privaat DNS-rekord en ’n sertifikaat wat vir daardie presiese naam uitgereik is, is die ondersteunde paar. Alles anders is ’n noodoplossing wat na gebruikers verskeep word.

’n Tydsverloop is ’n vraag oor die pad, nie oor die naam nie

NSURLErrorTimedOut beteken die naam is opgelos en niks het geantwoord nie, wat na die roete, die pakketbeleid of die diens wys. Wanneer die tonnel per toepassing toegewys word, sê ’n ander app wat dieselfde bediener bereik niks oor jou bou nie, want daardie kartering word nie gedeel nie. Kontroleer dat die bundel wat jy hardloop binne daardie toewysing is, en kontroleer dan dat die dienspad daarvoor toegelaat word. ’n Ontwikkelingsbou wat buite die toewysing geïnstalleer is, kan heeltemal buite die tonnel sit en soos ’n stukkende API lyk.

’n Blaaiervergeliking wys dat een of ander app op die toestel ’n pad het. Dit bewys nooit dat jou bou dit het nie, en daarom moet die twee toetse afsonderlik uitgevoer word.

Vertrouensfoute gaan oor die naam op die sertifikaat

NSURLErrorServerCertificateUntrusted beteken saam met die TLS-fout daaronder dat die ketting of die identiteitskontrole misluk het. ’n Interne CA moet op die toestel vertrou word, en ’n sertifikaat wat vir ’n ander gasheernaam uitgereik is, is steeds verkeerd ná enige hoeveelheid netwerkkonfigurasie. Apple se riglyn vir App Transport Security geld steeds vir hierdie URL-ladende verbindings, en ’n tonnel om ’n gewone HTTP-diens maak nie daardie diens end-tot-end veilig nie.

Maak die identiteit of die vertrouensanker reg en hou die uitsonderingslys leeg. ’n Algemene uitsondering vir arbitrêre lading verberg die fout tydens ontwikkeling en laat dit daarna vir elke gebruiker in plek.

’n HTTP-weiering hoort by die app, nie by die netwerk nie

’n 401 of 403 op ’n voltooide handdruk beteken die versoek het aangekom en die diens het dit van die hand gewys, so die oorblywende vraag is ’n rekening, ’n token-gehoor, ’n omvang of ’n sleutel. Teken die statuskode en die gasheernaam aan, nooit die draer-token of die antwoordliggaam nie. Op daardie punt doen die tonnel sy werk en verdere netwerkveranderinge vertraag net die werklike regstelling.

Die tabel is die klassifikasie om langs die terminal te hou: een ry per fout wat die app werklik kan rapporteer. Druk die kode voordat jy dit lees, want die ry wat jy kies, bepaal watter afdeling jy deurwerk.

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

Elke ry is goedkoper om te toets as die een daaronder, en elke ry sluit ’n ander laag van dieselfde versoek uit. Werk af in die tabel tot ’n ry pas, en stop dan om die netwerk te verander.

Verwante artikels