Azure API 管理 - 客户端证书身份验证职责?

问题描述

使用 Azure API 管理网关时,可以实施客户端认证身份验证以保护对 API 的访问。您可以使用拇指检查等策略表达式来验证传入的请求证书。

使用客户端证书身份验证方法时,推荐的证书生成/管理流程是什么?

  1. 证书责任?
  • 我/网关所有者是否应该生成 .pfx 文件(自签名或由受信任的 CA),将其导入网关服务并为外部客户端提供 .cer 以在本地安装并进行身份验证?
  • 我/网关所有者是否应该生成 .pfx 文件(自签名或由受信任的 CA),将 .pfx 导入 API 管理网关服务(通常我想在服务器/网关上导入 .cer,但是在 Azure 中似乎不可能)并为外部客户端提供 .pfx 以进行本地安装和身份验证?
  • 外部客户端是否应该负责在他们的组织中生成他们的公钥/私钥对,用 CA 签名,在本地安装它并向我/网关所有者提供一个 .cer 文件以导入到网关(如上,不确定是否可以导入 .cer,我只读取了在导入过程中接受的 .pfx)或提供拇指让我在政策中存储/验证?
  1. 是否有人建议向需要访问相同 API 的客户端颁发相同(共享)证书或为每个客户端生成新证书?他们都将使用证书来访问相同的 API(+ 额外的身份验证方法,证书只是一个额外的步骤)。

我已经准备好了在线教程,描述了上述所有项目,以及在何处实现了特定于客户端或单个 cert-per-API 的地方,所以有点困惑推荐的方法是什么?

解决方法

  1. 最简单的方法是拥有一个颁发 CA 证书,您只需将其公钥上传到 APIM,因为 APIM 只需将其公钥验证传入的证书即可。然后您将负责生成客户端证书并将它们分发给客户端。在 APIM 中,您可以设置需要证书的策略,检查其颁发者并验证,这应该足以确保证书有效并由您颁发。
    • 依赖自签名证书会很麻烦,因为您必须以某种方式让 APIM 知道每个新证书,拥有共同的颁发 CA 可以让您免于担心。
    • 允许远程客户端生成证书也是如此 - 他们必须让您知道证书,而您需要以一种或另一种方式在 APIM 中列出它。
  2. 您可以自由决定分发证书的具体方式,需要考虑以下几点:
    • 可能的证书将是您区分客户的主要方式。如果这很重要,您可能希望让不同的客户端拥有不同的证书。
    • 如果您想拒绝对特定客户端的访问,您将“撤销”该证书,您需要确保其他合法客户端不会受到影响。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...