Je développe une application pour iOS en utilisant Titanium Appcelerator. Je me bats avec la sécurisation des connections à mon server. J'ai acheté un certificate UCC pour protéger mon server (et d'autres sites Web) et l'ai installé. Quand je vais sur n'importe quel browser, il affiche que la connection est sécurisée.
Maintenant, lorsque j'essaie de créer une connection entre l'application et mon server, j'obtiens l'erreur suivante:
Le certificate pour ce server est invalide. Vous vous connectez peut-être à un server qui prétend être DOMAIN.COM
J'ai essayé avec d'autres domaines sécurisés, et cela fonctionne très bien. J'utilise Ti.Network.createHTTPClient pour créer mes connections. Est-ce que quelqu'un a une idée de ce problème? Y a-t-il quelque chose qui me manque ici?
Vous devez utiliser un securityManager
de securityManager
pour communiquer avec un site Web sécurisé. Voici l'exemple simple de la documentation . Le certificate doit être fourni en tant que file de certificate X.509 au format binary DER.
Disclaimer: Le module appcelerator.https
est une fonctionnalité payante!
// Require in the module var https = require('appcelerator.https'), securityManager, httpClient; // Use the module to create a Security Manager that authenticates the specified URLs securityManager = https.createX509CertificatePinningSecurityManager([ { url: "https://dashboard.appcelerator.com", serverCertificate: "dashboard.appcelerator.com.der" }, { url: "https://www.wellsfargo.com", serverCertificate: "wellsfargo.der" } ]); // Create an HTTP client the same way you always have // but pass in the optional Security Manager that was created previously. httpClient = Ti.Network.createHTTPClient({ onload: function(e) { Ti.API.info("Received text: " + this.responseText); }, onerror: function(e) { Ti.API.error(e.error); }, timeout : 5000, // Set this property before calling the `open` method. securityManager: securityManager }); // Prepare the HTTPS connection in the same way you always have // and the Security Manager will authenticate all servers for // which it was configured before any communication happens. httpClient.open("GET", "https://dashboard.appcelerator.com"); // Send the request in the same way you always have. // Throws a Security Exception if authentication fails. httpClient.send();
J'ai trouvé la raison pour laquelle dans mon cas la connection a été refusée. Le hic était que je n'avais pas concaténé les deux files cert donnés par Godaddy, ce qui ne semble pas être un problème sur le browser, mais cassait la string de confiance pour l'application. La correction de cette partie a corrigé le problème en utilisant:
cat gd_bundle-g1-g2.crt >> my_server.crt
pour créer le file crt complet.
Remarque: Le premier file CERT est téléchargeable sur le site Web de Godaddy, mais est également joint lorsque vous téléchargez votre file crt.