老问题,但对那些在这里登陆的人来说.没有专家.请咨询当地的安全专家.
Axios是一个http(s)客户端,http客户端通常以匿名方式参与TLS.换句话说,服务器接受他们的连接,而不标识试图连接的人.这是不同的,比如说,双方TLS,在完成握手之前,服务器和客户端都要相互验证.
互联网是一个可怕的地方,我们希望保护我们的客户不连接到被欺骗的公共端点.我们通过确保客户在发送任何私有数据之前识别服务器来实现这一点.
// DO NOT DO THIS IF SHARING PRIVATE DATA WITH SERVICE
const httpsAgent = new https.Agent({ rejectUnauthorized: false });
这经常被发布(而且更夸张地被上浮)作为StackOverflow上关于任何语言的https客户端连接失败的答案.更糟糕的是,它通常是有效的,解除了开发人员的阻碍,他们继续快乐地前进.然而,虽然他们肯定会进门,但这是谁的门?由于他们 Select 不验证服务器的身份,他们可怜的客户无法知道他们刚刚连接到该公司的内部网时是否有坏人在监听.
如果服务具有公共SSL证书,则通常不需要进一步配置https.Agent
,因为您的操作系统提供了一组公共受信任的CA证书.这通常是您的浏览器配置使用的同一组CA证书,这就是为什么默认axios客户端可以轻松达到https://google.com.
如果服务具有私有SSL证书(出于测试目的自行签署或由贵公司的私有CA签署以保护其内部机密),则必须将https代理配置为信任用于签署服务器证书的私有CA:
const httpsAgent = new https.Agent({ ca: MY_CA_BUNDLE });
其中MY_CA_BUNDLE
是一个CA证书数组,其中包含您要命中的端点的服务器证书和.pem
格式的证书的完整证书链.您必须包括链中直至信任根的所有证书.
这些选项记录在哪里?
HTTPS是TLS/SSL上的HTTP协议.在 node 中.js这是作为一个单独的模块实现的.
因此,传递给https.Agent
的选项是传递给tls.connect()
和tls.createSecureContext()
的选项的合并.