Este programa de prueba se conecta a un servidor https y obtiene algo de contenido. Revisé mi servidor en navegadores y con curl y el certificado funciona correctamente. Si ejecuto Curl para tomar datos del servidor, se queja correctamente de que se desconoce el certificado a menos que lo transfiera con --cacert o apague la seguridad con -k.Mi cliente https de node.js siempre funciona independientemente de la validez del certificado
Así que el problema que estoy teniendo es que, aunque creo que mi cliente debería estar haciendo autenticación de certificados y le digo dónde está el certificado público, siempre funciona. Si elimino la opción ca: para que no tenga idea de qué es el certificado del servidor, funciona silenciosamente. Me gustaría detectar el error de autenticación, pero parece que no puedo hacerlo.
var https = require('https');
var fs = require('fs');
function main() {
var data = '';
var get = https.get({
path: '/',
host: 'localhost',
port: 8000,
agent: false,
ca: [ fs.readFileSync('https_simple/cacert.pem') ]
}, function(x) {
x.setEncoding('utf8');
x.on('data', function(c) {data += c});
x.on('error', function(e) {
throw e;
});
x.on('end', function() {
console.log('Hai!. Here is the response:');
console.log(data);
});
});
get.on('error', function(e) {throw e});
get.end();
}
main();
rejectUnauthorized fue agregado en la versión 0.7.0 –
En cuanto a los documentos: http://nodejs.org/api/tls.html, no hay indicación de que 'rejectUnauthorized' se haya agregado para el cliente ... para el servidor sí pero no para el cliente. ¿Puedes por favor ponerme en el camino correcto aquí? ¿Estoy mirando documentos desactualizados aquí? – pulkitsinghal
La lista de cambios se encuentra en la respuesta anterior. El problema fue rastreado aquí https://github.com/joyent/node/issues/2247 No he visto si la documentación fue actualizada, lo siento. – justinhj