0

I am new to iOS/SwiftUI development but am trying to develop an app and webapis on my MacBook Pro. I am using VSCode and C# on the backend and calling the webapis from the iPhone simulator.

I have a localhost certificate in my Keychain with a Subject Alternative Name of the ip for my local machine (10.0.0.5). I have this working with Android using 10.0.2.2 (emulator localhost for computer hosting the emulator), so I know it does work.

I can also run the API from the browser using 10.0.0.5 and get the results.

When I run from the simulator I get these error:

2022-01-15 18:05:03.352411-0500 TestApp[24757:274897] [Unknown process name] copy_read_only: vm_copy failed: status 1. calling loadData... loading data... 2022-01-15 18:05:06.008842-0500 TestApp[24757:274902] Connection 1: default TLS Trust evaluation failed(-9807) 2022-01-15 18:05:06.009049-0500 TestApp[24757:274902] Connection 1: TLS Trust encountered error 3:-9807 2022-01-15 18:05:06.009148-0500 TestApp[24757:274902] Connection 1: encountered error(3:-9807) 2022-01-15 18:05:06.010008-0500 TestApp[24757:274902] Task <17311174-24FF-403A-AA1B-4894D097FB41>.<1> HTTP load failed, 0/0 bytes (error code: -1202 [3:-9807]) 2022-01-15 18:05:06.013874-0500 TestApp[24757:274896] Task <17311174-24FF-403A-AA1B-4894D097FB41>.<1> finished with error [-1202] Error Domain=NSURLErrorDomain Code=-1202 "The certificate for this server is invalid. You might be connecting to a server that is pretending to be “10.0.0.5” which could put your confidential information at risk." UserInfo={NSLocalizedRecoverySuggestion=Would you like to connect to the server anyway?, _kCFStreamErrorDomainKey=3, NSErrorPeerCertificateChainKey=( "<cert(0x7fbef400f200) s: localhost i: localhost>" ), NSErrorClientCertificateStateKey=0, NSErrorFailingURLKey=https://10.0.0.5:5001/WeatherForecast, NSErrorFailingURLStringKey=https://10.0.0.5:5001/WeatherForecast, NSUnderlyingError=0x6000023c6490 {Error Domain=kCFErrorDomainCFNetwork Code=-1202 "(null)" UserInfo={_kCFStreamPropertySSLClientCertificateState=0, kCFStreamPropertySSLPeerTrust=<SecTrustRef: 0x600001c58500>, _kCFNetworkCFStreamSSLErrorOriginalValue=-9807, _kCFStreamErrorDomainKey=3, _kCFStreamErrorCodeKey=-9807, kCFStreamPropertySSLPeerCertificates=( "<cert(0x7fbef400f200) s: localhost i: localhost>" )}}, _NSURLErrorRelatedURLSessionTaskErrorKey=( "LocalDataTask <17311174-24FF-403A-AA1B-4894D097FB41>.<1>" ), _kCFStreamErrorCodeKey=-9807, _NSURLErrorFailingURLSessionTaskErrorKey=LocalDataTask <17311174-24FF-403A-AA1B-4894D097FB41>.<1>, NSURLErrorFailingURLPeerTrustErrorKey=<SecTrustRef: 0x600001c58500>, NSLocalizedDescription=The certificate for this server is invalid. You might be connecting to a server that is pretending to be “10.0.0.5” which could put your confidential information at risk.} Invalid data

I followed the instructions from this post to put the NSExceptionDomain I am using. I am having trouble digesting the Overriding TLS Chain Validation Correctly. I followed this thread on Swift 5.1 UIWebView Does not View URL because of untrusted Certificate as well. Also, iOS app ignoring NSAppTransportSecurity.

My Info.plist has this in it:

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
    <key>NSExceptionDomains</key>
    <dict>
        <key>https://10.0.0.5:5001/WeatherForecast</key>
        <dict>
            <key>NSExceptionAllowsInsecureHTTPLoads</key>
            <true/>
            <key>NSIncludesSubdomains</key>
            <true/>
        </dict>
    </dict>
</dict>

I tried a variety of combinations for the key from 10.0.0.5 to https://10.0.0.5:5001/WeatherForecast.

UPDATE

I tried this Domain=NSURLErrorDomain Code 1202 as well, exporting the .cer from keychain and installing it on the emulator, but I still get the same error:

enter image description here

lcj
  • 1,355
  • 16
  • 37
  • What's this? 'https://10.0.0.5:5001/WeatherForecast' –  Jan 15 '22 at 23:37
  • It's the IP of the local machine (10.0.0.5, because we can't use localhost from the simulator) and the port it is listening on (5001) and the webapi (WeatherForecast). WeatherForecast is the autogenerated code for the dotnet webapi so you start off with a functioning webapi. I just returns some json. – lcj Jan 15 '22 at 23:41

0 Answers0