当前位置: 首页 > 知识库问答 >
问题:

AWS API网关MTLS客户端身份验证

程鸿畅
2023-03-14

每次我搜索AWS API网关的通过SSL的相互身份验证时,我只能找到AWS API网关和后端服务之间的MTL。但我希望用MTLS(客户端身份验证)来保护我的AWS API网关endpoint本身。

例如,我有一个通过AWS API网关代理的备份服务QueryCustomer。现在我可以在API网关上设置SSL证书,但它通常是单向SSL。我想要实现的是一个带有客户端身份验证的MTLS,其中来自AWS API网关的API使用者首先必须交换他们在AWS信任库上配置的公共证书,AWS公共证书也将存储在API使用者端。

现在,在握手过程中,与其他API网关和应用程序服务器一样,应该有一个属性表示类似于此AWS API网关endpoint的内容“需要客户端身份验证”,以便仅当API消费者的公共证书位于API网关信任库中时,才应该对其进行身份验证以访问该endpoint,否则只会抛出正常的SSL握手错误。

有人能建议这是否可以在AWS API网关上实现吗?

共有2个答案

唐晗昱
2023-03-14

23九月2020

AWS现在支持相互TLS

https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-mutual-tls.html

我们现在还可以禁用executeapiendpoint。

aws apigatewayv2 update-api \
    --api-id abcdef123 \
    --disable-execute-api-endpoint

若要使用相互TLS,请创建信任的X.509证书的信任存储库,以便访问API。证书可以来自公共或专用证书颁发机构。证书的最大链长可以为4。还可以提供自签名证书。支持以下内容:

SHA-256或更高版本RSA-2048或更高版本ECDSA-256或更高版本

API网关验证许多证书属性。当客户端调用API时,可以使用Lambda授权程序执行其他检查,包括检查证书是否已吊销。API网关验证以下证书属性:

验证说明X.509语法

证书必须满足X.509语法要求。

诚实正直

证书的内容不得与证书颁发机构从信任存储库签署的内容相更改。

有效性

证书的有效期必须是最新的。

名称链接/密钥链接

证书的名称和主题必须形成一个完整的链。证书的最大链长度可以为4。

宋洲
2023-03-14

这目前无法从API网关获得,但是我们已经收到了多个客户对此功能的请求。不幸的是,我不能评论ETA或可用性。

 类似资料:
  • 是否可以在AWS API网关上设置客户端TLS身份验证? 我并不是指API网关和Elastic Beanstalk之间,正如这里所描述的那样,而是指客户机和API网关本身之间,可能有一个自定义授权器(例如Lambda),在将请求转发给Elastic Beanstalk之前检查证书的有效性。

  • 授权服务器为进行客户端身份验证的目的,为Web应用客户端创建客户端凭据。授权服务器被鼓励考虑比客户端密码更强的客户端身份验证手段。Web应用程序客户端必须确保客户端密码和其他客户端凭据的机密性。 授权不得向本地应用程序或基于用户代理的应用客户端颁发客户端密码或其他客户端凭据用于客户端验证目的。授权服务器可以颁发客户端密码或其他凭据给专门的设备上特定安装的本地应用程序客户端。 当客户端身份验证不可用

  • 在向令牌端点发起请求时,机密客户端或其他被颁发客户端凭据的客户端必须如2.3节所述与授权服务器进行身份验证。客户端身份验证用于: 实施刷新令牌和授权码到它们被颁发给的客户端的绑定。当授权码在不安全通道上向重定向端点传输时,或者 当重定向URI没有被完全注册时,客户端身份验证是关键的。 通过禁用客户端或者改变其凭据从被入侵的客户端恢复,从而防止攻击者滥用被盗的刷新令牌。改变单套客户端凭据显然快于撤销

  • 如果客户端类型是机密的,客户端和授权服务器建立适合于授权服务器的安全性要求的客户端身份验证方法。授权服务器可以接受符合其安全要求的任何形式的客户端身份验证。 机密客户端通常颁发(或建立)一组客户端凭据用于与授权服务器进行身份验证(例如,密码、公/私钥对)。授权服务器可以与公共客户端建立客户端身份验证方法。然而,授权服务器不能依靠公共客户端身份验证达到识别客户端的目的。 客户端在每次请求中不能使用一

  • 有时需要对某些网络资源(如Servlet、JSP等)进行访问权限验证,也就是说,有访问权限的用户才能访问该网络资源。进行访问权限验证的方法很多,但通过HTTP响应消息头的WWW-Authenticate字段进行访问权限的验证应该是众多权限验证方法中比较简单的一个。 通过HTTP响应消息头的WWW-Authenticate字段可以使浏览器出现一个验证对话框,访问者需要在这个对话框中输入用户名和密码,

  • 我不熟悉SSL和证书。我一直在做关于客户端证书认证的研究。我看过这个和wiki。 因此,如果我必须为我的B2B REST服务实现客户端证书身份验证解决方案,我应该执行以下操作 要求客户端生成自己的私钥,并为其公钥生成证书(CA 颁发?)。通过电子邮件或 USB 闪存盘发送该证书。 在服务器端将客户端的公共证书导入信任存储区并启用客户端身份验证 在握手期间,客户端会出示其证书并进行身份验证,因为服务