Tengo una aplicación de servidor y cliente escrita en NodeJS que se comunican entre sí a través de TLS, con certificados autofirmados. Los certificados no se validan con una CA; en cambio, el usuario tiene acceso a ambas interfaces a la vez y verificará manualmente la autenticidad del servidor y el cliente utilizando un código de verificación calculado en ambas aplicaciones utilizando la clave de escritura del servidor TLS y la clave de escritura del cliente.
¿Se almacenan estas claves incluso después de que se completa el apretón de manos? ¿Cómo puedo acceder a estas claves desde un socket TLS de NodeJS en el lado del cliente? Estoy usando la biblioteca https nativa.
Código del servidor:
const options = { key: fs.readFileSync('./server.key'), cert: fs.readFileSync('./server.crt'), enableTrace: true, requestCert: true, rejectUnauthorized: false, }; const server = https.createServer(options, app); this.initWithServer(server); server.on('secureConnection', (soc) => { console.log(server.getTicketKeys()); });Codigo del cliente:
const requestOptions = { hostname: HOST, port: PORT, path: '/', method: 'GET', rejectUnauthorized: false, requestCert: true, key: fs.readFileSync('./client.key'), cert: fs.readFileSync('./client.crt'), }; requestOptions.agent = new https.Agent(requestOptions); const req = https.request(requestOptions, (res) => { res.setEncoding('utf8'); let data = ''; res.on('data', (resBody) => { data += resBody; }); res.on('end', () => { const body = JSON.parse(data); }); }); req.end(); req.on('socket', (socket) => { socket.on('secureConnect', () => { const peerCertificate = socket.getPeerCertificate(true); console.log(peerCertificate.pubkey); const localCertificate = socket.getCertificate(true); console.log(localCertificate.pubkey); console.log(socket.getSession()) }); });