我有一个小的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
所以我在这一次失败了。如果有人有经验,请建议:)
由于
答案 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.js
和config/ssl.js
,或将其传递给sails.lift()
。
第2步:运行中间件。 - 有很多不同的方法可以做到这一点,但既然你说你只想做一些路由,我会创建一个运行client-certificate-auth的策略,甚至可能更好,只需调用req.connection.getPeerCertificate()
并检查您要检查的内容。当您不需要时,无需使用额外的npm模块。
以下是政策文件: https://sailsjs.com/documentation/concepts/policies