Bonjour à tous, je me tourne vers vous aujourd'hui car je fais face à un problème dont je ne parviens pas à trouver de solution.

Je souhaite réaliser une application client/server avec node JS par l'élaboration d'un client serveur TCP. Souhaitant que tous les transfèrent de données se face de manière sécurisée, je vais donc utiliser TLS. Je me suis basé sur la doc officiel de Node.js concernant TLS mais en essayant de mettre en application l'exemple de client/seveur qu'il montre je ne parviens pas à le faire fonctionner.

En effet je bloque sur la partie des clefs de sécurités, je ne parviens pas à créer des pairs de clés auto-signées qui fonctionnent, à chaque fois j'ai une erreur…

Voici les codes dont je me suis servis :

Server.js :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
 
const tls = require('tls');
const fs = require('fs');
 
const options = {
  key: fs.readFileSync('server-key.pem'),
  cert: fs.readFileSync('server-cert.pem'),
 
  // This is necessary only if using the client certificate authentication.
  requestCert: true,
 
  // This is necessary only if the client uses the self-signed certificate.
  ca: [ fs.readFileSync('client-cert.pem') ]
};
 
const server = tls.createServer(options, (socket) => {
  console.log('server connected',
              socket.authorized ? 'authorized' : 'unauthorized');
  socket.write('welcome!\n');
  socket.setEncoding('utf8');
  socket.pipe(socket);
});
server.listen(8000, () => {
  console.log('server bound');
});
Client.js :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
 
const tls = require('tls');
const fs = require('fs');
 
const options = {
  // Necessary only if using the client certificate authentication
  key: fs.readFileSync('client-key.pem'),
  cert: fs.readFileSync('client-cert.pem'),
 
  // Necessary only if the server uses the self-signed certificate
  ca: [ fs.readFileSync('server-cert.pem') ]
};
 
const socket = tls.connect(8000, options, () => {
  console.log('client connected',
              socket.authorized ? 'authorized' : 'unauthorized');
  process.stdin.pipe(socket);
  process.stdin.resume();
});
socket.setEncoding('utf8');
socket.on('data', (data) => {
  console.log(data);
});
socket.on('end', () => {
  server.close();
});
Voici l'erreur qui m'est retourné lorsque le client ce connecte au serveur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
 
events.js:141
      throw er; // Unhandled 'error' event
      ^
 
Error: Hostname/IP doesn't match certificate's altnames: "Host: localhost. is not cert's CN: CA"
    at Object.checkServerIdentity (tls.js:186:15)
    at TLSSocket.<anonymous> (_tls_wrap.js:1023:29)
    at emitNone (events.js:67:13)
    at TLSSocket.emit (events.js:166:7)
    at TLSSocket._init.ssl.onclienthello.ssl.oncertcb.TLSSocket._finishInit (_tls_wrap.js:582:8)
    at TLSWrap.ssl.onclienthello.ssl.oncertcb.ssl.onnewsession.ssl.onhandshakedone (_tls_wrap.js:424:38)
Coté serveur voici ce qui est affiché :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
server bound
server connected authorized
Quelqu'un aurait-il une solution ? Car là je sèche dessus depuis plusieurs jours…


Respectueusement,

Yoratheon