Xcode 8.2.1 Swift 3 IOS10 Zugriff auf Server via GET nicht möglich

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Xcode 8.2.1 Swift 3 IOS10 Zugriff auf Server via GET nicht möglich

    Hallo Zusammen,

    beim Zugriff auf meinen eigenen Server (nutzte ein eigenes Zertifikat) erhalte ich folgenden Fehler:
    "NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9813)
    error is Optional(Error Domain=NSURLErrorDomain Code=-1202"

    Die URL (welche ich innerhalb der Single View Application aufrufe) habe ich mit Safari geöffnet und dem Zertifikat den Status "Immer vertrauen" zugeordnet.

    In der info.plist habe ich nachfolgende Einträge vorgenommen s. OSXEntwicklerforum.jpg

    Eine Reihe weiterer Einträge für die info.plist habe ich auf meiner Suche im WWW gefunden und ausprobiert und außer dass sich die Fehlernummer von 9813 auf 9801 bis 9812 änderte, hat es nicht zum gewünschten Effekt geführt.

    Hat vielleicht jemand eine Idee?

    Besten Dank.
    Dateien
  • Meine Vorgehensweise ist bestimmt nicht ideal, dies will ich auch gar nicht erörtern.

    OS X Apps funktionieren nach dem ausschalten von ATS einwandfrei.

    Der Server läuft bereits mit TLS 1.2. Des Weiteren habe ich mal eine Ausnahme für den Server bzw. die Domäne in der info.plist (TLS Versionen 1.0 bis 1.2) eingetragen. Auch dies hat nicht gefruchtet.

    Der Zugriff via HTTP führt zur selben Fehlermeldung. Deshalb bin ich ja so irritiert. Ich habe nun eine Klassen-Methode (Sourcecode aus dem Internet) implementiert und auch dies führt zu dieser Fehlermeldung. Also gehe ich davon aus, dass es sich um ein generelles (evtl. Verständnis-) Problem handelt.

    Mir gehen aber die Ideen aus, deshalb suche ich hier nach Vorschlägen bzw. Hinweisen.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von OSXDev ()

  • Wie bereits mitgeteilt, war ich mir nicht sicher ob es an meinem Code liegt. Deshalb nutzte ich augenblicklich die aus dem Internet geladene Funktion (Quelle: kaleidosblog.com). Da diese mir ebenfalls die selbe Fehlermeldung liefert, gehe ich mal nicht davon aus, dass es am Sourcecode (s.Anhang) liegt.
    Dateien
    • I-Net_Code.jpg

      (75,73 kB, 210 mal heruntergeladen, zuletzt: )
  • @matz
    Das ist nicht mein Sourcecode und ich werde hierzu keine Bewertung abgeben! Im übrigen hatte ich darauf hingewiesen, dass es nicht der ursprüngliche Code ist. Es spielt keine Rolle ob GET oder POST verwendet wird. Die Fehlermeldung bleibt.

    @gritsch
    Man(n) sieht den Wald vor lauter Bäumen nicht. Das habe ich tatsächlich noch nicht in Erwägung gezogen. Werde es gleich mal mit einem anderem Server testen.

    @torquato
    Danke für den Hinweis. Swift 3 befindet sich bereits im Einsatz.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von OSXDev ()

  • OSXDev schrieb:

    Das ist nicht mein Sourcecode und ich werde hierzu keine Bewertung abgeben!

    Wenn das nicht Dein Code ist, weiß ich nicht, was der hier soll? ?(

    Die guard let-Abfragen sind z.B. murks.

    Das sollte eher so aussehen:

    Quellcode

    1. if let error = error {
    2. print(error)
    3. return
    4. }
    Das iPhone sagt: "Zum Antworten streichen". Wie? Echt Jetzt? Muß ich erst die Wohnung streichen!?
  • @gritsch, (@'NSObject')

    Vermutung das es am Server liegt hat sich teilweise bestätigt. Bin Deinem Vorschlag gefolgt und habe es mit einem anderem Server getestet. Ergebnis s. u..


    @macmoonshine

    Aufruf via http funktioniert auf einem anderem Server ohne Probleme.
    Aufruf via https erzeugt die bereits mitgeteilte Fehlermeldung.

    Auf einem weiteren Server laufen die Routinen ohne Probleme.

    @torquato

    Nun ja - ich konnte nicht ausschliessen, dass es an meinem Verständnis bzw. an meinem Sourcecode liegt. Deshalb wie gritsch bereits angemerkt hat, bin ich nach dem Ausschlussverfahren vorgegangen und habe testweise einen bereits bestätigten Sourcecode implementiert und verwendet.


    Nachdem ich nun weitere Testläufe mit anderen Servern durchgeführt habe und die Routinen bzw. die App auf dem letzten Server ohne Probleme läuft, festigt sich bei mir meine erste Vermutung, dass es nicht wirklich etwas mit meiner App zu tun hat. Denn die für OS X geschriebenen Apps laufen ja auch ohne Probleme.
  • Sorry aber liege ich da eigentlich total falsch? Wenn er auf Safari erst bestätigen muss das er dem Zeritifikat vertraut, dann ist das ja wohl ein selbst erstelltes Zertifikat. Das das nicht aus einer App heraus funktionieren kann ist doch logisch oder etwa nicht?
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • Thallius schrieb:

    Sorry aber liege ich da eigentlich total falsch? Wenn er auf Safari erst bestätigen muss das er dem Zeritifikat vertraut, dann ist das ja wohl ein selbst erstelltes Zertifikat. Das das nicht aus einer App heraus funktionieren kann ist doch logisch oder etwa nicht?
    Wenn du in Safari (oder Schlüsselbundverwaltung) dieses Zuertifkat als vertrauenswürdig kennzeichnest, dann gilt das auch für die APIs.
  • NSObject schrieb:

    gritsch schrieb:

    lad mal mittels

    Quellcode

    1. /usr/bin/nscurl —ats-diagnostics URL
    eine datei von deinem server dann solltest du die probleme sehen!
    Da fehlt jedoch ein Bindestrich. So läuft's:

    Quellcode

    1. nscurl --ats-diagnostics https://osxentwicklerforum.de
    Drecks smart-copy-paste das überall aktiv ist. Mach taus zwei minus einen gedankenstrich. Wie oft das probleme gibt wenn man einen befehl oder sonstwas per e-mail schickt und dann die abschliesenden quotes automatisch ersetzt werden. Ich könnte kotzen!
  • Hat etwas länger gedauert alles durch zu testen und zu bereinigen. Folgende Ergebnisse:

    Server 1(Ursprungsserver mit diesem muss die App laufen): Alle Tests bestanden bis auf den Ersten -
    Default ATS Secure Connection
    ---
    ATS Default Connection
    2017-03-09 08:58:27.793 nscurl[1144:206764] NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9802)
    Result : FAIL

    Es spielt keine Rolle ob nscurl mit http oder https ausgeführt wird. Die Fehlermeldung ändert sich nicht und die App meldet mir ebenfalls den selben Fehler. Manchmal jedoch auch mit der Nummer -9813. ?(

    Bei Server 2 und 3 funktioniert der Zugriff aus der App heraus mittlerweile einwandfrei. Die Abfrage mittels nsurl ergibt ebenfalls keine Fehler.

    Durch das Ausschalten von ATS mittels der Einträge in der info.plist sollte der Fehler doch keine Auswirkung hinsichtlich des Zugriffes haben. Dachte ich zumindest, scheint aber nicht so zu sein. Hat jemand eine Idee wie der Fehler auf Server 1 behoben werden kann oder zumindest vorübergehend von der App aus unterdrückt werden kann?