Une réponse légèrement mise à jour (puisque j'ai rencontré ce problème dans des circonstances différentes).
Lorsque vous vous connectez à un serveur en utilisant SSL, la première chose que fait le serveur est de présenter un certificat qui dit "Je suis api.dropbox.com". Le certificat a un "sujet" et le sujet a un "CN" (abréviation de "common name".) Le certificat peut également avoir un ou plusieurs "subjectAltNames". Lorsque node.js se connecte à un serveur, node.js récupère ce certificat, puis vérifie que le nom de domaine auquel il pense se connecter (api.dropbox.com) correspond soit au CN du sujet, soit à l'un des altnames. Notez que, dans node 0.10.x, si vous vous connectez en utilisant une IP, l'adresse IP doit être dans les noms alternatifs - node.js n'essaiera pas de vérifier l'IP par rapport au CN.
Fixer le rejectUnauthorized
à false permet de contourner cette vérification, mais tout d'abord, si le serveur vous donne des informations d'identification différentes de celles que vous attendez, il y a quelque chose de louche, et ensuite, cela contournera également d'autres vérifications - ce n'est pas une bonne idée si vous vous connectez sur Internet.
Si vous utilisez node >= 0.11.x, vous pouvez aussi spécifier un checkServerIdentity: function(host, cert)
au module tls, qui devrait renvoyer la fonction undefined
si vous voulez autoriser la connexion et lancer une exception sinon (bien que je ne sache pas si request
transmettra ce drapeau par proxy à tls pour vous). Il peut être pratique de déclarer une telle fonction et de console.log(host, cert);
pour comprendre ce qui se passe.