verificacion sufrido servidor segura restablecer pudo producido podido intentar este establecer error enlace durante desconocido contenido conexión conectarse conectar con borrar autenticacion ios swift ssl-certificate alamofire nsurlsession

sufrido - iOS 9.3: se ha producido un error de SSL y no se puede establecer una conexión segura con el servidor



itunes no pudo establecer conexión con este iphone (4)

Estoy recibiendo error siguiente con certificado autofirmado

Dominio de error = NSURLErrorDomain Code = -1200 "Se produjo un error de SSL y no se puede establecer una conexión segura con el servidor.

mientras probaba servicios web para una de mis aplicaciones de demostración con

Nota: antes de asumir su Duplicado, solicito que lo lea todo el camino, incluso he informado a los foros de Apple Dev.

Usando la biblioteca de Alamofire

func testAlamofireGETRequest() -> Void { Alamofire.request(.GET, "https://filename.hostname.net/HelloWeb/service/greeting/john") .responseJSON { response in print("Response JSON: /(response.result.value)") } }

Utilizando NSURLSession

func testNSURLSessionRequest() -> Void { let session = NSURLSession.sharedSession() let urlString = "https://filename.hostname.net/HelloWeb/service/greeting/john" let url = NSURL(string: urlString) let request = NSURLRequest(URL: url!) let dataTask = session.dataTaskWithRequest(request) { (data:NSData?, response:NSURLResponse?, error:NSError?) -> Void in print("done, error: /(error)") //Error Domain=NSURLErrorDomain Code=-1200 "An SSL error has occurred and a secure connection to the server cannot be made. } dataTask.resume() }

Pasé 2 días sin suerte :(

Hay un montón de preguntas ya publicadas pero nada me funcionó.

publicado Alamofire git problema

Mi archivo Info.pist se actualiza para la configuración ATS de esta manera

<key>NSAppTransportSecurity</key> <dict> <key>NSExceptionDomains</key> <dict> <key>filename.hostname.net</key> <dict> <key>NSExceptionRequiresForwardSecrecy</key> <false/> <key>NSExceptionAllowsInsecureHTTPLoads</key> <true/> <key>NSIncludesSubdomains</key> <true/> <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key> <true/> </dict> </dict> </dict>

Mientras tanto soy capaz de obtener respuesta para

http : // nombre de archivo.

y https : //google.com

pero no para https : //filename.hostname.net

¿Alguien puede sugerirme por qué no puedo hacer que esto funcione después de grandes esfuerzos?


Apple ha lanzado la lista completa de requisitos para la Seguridad de transporte de aplicaciones.

Resultó que estábamos trabajando con TLS v1.2 pero faltaban algunos de los otros requisitos.

Aquí está la lista de verificación completa :

  • TLS requiere al menos la versión 1.2.
  • Los cifrados de conexión están limitados a aquellos que brindan secreto hacia adelante (consulte a continuación la lista de cifrados).
  • El servicio requiere un certificado que use al menos una huella dactilar SHA256 con una clave RSA de 2048 bits o superior, o una clave de curva elíptica (ECC) de 256 bits o más.
  • Los certificados no válidos dan como resultado un error de hardware y ninguna conexión.
  • Los sistemas de cifrado aceptados son: 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

En la línea de comandos en OS X, ejecute lo siguiente:

nscurl --ats-diagnostics https://filename.hostname.net --verbose

Esto le dirá qué combinaciones de configuración ATS permitirá y no permitirá que iOS acceda a su sitio, y le indicará qué es lo que está mal en su sitio.

Podría ser uno o más de los siguientes

  • Algoritmo de hash del certificado (debe ser SHA-256 o superior)
  • Versión TLS (debe ser 1.2)
  • Algoritmos TLS (debe proporcionar secreto perfecto hacia adelante)

Supongo que el servidor al que intenta conectarse tiene certificados no válidos o no coincide con los estándares de iOS 9 para ECC, cifrados, etc.

  • Si está utilizando API de red de alto nivel (NSURLSession, NSURLConnection, o cualquier otra cosa superpuesta a esas), no tiene control directo sobre las suites de cifrado que ofrece el cliente. Esas API eligen un conjunto de suites de cifrado utilizando su propia lógica interna.

  • Si está utilizando API de red de nivel inferior (CFSocketStream, a través de sus API NSStream y CFStream, y cualquier otra cosa inferior), puede elegir explícitamente el conjunto de suites de cifrado que desea usar. Cómo haces esto depende de la API específica.

La práctica estándar es:

  1. crear el par de secuencias

  2. configurarlo para TLS

  3. obtener el contexto de transporte seguro utilizando la propiedad kCFStreamPropertySSLContext

  4. configurar propiedades específicas en ese contexto

  5. abre los arroyos

Puede ver un ejemplo de esto en el código de ejemplo de TLSTool. Específicamente, observe la clase TLSToolServer , donde puede ver exactamente esta secuencia.

En un contexto muy corto, desea configurar el flujo de manera que evite la seguridad, sin embargo, en el caso de Alamofire, puede hacerlo directamente mediante:

func bypassAuthentication() { let manager = Alamofire.Manager.sharedInstance manager.delegate.sessionDidReceiveChallenge = { session, challenge in var disposition: NSURLSessionAuthChallengeDisposition = .PerformDefaultHandling var credential: NSURLCredential? if challenge.protectionSpace.authenticationMethod == NSURLAuthenticationMethodServerTrust { disposition = NSURLSessionAuthChallengeDisposition.UseCredential credential = NSURLCredential(forTrust: challenge.protectionSpace.serverTrust!) } else { if challenge.previousFailureCount > 0 { disposition = .CancelAuthenticationChallenge } else { credential = manager.session.configuration.URLCredentialStorage?.defaultCredentialForProtectionSpace(challenge.protectionSpace) if credential != nil { disposition = .UseCredential } } } return (disposition, credential) } }

Déjame saber si eso ayuda. ¡Gracias!


Tuve el mismo escenario y me quedé atascado por un día. Intente con sus datos móviles, si esto funciona bien con su API, entonces hay un problema con el firewall de su red. luego habilite SSL / TLS desde la configuración del firewall.