Je reçois une erreur de suivi avec un certificat auto-signé
Domain Error = NSURLErrorDomain Code = -1200 "Une erreur SSL s'est produite et une connexion sécurisée au serveur ne peut pas être établie.
tout en testant les services Web pour l'une de mes applications de démonstration avec
Remarque: avant de supposer son Duplicate, je demande s'il vous plaît de le lire tout le long, même de la même manière que je l'ai signalé à Apple dev forums
Utilisation de Bibliothèque Alamofire
func testAlamofireGETRequest() -> Void
{
Alamofire.request(.GET, "https://filename.hostname.net/HelloWeb/service/greeting/john")
.responseJSON
{ response in
print("Response JSON: \(response.result.value)")
}
}
Utilisation de 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()
}
J'ai passé 2 jours sans chance :(
il y a un tas de questions déjà postées mais rien n'a fonctionné pour moi
a publié un problème avec Alamofire git
Mon fichier Info.pist est mis à jour pour les paramètres ATS de cette façon
<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>
Pendant ce temps, je suis en mesure d'obtenir une réponse pour
http : //filename.hostname.net
et https : //google.com
mais pas pour https : //filename.hostname.net
Quelqu'un peut-il me suggérer pourquoi je ne suis pas en mesure de faire fonctionner cela après d'énormes efforts?
Sur la ligne de commande dans OS X, exécutez ce qui suit:
nscurl --ats-diagnostics https://filename.hostname.net --verbose
Cela vous indiquera quelles combinaisons de paramètres ATS permettront et ne permettront pas à iOS d'accéder à votre site, et devrait vous indiquer ce qui ne va pas avec votre site.
Il peut s'agir d'un ou plusieurs des éléments suivants
Apple a publié la liste complète des exigences pour App Transport Security.
Il s'est avéré que nous travaillions avec TLS v1.2 mais qu'il manquait certaines des autres exigences.
Voici la liste de contrôle complète :
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
Je suppose que le serveur que vous essayez de connecter a des certificats invalides ou ne correspond pas aux normes iOS 9 pour ECC, Ciphers, etc.
Si vous utilisez des API de mise en réseau de haut niveau (NSURLSession, NSURLConnection ou tout autre élément superposé), vous n'avez pas de contrôle direct sur les suites de chiffrement proposées par le client. Ces API choisissent un ensemble de suites de chiffrement en utilisant leur propre logique interne.
Si vous utilisez des API de mise en réseau de niveau inférieur — CFSocketStream, via ses API NSStream et CFStream, et tout ce qui est inférieur à cela — vous pouvez choisir explicitement l'ensemble de suites de chiffrement que vous souhaitez utiliser. La façon dont vous procédez dépend de l'API spécifique.
La pratique standard est la suivante:
créer la paire de flux
le configurer pour TLS
obtenir le contexte de transport sécurisé à l'aide de la propriété kCFStreamPropertySSLContext
configurer des propriétés spécifiques dans ce contexte
ouvrir les ruisseaux
Vous pouvez voir un exemple de cela dans l'exemple de code TLSTool. Plus précisément, regardez la classe TLSToolServer , où vous pouvez voir exactement cette séquence.
Dans un contexte très court, vous souhaitez configurer le flux de manière à contourner la sécurité, cependant, dans le cas d'Alamofire, vous pouvez le faire directement en:
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)
}
}
faites-moi savoir si cela vous a été utile. Merci!
J'ai eu le même scénario et je suis resté coincé pendant une journée. Essayez avec vos données mobiles, si cela fonctionne bien avec votre API, puis problème avec votre pare-feu réseau. puis activez SSL/TLS à partir des paramètres du pare-feu.