使用ssl保护来自节点的服务调用

我正在尝试保护从我的节点到其他服务安全的服务调用。 所有其他服务都启用了https。 我尝试了以下方法

  1. process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0'

根据我的理解,忽略所有从代码中删除的错误,因为证书

  1. 我正在使用request模块。 我们可以在哪里configuration

    key – 提供我的私钥文件,

    cert – 提供我的证书文件

    ca – 证书authorty链

    那么它会抛出UNABLE_TO_VERIFY_LEAF_SIGNATURE

我发现节点不会从系统读取ca。 它有自己的ca链因此,我包括从网上获取最新的cas 节点的ssl-root-cas 。

然后使用SSL分析器,我能够find我的域没有中间的CA证书

我从我们的网站上下载并制作了一个ca链,并将它连接到ssl-root-cas

然后,我能够成功地提出请求

但即使我从我的要求中删除钥匙和证书,我可以提出要求并获得结果。

我怎样才能检查我的请求和响应实际上是encryption的?

或者节点只是忽略错误,

仅供参考,如果您不提供自己的“ca”属性,Node将使用安装在系统上的证书auhtorities。 当你提供自己的,系统的被忽略。 这是devise的,因为提供您自己的CA可能意味着您只想信任由您自己的CA签名的证书。 如果您不使用自己的CA,则可以跳过设置“ca”属性。 如果你是,那么我不知道为什么你需要提供通用信任的CA的完整列表。 这似乎是一个非常奇怪的用例。

您可以使用https模块提出请求,而无需提供您自己的密钥和证书。 这是预期和logging的行为。 由于技术原因,在进行任何https请求时,更具体地说是打开任何TLS套接字,客户端还需要有私钥和证书。 在默认情况下,服务器不会以任何方式validation客户端,因此浏览器使用通常称为“蛇形”证书的捆绑式自签名证书。

在执行https请求时提供自己的密钥和证书的用例是服务器启用了客户端证书检查的情况。 例如,当连接到Apple的服务器以将推送消息传送到iOS时,您将获得Apple发布的客户端证书,Apple的服务器用来validation您是否有权发送推送消息(证书由Apple发布),以及您是哪个应用发送到(证书的指纹/校验和)。

除非您所说的https服务需要特定的客户端证书,否则最好不要设置“密钥”和“证书” – 没有真正的理由这样做。

因此,总的来说,你可能会忽略设置key,cert和ca这三个关键字,因为真正的问题似乎是你错误configuration的服务器(它没有为CA链服务)。