使用localhost HTTPS连接测试iOS应用程序无效

时间:2018-02-18 18:15:17

标签: ios xcode tomcat https

本周末我已经参加了此次活动,并且不知道接下来会去哪里。

背景:我想用HTTPS测试我的iOS应用程序对我的本地Tomcat服务器。我已经创建了自己的CA根证书和数字身份证书,但是当我通过xcode将物理iphone上的应用程序连接到localhost上的Tomcat服务器时,我遇到了错误。

我得到的错误是: NSURLErrorDomain代码:18446744073709550416 _kCFStreamErrorCodeKey:-9800

(来自xcode的截图): screencapture of error in xcode

设定: 1)我有一个运行在localhost上的Tomcat服务器(在我的macbook上)。我安装了xcode,我在模拟器上运行iOS应用程序;我的物理iphone也连接到了我的macbook。

我的server.xml文件如下:

2)我有一个运行在AWS上的tomcat服务器的镜像,其中包含来自ssls.com的签名密钥。一切都很好用。

3)此外,我可以通过HTTP在我的本地主机上成功连接我的应用程序和我的tomcat服务器。

http://localhost:8080/thetest/thetest

4)我可以通过https连接模拟器到我的tomcat而没有问题。 (以前我无法连接,而且我的物理iphone设备上出现了类似的错误。)

https://localhost:8443/thetest/thetest

证书: 我按照这些说明来发球 https://developer.apple.com/library/content/technotes/tn2326/_index.html#//apple_ref/doc/uid/DTS40014136

测试: A)我可以通过我的macbook上的chrome和safari执行命令并连接到我的tomcat服务器而不会出现问题 - 没有警告。

secure on chrome

B)我可以连接我的iOS模拟器,连接没有问题。

  

2018-02-18 10:07:26.741348-0800 folie [13634:1105541] [MC]懒加载   NSBundle MobileCoreServices.framework

     

2018-02-18 10:07:26.742612-0800 folie [13634:1105541] [MC]已加载   MobileCoreServices.framework

     

2018-02-18 10:07:30.068718-0800 folie [13634:1105541] [MC]系统组   systemgroup.com.apple.configurationprofiles路径的容器是   /Users/me/Library/Developer/CoreSimulator/Devices/7C6DF662-D026-419F-BDEC-96C130628095/data/Containers/Shared/SystemGroup/systemgroup.com.apple.configurationprofiles

     

2018-02-18 10:07:30.070359-0800 folie [13634:1105541] [MC]阅读   私人有效用户设置。

     

2018-02-18 10:07:32.203212-0800 folie [13634:1105541] - [ViewController   注册:] - 107

     

2018-02-18 10:07:40.315781-0800 folie [13634:1106003]收到的数据   来自SIGNUP按钮:   HelloTESTING ...

C)当我在物理IOS设备上运行我的测试应用程序时,我得到以下输出:

2018-02-18 09:50:26.555890-0800 folie[5058:1225079] [MC] Lazy loading NSBundle MobileCoreServices.framework

2018-02-18 09:50:26.558353-0800 folie[5058:1225079] [MC] Loaded MobileCoreServices.framework

2018-02-18 09:50:29.640089-0800 folie[5058:1225079] [MC] System group container for systemgroup.com.apple.configurationprofiles path
     

是   /private/var/containers/Shared/SystemGroup/systemgroup.com.apple.configurationprofiles

2018-02-18 09:50:29.642837-0800 folie[5058:1225079] [MC] Reading from public effective user settings.

2018-02-18 09:50:37.833201-0800 folie[5058:1225079] -[ViewController SignUp:] - 107

2018-02-18 09:50:42.444278-0800 folie[5058:1225149] [BoringSSL] Function nw_protocol_boringssl_handshake_negotiate_proceed: line 387
     

握手失败。断开会话

2018-02-18 09:50:42.446312-0800 folie[5058:1225149] TIC TCP Conn Failed [1:0x1c0165b80]: 3:-9800 Err(-9800)

2018-02-18 09:50:42.451062-0800 folie[5058:1225149] TIC TCP Conn Failed [2:0x1c4165100]: 3:-9800 Err(-9800)

2018-02-18 09:50:42.455194-0800 folie[5058:1225149] TIC TCP Conn Failed [3:0x1c4165340]: 3:-9800 Err(-9800)

2018-02-18 09:50:42.455519-0800 folie[5058:1225149] NSURLSession/NSURLConnection HTTP load failed
     

(kCFStreamErrorDomainSSL,-9800)

2018-02-18 09:50:42.455650-0800 folie[5058:1225149] Task <B07F6A46-BE52-4439-A300-AF4C905AAD35>.<1> HTTP load failed (error
     

代码:-1200 [3:-9800])

2018-02-18 09:50:42.456039-0800 folie[5058:1225223] Task <B07F6A46-BE52-4439-A300-AF4C905AAD35>.<1> finished with error - code:
     

-1200

证书: iphone和模拟器都安装了相同的根证书

sim

physical iphone

D)我运行的最后一个测试是在绑定设备并关闭单元和wifi后,使用chrome和safari浏览器测试从我的物理设备访问tomcat服务器。 Safari没有显示页面,chrome显示以下错误:ERR_SSL_PROTOCOL_ERROR

chrome browser ON iphone physical device

1 个答案:

答案 0 :(得分:0)

解决方法是使用特定主机名而不是@hostddy建议的localhost。

步骤:

  1. 编辑server.xml文件:
  2. <Connector SSLEnabled="true"
               clientAuth="false"
                 keyalias="**therealhostname**"
             keystoreFile="conf/teststorespec.jks"
             keystorePass="changeit"
               maxThreads="150"
                     port="8443"
                 protocol="org.apache.coyote.http11.Http11NioProtocol"
                   scheme="https"
                   secure="true"
              sslProtocol="TLS"/>
    
    1. 创建证书时:使用主机名作为证书的名称以及dns名称。请参阅server.xml文件中的名称。

    2. 编辑iOS应用以指向特定主机名(例如https://hostname&#34;而不是&#34; localhost&#34;。