使用Swift从XCode调用HTTPS服务时出现错误,我不明白为什么。我使用的URL是HTTPS URL,服务调用可以正常工作,但是我必须将“允许任意负载”设置设为YES,以便服务调用能够正常工作。如果我没有该设置,则服务调用将失败,并显示以下内容:
2018-10-31 09:56:57.362568 + 0200 APPNAME [1691:69141] [BoringSSL] boringssl_context_alert_callback_handler(3747)[C1.1:2] [0x7fcb6171e660]警报级别:致命,描述:协议版本 2018-10-31 09:56:57.362750 + 0200 APPNAME [1691:69141] [BoringSSL] boringssl_context_error_print(3699)boringssl ctx 0x600000a87ea0:140511489945352:error:100000f0:SSL 例程:OPENSSL_internal:UNSUPPORTED_PROTOCOL:/BuildRoot/Library/Caches/com.apple.xbs/Sources/boringssl_Sim/boringssl-109.202.1/ssl/handshake_client.cc:569: 2018-10-31 09:56:57.363026 + 0200 APPNAME [1691:69141] [BoringSSL] boringssl_context_get_error_code(3540)[C1.1:2] [0x7fcb6171e660] SSL_AD_PROTOCOL_VERSION 2018-10-31 09:56:57.369545 + 0200 APPNAME [1691:69141] TIC TCP连接失败[1:0x600003d95c80]:3:-9836 Err(-9836) 2018-10-31 09:56:57.375719 + 0200 APPNAME [1691:69141] NSURLSession / NSURLConnection HTTP加载失败(kCFStreamErrorDomainSSL,-9836) 2018-10-31 09:56:57.375903 + 0200 APPNAME [1691:69141]任务。<1> HTTP加载失败(错误代码:-1200 [3:-9836]) 2018-10-31 09:56:57.376267 + 0200 APPNAME [1691:69140]任务。<1>完成,错误-代码:-1200 在/ todos / 1上调用GET时出错 错误域= NSURLErrorDomain代码= -1200“发生SSL错误,无法建立与服务器的安全连接。” UserInfo = {_ kCFStreamErrorCodeKey = -9836,NSLocalizedRecoverySuggestion =您是否仍要连接到服务器?, NSUnderlyingError = 0x6000006c8030 {Error Domain = kCFErrorDomainCFNetwork Code = -1200“(null)” UserInfo = {_ kCFStreamPropertySSLClientCertificateState = 0,_kCFNetworkCFStreamSSLErrorOriginalValue = -9836,_kCFStreamErrorDomainKey = 3, _kCFStreamErrorCodeKey = -9836}}, NSLocalizedDescription =发生SSL错误,无法与服务器建立安全连接。 NSErrorFailingURLKey = https://MYURL,NSErrorFailingURLStringKey = https:/ MYURL,_kCFStreamErrorDomainKey = 3}
我不明白为什么会出现此错误,因为URL可以正常工作并且在不启用该设置的情况下可以安全地连接,为什么在禁用该设置并且仍在使用HTTPS的情况下得到此错误?
任何帮助将不胜感激。
答案 0 :(得分:2)
IOS将阻止不符合ATS要求的不安全连接。可以是以下之一:
ATS使用传输层 安全(TLS)协议版本1.2(RFC 5246)。
连接必须使用AES-128或AES-256对称密码。协商的TLS连接密码套件必须通过椭圆曲线Diffie-Hellman临时(ECDHE)密钥交换来支持完美的前向保密(PFS),并且必须是以下之一: TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
叶子服务器证书必须使用以下类型的密钥之一进行签名: Rivest-Shamir-Adleman(RSA)密钥,长度至少为2048位 椭圆曲线密码术(ECC)密钥,大小至少为256位 此外,叶服务器证书散列算法必须是摘要长度(有时也称为“指纹”)至少为256(即SHA-256或更大)的安全散列算法2(SHA-2)。 本部分列出的要求是本文档发布之日起的最新要求,将来可能会更严格。对这些要求的更改不会破坏应用程序二进制兼容性。
启用ATS后,HTTP连接必须使用HTTPS(RFC 2818)。尝试次数 使用不安全的HTTP连接失败。