【问题标题】:Defining Certificate Authority on Meteor.js在 Meteor.js 上定义证书颁发机构
【发布时间】:2024-01-21 17:56:01
【问题描述】:

当我升级到 6.6.3 时,我遇到了特定 HTTPS 获取调用的问题。我不确定这是否真的是真的,但似乎通过新的安全增强功能,meteor 似乎正在积极尝试对从中返回请求的 CA 进行身份验证。

我得到的错误是:UNABLE_TO_VERIFY_LEAF_SIGNATURE - 我在尝试通过 SSO 服务器登录时得到这个。

在联系服务器管理员后,他们已将 ca.pem 文件传递​​给我,流星服务器可以使用该文件来验证证书。我已经尝试了各种方法将其放入流星服务器运行的 node.js 配置中,但无济于事。所以我的问题有两个:

  1. Meteor 在尝试从服务器验证证书时会做什么?
  2. 如何将正确的 CA 提供给 Meteor 以使其正确进行身份验证?

【问题讨论】:

    标签: node.js ssl meteor certificate ca


    【解决方案1】:

    你没有提供足够的信息,但我以前见过。如果您有一个运行 0.6.6.3 的流星服务器,并且您正尝试使用 node-ddp 之类的东西从 nodejs 脚本访问它?如果是这样并且此错误作为套接字错误发出,则:

    如果是这种情况,您不仅需要设置 CA 文件,还需要设置中间文件。 Meteor 本身通常无法做到这一点,您需要一个代理来将 https 转换为 http,该代理将位于流星前面。

    您拥有通常需要的 3 个文件之一。 CA、您的密钥和中间链。 UNABLE_TO_VERIFY_LEAF_SIGNATURE 通常会出现,因为您没有指定链。

    Meteor 不直接采用 CA 或处理 SSL。你必须使用你自己的代理,比如 nginx 或脚本like this one

    如果您使用的是meteor deploy,只要您的域格式为*.meteor.com,这应该没问题。如果您使用自己的域,则域签名将不匹配,如果您想使用 SSL,则必须使用自己的主机

    【讨论】:

    • 有趣...我有一个月没碰这个了,很抱歉没有回复你的答案。我正在尝试在我的本地开发环境中进行这项工作,因此没有我要部署的流星服务器在网络服务器上运行。没有这个,我们的开发人员将无法测试 SSO 特定的功能,我们的测试(通过测试框架也能正常工作)
    【解决方案2】:

    Akshat提供的答案是正确的。您需要提供中间证书。

    UNABLE_TO_VERIFY_LEAF_SIGNATURE 错误是 Node 告诉您它没有完整的信任链。如果出于测试目的你想解决这个问题,你可以使用环境变量NODE_TLS_REJECT_UNAUTHORIZED=0,Node/Meteor 将忽略证书问题。

    为了更清楚一点,例如,如果您使用 RapidSSL,那么您需要从 here 获取中间证书。然后您需要将您的证书和中间证书附加在一起:

    -----BEGIN CERTIFICATE-----
    My Cert (issued by RapidSSL)
    -----END CERTIFICATE-----
    -----BEGIN CERTIFICATE-----
    RapidSSL Intermediate Cert (RSA SHA-1 SSL Certificates SO26462)
    -----END CERTIFICATE-----
    -----BEGIN CERTIFICATE-----
    RapidSSL Intermediate Cert (RSA SHA-2 SSL Certificates SO26457)
    -----END CERTIFICATE-----
    -----BEGIN CERTIFICATE-----
    RapidSSL Intermediate Cert (RSA SHA-2 SSL Certificates SO28351)
    -----END CERTIFICATE-----
    

    注意!您需要将它们堆叠起来,就像我在上面显示的证书按降序排列一样。如果您以其他方式执行此操作,您可能会因奇怪的错误而失败。

    【讨论】: