【问题标题】:Validate AWS Client Certificate from API Gateway in SailsJS, behind Elastic Load Balance从 SailsJS 中的 API Gateway 验证 AWS 客户端证书,位于 Elastic Load Balance 后面
【发布时间】:2017-12-16 05:45:44
【问题描述】:

我有一个小型 API 网关端点,它将客户端证书发送到后端服务器。此后端服务器在 ELB 后面的 Sails 上运行。我想要做的是过滤 Sails 中的一些路由,并且策略应该在请求中查找证书,如果没有发送,则拒绝,如果它(验证公钥)然后允许它继续。

在 AWS API Gateway (http://docs.aws.amazon.com/apigateway/latest/developerguide/getting-started-client-side-ssl-authentication.html) 的文档中,他们建议使用 client-certificate-auth (https://www.npmjs.com/package/client-certificate-auth),但我找不到在 Sails 后端使用它的方法。

我尝试在 Sails 中使用 serverOptions,但它崩溃了:

error: TypeError: "listener" argument must be a function

所以我对这个很迷茫。如果有人有这方面的经验,请指教:)

谢谢

【问题讨论】:

  • 你是否在 Node 前面使用了一些东西,比如 Nginx、Apache 或 HAProxy?如果是这样,that 可以处理证书验证。您的后端服务器现在使用 SSL 吗?如果没有,你当然也需要那个......
  • @Michael-sqlbot EC2 服务器前面有一个弹性负载均衡器 (AWS ELB)
  • ELB 不支持使用客户端证书进行 SSL 卸载。
  • @Michael-sqlbot 这是否意味着如果我的实例位于 ELB 之后,则无法验证 API Gateway 客户端证书?
  • 不,这意味着您必须将 ELB 设置为在 tcp 模式下运行,以充当 L4 tcp 负载均衡器并终止 ELB 后面的 EC2 实例上的连接。当然,你还需要弄清楚如何配置 Sails 来验证 API Gateway 使用的客户端证书。

标签: amazon-web-services sails.js aws-api-gateway public-key


【解决方案1】:

第 0 步: 正如一些 cmets 中提到的 - 您需要将 ELB 更改为经典 ELB,并在端口 443 而不是 HTTPS 上对 TCP 进行负载平衡。

第 1 步:您需要使用 HTTPS 启动sails - 配置如下所示:

      http: {
        serverOptions: {
          requestCert: true,
          rejectUnauthorized: true
        }
      },
      ssl: {
        key: key.Body.toString(),
        cert: cert.Body.toString()
      }

所以要么config/http.jsconfig/ssl.js,要么将它们传递给sails.lift()

第 2 步: 运行中间件。 - 有很多不同的方法可以做到这一点,但既然你说你只想做一些路由,我会创建一个运行客户端证书身份验证的策略,或者甚至可能更好,只需调用 req.connection.getPeerCertificate() 并检查您要检查的内容。不需要时无需使用额外的 npm 模块。

以下是政策文档: https://sailsjs.com/documentation/concepts/policies

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-24
    • 2023-01-04
    • 2018-05-11
    • 2017-06-07
    • 2018-02-15
    • 1970-01-01
    • 2017-10-07
    • 2017-02-23
    相关资源
    最近更新 更多