web-dev-qa-db-fra.com

TLS que signifie exactement «rejeter non autorisé» pour moi?

Donc, j'ai eu un problème un peu plus tôt dans la journée où mon client, écrit en node, barfait parce que le serveur auquel je me connectais utilisait des certificats auto-signés. Alors, je suis allé et j'ai ajouté l'option rejectUnauthorized: false à mon tls.connect comme n'importe quel développeur involontaire.

Ma question est maintenant, qu'est-ce que ça signifie pour moi? Ma connexion TLS est-elle simplement une connexion Vanilla TCP qui peut également être une connexion TLS? Est-ce que l'écriture en tant que flux TLS est totalement inutile?

Plus important encore, ce serveur, vous connaissez celui avec les certificats auto-signés? Mon flux entre ici et là est-il réellement crypté?

18
Breedly

Comme décrit dans la documentation :

  • rejectUnauthorized: Si true, le certificat du serveur est vérifié par rapport à la liste des autorités de certification fournies. Un événement error est émis si la vérification échoue; err.code contient le code d'erreur OpenSSL. Par défaut: true.

Puisque vous utilisez des certificats auto-signés, il n'y aura évidemment pas de correspondance avec les autorités de certification intégrées, donc par défaut, la connexion sera rejetée car elle ne peut pas vérifier que le serveur est bien celui qu'il prétend être.

En définissant rejectUnauthorized: false, vous dites "Je m'en fiche si je ne peux pas vérifier l'identité du serveur." Évidemment, ce n'est pas une bonne solution car elle vous rend vulnérable aux attaques MITM.

Une meilleure solution pour les certificats auto-signés consiste à définir la valeur ca appropriée pour votre autorité de certification personnalisée lors de la connexion côté client. Assurez-vous également que votre valeur Host correspond à celle du nom commun du certificat auto-signé du serveur. Par exemple:

var socket = tls.connect({
  Host: 'MyTLSServer',
  port: 1337,
  ca: [ fs.readFileSync('CA.pem') ],
}, function() {
  // Connected!
});

// ...

Peu importe si vous utilisez rejectUnauthorized: false ou set ca, la connexion est cryptée.

32
mscdex