在SailsJS中验证来自Elastic Load Balance后面的API网关的AWS客户端证书

时间:2017-07-12 01:23:32

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

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

在AWS API网关(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中使用serverOptions,但它崩溃了:

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

所以我在这一次失败了。如果有人有经验,请建议:)

由于

1 个答案:

答案 0 :(得分:0)

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

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

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

config/http.jsconfig/ssl.js,或将其传递给sails.lift()

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

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