我正在尝试保护从我的节点到其他服务的安全服务调用。所有其他服务都启用了https。我尝试了以下方法
process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0'
根据我的理解,忽略了从代码中删除的所有错误,因为证书
我正在使用request
模块。我们可以在哪里配置
key
- 提供了我的私钥文件
cert
- 提供了我的证书文件
ca
- 证书authorty chain
然后它正在抛出UNABLE_TO_VERIFY_LEAF_SIGNATURE
我发现节点没有从系统中读取ca. 它有自己的ca链所以我包括node-ssl-root-cas 从互联网上获取最新的cas。
然后使用ssl-analyzer,我能够找到我的域名没有中间证书
我从我们的ca中下载并制作了一个ca链并将其附加到ssl-root-cas
然后我能够成功提出请求
但即使我从我的请求中删除密钥和证书,我也可以提出请求并获得结果。
如何检查我的请求和响应实际上已加密?
或节点只是忽略错误,
答案 0 :(得分:2)
仅供参考,如果您不提供自己的" ca"节点将使用系统上安装的证书。属性。当您提供自己的系统时,系统会被忽略。这是设计原因,因为提供您自己的CA可能意味着您希望仅信任由您自己的CA签名的证书。如果您没有使用自己的CA,则可以跳过设置" ca"属性。如果您是,那么我不确定为什么您还需要提供通常受信任的CA的完整列表。这似乎是一个非常奇怪的用例。
您可以使用https模块发出请求,而无需提供自己的密钥和证书。这是预期和记录的行为。由于技术原因,在进行任何https请求时,更具体地说,打开任何TLS套接字时,客户端还需要拥有私钥和证书。在默认情况下,服务器不以任何方式验证客户端,因此浏览器使用通常称为" snakeoil"证书 - 捆绑的自签名证书。
执行https请求时提供自己的密钥和证书的用例是服务器启用了客户端证书检查。例如,当连接到Apple的服务器以向iOS发送推送消息时,您拥有Apple颁发的客户端证书,Apple的服务器使用该证书来验证您是否有权发送推送消息(证书已颁发) Apple)以及您要发送给哪个应用程序(证书的指纹/校验和)。
除非您与之交谈的https服务需要特定的客户端证书,否则您最好不要设置" key"和"证书" - 没有真正的理由这样做。
因此,总而言之,您可以跳过设置key,cert和ca的全部三个,因为真正的问题似乎是您配置错误的服务器(它没有为CA链提供服务)。