Estoy tratando de analizar mis solicitudes contra un servidor usando Charles Proxy. El servidor usa TSL, por lo que tengo el clásico certificado falso para poder ver el tráfico claro.
NodeJS/Solicitud no me gusta, por lo que mi secuencia de comandos no se ejecuta y arroja ese error.
¿Cómo puedo evitar esto?
console.log('Response status: ' + response.statusCode);
^
TypeError: Cannot read property 'statusCode' of undefined
at Request._callback (/xxx:88:59)
at self.callback (/xxx:199:22)
at Request.emit (events.js:107:17)
at Request.onRequestError (/xxx:821:8)
at ClientRequest.emit (events.js:107:17)
at TLSSocket.socketErrorListener (_http_client.js:271:9)
at TLSSocket.emit (events.js:107:17)
at TLSSocket.<anonymous> (_tls_wrap.js:942:18)
at TLSSocket.emit (events.js:104:17)
at TLSSocket._finishInit (_tls_wrap.js:460:8)
Error: Error: self signed certificate in certificate chain
en este caso, response
no está definido.
La respuesta no tiene que ser definida.
la respuesta solo se definirá si llegó una respuesta real.
si hubo algun error de conexion ese no es el caso.
verifique que se defina error
, o que response.statusCode
sea mayor o igual que 400.
si quieres depurar este uso
env NODE_DEBUG="*" node asdf.js
Gracias por la explicación. Descubrí cómo evitar problemas con certificados falsos en caso de que a alguien le interese:
process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";
Con eso, puedo usar la autenticación SSL falsa para inspeccionar las comunicaciones entre mi cliente y un servidor.
Mi error fue similar pero ahora estoy bien gracias @nmaxcom
Error: no se puede verificar el primer certificado
en Error (nativo)
en TLSSocket.
en TLSSocket.emit (eventos.js:104:17)
en TLSSocket._finishInit (_tls_wrap.js:460:8)
o simplemente puede usar let's encrypt, certificados que están firmados por una CA legítima.
los certificados autofirmados no tienen sentido ahora.
request.get({
uri: 'https://mydocker.com/v2/_catalog',
rejectUnauthorized: false
}
Para CA autofirmada, podemos especificar 'rejectUnauthorized = false'.
Compruebe request.js en la línea 623 y _tls_wrap.js en node.js.
Mejores alternativas son:
a) Realice la terminación SSL en su balanceador de carga
b) Usar un certificado gratuito
De esta manera, tiene una configuración única en todos sus entornos.
Tendrá mayor confianza en sus implementaciones y filtrará los errores antes.
rechazarObras no autorizadas en options.rejectUnauthorized = false
pero no en options.agentOptions.rejectUnauthorized = false
no se porque 😢
https://github.com/request/request/blob/v2.81.1/request.js#L257 -L259
Lo siento, solo veo el código. Entiendo que strictSSL
es solo un alias de rejectUnauthorized
Tengo que decir que es un mal nombre, solo usa rejectUnauthorized
😭
obteniendo este error mientras se ejecuta el código
Error de análisis: error de sintaxis, 'var' inesperado (T_VAR), esperando el final del archivo en C:xampphtdocsPHPIMAPadminindex.php en la línea 146
var notificador = require('correo-notificador');
var imagen = {
nombre de usuario: "anandlintas2017",
contraseña: "xxxxxxxxx",
anfitrión: "imap.gmail.com",
puerto: 993, // puerto imap
seguro: verdadero // usa una conexión segura
};
notifier(imap).on('mail',function(mail){console.log(mail);}).start();
?>
para las personas que sugieren establecer rechazóUnautorizado=falso ¿Qué pasa si tengo servidores internos que deberían tener conexiones encriptadas entre sí con algunos certificados autofirmados? Supongo que configurar rechazarUnautorizado en falso detendrá el error, pero mis conexiones son 100% propensas a ataques MITM. vea que este es un error en la biblioteca nodejs tls que sufre y no puedo encontrar ninguna solución en ninguna parte (tengo google en la página 5 de los resultados de google que es realmente profundo) no sé cómo otras personas no lo hacen hablar de ello, me estoy perdiendo algo aquí! !!!!! Por favor, corríjame si estoy equivocado !!
rejectUnauthorized works in options.rejectUnauthorized = false
but not in options.agentOptions.rejectUnauthorized = false
Ambos no funcionan para mí
request.get({ uri: 'https://s3.amazonaws.com/...',
rejectUnauthorized: false,
// strictSSL: false,
proxy: '127.0.0.1:8080',
agentOptions: {
rejectUnauthorized: false,
// strictSSL: false,
},
}, (...args) => {
console.log(args);
process.exit();
});
PD Ejecutando el código desde ELECTRON con el indicador de desactivación de ssl activado.
Para mí, deshabilitar el antivirus Kaspersky resolvió el problema.
https://github.com/request/request/issues/2061#issuecomment -182573171 parece ser la respuesta a la pregunta general
proceso.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";
No da efecto.
Comentario más útil
Gracias por la explicación. Descubrí cómo evitar problemas con certificados falsos en caso de que a alguien le interese:
process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";
Con eso, puedo usar la autenticación SSL falsa para inspeccionar las comunicaciones entre mi cliente y un servidor.