2015-09-09 1 views
0

J'ai une application js node exécutée en tant que service mobile sur Azure AMS. J'ai employé la bibliothèque de demande pour faire les appels de HTTPS get/post api à un serveur externe. Tout fonctionne très bien jusqu'à il y a quelques jours lorsque l'entité externe a décidé de ne plus prendre en charge TLS 1.0 et les versions suivantes. Je me demandais si quelqu'un connaît des problèmes connus d'Azure AMS bloquant/échouant les communications TLS 1.1/1.2 avec des hôtes externes? Cet hôte utilise un certificat SSL valide émis par DigiCert.L'application js du nœud Azure AMS ne parvient pas à établir une connexion TLS 1.2.

A l'intérieur de mon code, j'ai déjà essayé quelques choses pour dire explicitement à nodejs d'utiliser TLS 1.1/1.2 mais cela n'a pas fonctionné.

var httpRequest = require("request"), 
https = require('https'); 

https.globalAgent.options.secureProtocol = 'TLSv1_2_method'; // Instructing to use TLS 1.2 
.... 


httpRequest.post('https://external-api-url.com', { 
    'json': true, 
    'body': params, 
    'timeout': 20000, 
    'jar': false, 
    'headers': { 
     "Arr-Disable-Session-Affinity": true 
    } 

}, function(err, response, body) { 
    // Code to handle response. 
}); 

En plus globalAgent, j'ai essayé aussi la mise en secureProtocol de agentOptions ainsi que directement dans les options objet. Aucune des approches n'a fonctionné.

Toute aide sera grandement appréciée.

Merci.

+0

Je n'ai jamais utilisé TLS 1.2 sur un nœud mais sur ASP.NET WebAPI récemment. Ce que je sais, si vous voulez utiliser TLS 1.2 vous avez besoin 1) Win 08R2 ou plus tard. 2) Mettre à jour les clés de registre 'HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Contrôle \ SecurityProviders \ SCHANNEL \ Protocols', ajouter' TLS 1.1 \ Client' 'TLS 1.1 \ Server'' TLS 1.2 \ Client' 'TLS 1.2 \ Server' avec les clés' Activé = 0x01' et 'DisabledByDefault = 0x00'. Peut-être que vous pouvez essayer. –

Répondre

2

Votre problème est à l'origine de la version de NodeJS sur Azure Mobile Service.

La version de NodeJS sur Azure Mobile Service est v0.8.28. Vous pouvez le voir à la section "AppSettings" de la page Azure Kudu Env https://<your_ams_name>.scm.azure-mobile.net/Env, comme l'image ci-dessous.

enter image description here

Cependant, NodeJS ajouter TLS 1.1/1.2 à la liste secureProtocol depuis la version 0.11.6, comme l'image ci-dessous.

enter image description here

Ainsi, lorsque l'entité externe a décidé de cesser de soutenir TLS 1.0, votre application nodejs ne fonctionne pas. Mais vous pouvez suivre les exemples NodeJS avec les API Https supportant TLS ou Request Module avec le protocole TLS/SSL de support d'API pour définir les options .key & options.cert pour le faire. Veuillez vous référer à https://nodejs.org/docs/v0.8.28/api/https.html#https_https_request_options_callback et https://github.com/request/request#tlsssl-protocol.

Exemple:

var fs = require('fs') 
    , path = require('path') 
    , certFile = path.resolve(__dirname, 'ssl/client.crt') 
    , keyFile = path.resolve(__dirname, 'ssl/client.key') 
    , request = require('request'); 

https.globalAgent.options.cert = certFile; 
https.globalAgent.options.key = keyFil; 

Cordialement.

+0

Vous pourriez avoir raison. Bien que mon package.json définit la version de noeud à 0.12.0. Cela n'a-t-il aucun effet? De toute façon, je reviendrai à vous après confirmation. Merci! – imkhoja

+0

Peter Pan - Vous aviez absolument raison à propos de la version. C'est 0.8.28 bien que je suis toujours perplexe qu'il n'a pas choisi l'instruction de version du fichier paquet.json (mis à 0.12.0). Une idée pourquoi? Je vais essayer le cert globalAgent et l'approche clé, mais je me demandais si la version de nodejs pouvait être mise à jour? Je suis sur un niveau libre, donc je ne sais pas si Azure mettra à jour le runtime pour moi. Votre commentaire peut-être accepter comme solution. – imkhoja

+0

@imkhoja Le support TLS secureProtocol est intégré dans NodeJS afin qu'il ne fonctionne pas en définissant la version supérieure dans package.json. La mise à jour d'exécution de NodeJS ou d'autres langages suit la mise à jour d'Azure, pas spécialement mise à jour pour quiconque. Si vous avez besoin d'utiliser le nœud de version, je vous suggère d'utiliser Azure VM et de l'installer vous-même. Merci pour votre réponse marquée. –