Nuestro equipo de trabajo ha estado largas horas buscando para darle resolución a tu búsqueda, te brindamos la respuesta por esto esperamos serte de gran ayuda.
Solución:
Vieja pregunta pero resonando para aquellos que aterrizan aquí. Ningún experto. Consulte con sus gurús de seguridad locales y demás.
Axios es un cliente http(s) y los clientes http suelen participar en TLS de forma anónima. En otras palabras, el servidor acepta su conexión sin identificar quién está intentando conectarse. Esto es diferente, digamos, Mutual TLS donde tanto el servidor como el cliente se verifican entre sí antes de completar el protocolo de enlace.
Internet es un lugar aterrador y queremos proteger a nuestros clientes para que no se conecten a puntos finales públicos falsificados. Hacemos esto asegurándonos de que nuestros clientes identifiquen el servidor antes de enviar cualquier dato privado.
// DO NOT DO THIS IF SHARING PRIVATE DATA WITH SERVICE
const httpsAgent = new https.Agent( rejectUnauthorized: false );
Esto a menudo se publica (y se vota más notoriamente) como la respuesta en StackOverflow con respecto a las fallas de conexión del cliente https en cualquier idioma. Y lo peor es que suele funcionar, desbloquea el dev y siguen su camino alegre. Sin embargo, aunque ciertamente entran por la puerta, ¿de quién es la puerta? Dado que optaron por no verificar la identidad del servidor, su pobre cliente no tiene forma de saber si la conexión que acaba de hacer a la intranet de la empresa tiene malos actores escuchando en la línea.
Si el servicio tiene un certificado SSL público, el https.Agent
por lo general, no es necesario configurarlo más porque su sistema operativo proporciona un conjunto común de certificados de CA de confianza pública. Por lo general, este es el mismo conjunto de certificados de CA que su navegador está configurado para usar y es por eso que un cliente axios predeterminado puede acceder a https://google.com sin problemas.
Si el servicio tiene un certificado SSL privado (autofirmado con fines de prueba o uno firmado por la CA privada de su empresa para proteger sus secretos internos), el agente https debe configurarse para confiar en la CA privada utilizada para firmar el certificado del servidor:
const httpsAgent = new https.Agent( ca: MY_CA_BUNDLE );
donde MY_CA_BUNDLE
es un array de certificados de CA con el certificado del servidor para el punto final que desea alcanzar y la cadena de certificados completa de ese certificado en .pem
formato. Debe incluir todos los certificados en la cadena hasta la raíz de confianza.
Cree un agente personalizado con certificado SSL:
const httpsAgent = new https.Agent(
rejectUnauthorized: false, // (NOTE: this will disable client verification)
cert: fs.readFileSync("./usercert.pem"),
key: fs.readFileSync("./key.pem"),
passphrase: "YYY"
)
axios.get(url, httpsAgent )
// or
const instance = axios.create( httpsAgent )
Desde https://github.com/axios/axios/issues/284
Esta configuración funcionó para mí (en un escenario de autenticación mutua).
const httpsAgent = new https.Agent(
ca: fs.readFileSync("./resource/bundle.crt"),
cert: fs.readFileSync("./resrouce/thirdparty.crt"),
key: fs.readFileSync("./resource/key.pem"),
)
Nota: bundle.crt se preparó a partir de los certificados proporcionados (certificado de entrada raíz, intermedio y final). Desafortunadamente, no se encontró documentación clara al respecto.
Si sostienes algún reparo o forma de modernizar nuestro ensayo eres capaz de realizar una nota y con gusto lo observaremos.