Я пытаюсь получить доступ к веб-службе, доступной по протоколу https. Первоначально я получал следующую ошибку:
NSURLSession/NSURLConnection Ошибка загрузки HTTP (kCFStreamErrorDomainSSL, -9802) errorAn Ошибка SSL и не удалось создать безопасное соединение с сервером.
Я исправил это, добавив следующее в мой info.plist:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
<key>NSExceptionDomains</key>
<dict>
<key>xx.xx.xxx.xxx</key>
<dict>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSThirdPartyExceptionAllowsInsecureHTTPLoads</key>
<true/>
</dict>
</dict>
</dict>
Но теперь я получаю следующее как html в ответе в connectionDidFinishLoading методом делегирования:
ошибка 400, неверный запрос
Неверный запрос
Ваш браузер отправил запрос, который этот сервер не мог понять.
Я использую следующую команду для настройки доверия с сервером:
func connection(connection: NSURLConnection, canAuthenticateAgainstProtectionSpace protectionSpace: NSURLProtectionSpace) -> Bool{
return true
}
func connection(connection: NSURLConnection, willSendRequestForAuthenticationChallenge challenge: NSURLAuthenticationChallenge){
print("willSendRequestForAuthenticationChallenge")
let protectionSpace:NSURLProtectionSpace = challenge.protectionSpace
let sender: NSURLAuthenticationChallengeSender? = challenge.sender
if(protectionSpace.authenticationMethod == NSURLAuthenticationMethodServerTrust){
let trust:SecTrustRef = challenge.protectionSpace.serverTrust!
let credential:NSURLCredential = NSURLCredential.init(forTrust: trust)
sender?.useCredential(credential, forAuthenticationChallenge: challenge)
}
else{
sender?.performDefaultHandlingForAuthenticationChallenge!(challenge)
}
}
Кто-нибудь может помочь мне выяснить проблему?
Update1:
В журналах сервера отображается следующая ошибка:
Имя хоста xx.xx.xxx.xx, предоставленное через SNI и имя хоста my_secured_host_name, предоставленное через HTTP, отличается
Как добавить имя хоста в SNI?
Update2: Я удалил ключ, передав http из info.plist, поскольку служба уже https
Update3: Когда я попытался с openssl как
openssl s_client -showcerts -connect xx.xx.xxx.xxx:443
но я получаю следующую ошибку:
CONNECTED (00000003) 8012: ошибка: 140790E5: процедуры SSL: SSL23_WRITE: сбой рукопожатия ssl:/SourceCache/OpenSSL098/OpenSSL098-52.40.1/src/ssl/s23_lib.c: 185
Update4: Изменен Info.plist следующим образом:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>xx.xx.xxx.xxx</key>
<dict>
<key>NSExceptionRequiresForwardSecrecy</key>
<false/>
<key>NSIncludesSubdomains</key>
<true/>
</dict>
</dict>
</dict>
По-прежнему появляется следующая ошибка:
NSURLSession/NSURLConnection Ошибка загрузки HTTP (kCFStreamErrorDomainSSL, -9802) errorAn Ошибка SSL и не удалось создать безопасное соединение с сервером.
С уважением
Панкай