app ios swift ssl https

ios - app - NSURLSession "Falló la carga HTTP kCFStreamErrorDomainSSL,-9813; Certificado de firma automática



ssl ios (7)

Estoy intentando conectar mi aplicación iOS a una aplicación HTTPS Rails que actualmente se ejecuta en un host local en mi red. Puedo acceder al sitio desde mi navegador con https://myIP:3000/display , así como en la línea de comandos con una solicitud curl. Estoy intentando acceder desde mi aplicación usando:

class FirstViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() //let url = NSURL(string: "https://another/Sinatra/website/feed") let url = NSURL(string: "https://myIP:3000/display") let request = NSURLRequest(URL: url!) let task = NSURLSession.sharedSession().dataTaskWithURL(url!) task!.resume() }

Cuando intento acceder al sitio web de Sinatra, no tengo problemas e incluso puedo imprimir el JSON en la consola con los comandos correctos. Sin embargo, cuando configuro la URL en el sitio web de Rails, aparece el siguiente error.

Error en la carga de NSURLSession / NSURLConnection HTTP (kCFStreamErrorDomainSSL, -9813)

Además, puedo decir que mi aplicación localhost Rails (en la otra máquina) no está activada desde la aplicación de iOS, sino que está activada desde el navegador y el comando curl.

Alguna idea de cómo solucionar este problema?


Error en la carga de NSURLSession / NSURLConnection HTTP (kCFStreamErrorDomainSSL, -9813)

Agregue una nueva fila en su archivo plist.



Este es un problema de confianza. Con un certificado autofirmado, el componente de verificación de identidad de SSL no funciona. Todavía es posible establecer una conexión segura para que nadie esté escuchando a escondidas, pero la aplicación no puede estar segura de quién está al otro lado de la línea.

Tengo una configuración similar y resolví este problema agregando mi CA raíz autofirmada a los certificados de confianza del iPad. Esta CA raíz se utiliza para firmar todos mis otros certificados de desarrollo. Entonces solo tengo que agregar este certificado raíz único en cualquier lugar donde se use SSL. Si solo tiene un certificado autofirmado que está utilizando directamente, probablemente pueda simplemente agregarlo.

Para obtener el certificado en el dispositivo (o simulador), coloco el archivo en mi servidor web. Luego solo ábrelo en Safari a través de HTTP simple. La aplicación Configuración debería abrirse y preguntar si quieres confiar en el certificado.

Por supuesto, esto supone que esto es solo para el desarrollo y que su sistema de producción tiene un certificado firmado por una autoridad conocida (es decir, uno incluido en la base de datos del sistema operativo de las autoridades de certificación raíz). Debido a que no se volará a los usuarios finales para que instalen su certificado autofirmado.


La modificación del info.plist funcionó para mí también.

<key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <true/> </dict>


Si entendí bien, Apple ahora quiere que los desarrolladores usen HTTPS y TLS 1.2 para llamadas de red.

Temporal , puede agregar esto en su archivo "Info.plist":

<key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <true/> </dict>

Simplemente eche un vistazo a este enlace, también puede ayudarlo: http://ste.vn/2015/06/10/configuring-app-transport-security-ios-9-osx-10-11/

-

Actualización : después de algunos comentarios, la solución anterior ya no funciona. Aquí hay una solución actualizada.

  1. Vaya a su archivo Info.plist .
  2. Agregue una fila de Type Dictionary y de Key App Transport Security Settings .
  3. En este Diccionario, agregue una fila de Tipo Boolean , de Clave Allow Arbitrary Loads y de Valor YES

-

De lo contrario, puede establecer Domain Exceptions . Esta es la forma de hacerlo:

  1. Vaya a su archivo Info.plist .
  2. Agregue una fila de Type Dictionary y de Key App Transport Security Settings .
  3. Agregue una fila de Type Dictionary y de Key Exception Domains .
  4. Agregue una fila de Type Dictionary y de Key The domain .
  5. Agregue dos filas de Tipo Boolean y de Key NSExceptionAllowsInsecureHTTPLoads & NSIncludesSubdomains con valor a YES .

Campo de golf

http://ste.vn/2015/06/10/configuring-app-transport-security-ios-9-osx-10-11/

2015 WWDC Session 711

Error de conexión HTTP de iOS 9 -


intenta cambiar la variable de la sesión, este cambio me ayuda

let config = URLSessionConfiguration.default let session = URLSession(configuration: config)