【问题标题】:How do Azure Function Apps handle Client Certificate Auth?Azure Function Apps 如何处理客户端证书身份验证?
【发布时间】:2021-02-02 07:47:12
【问题描述】:

希望我能说得够清楚。

目标:

  • 客户端证书认证的 Azure 函数

场景:

  • Azure 函数 App 与:

    • HTTPS Only: 设置为 Yes
    • Client certificate mode: 设置为 Require
  • HTTP 触发的 Azure 函数 (Python):

    • 加载客户端证书from X-ARR-ClientCert header
    • 从数据库中提取预共享客户端证书并比较:
      • 发行人
      • 通用名
      • 之前/之后无效
    • 点击列出的 OCSP 端点以查看证书是否被吊销
  • 如果每个证书的属性匹配且证书未被撤销,则函数将为请求者生成一个 SAS 令牌并在响应中发送。

问题:

  • 在这种情况下如何处理客户端证书身份验证的加密部分?
  • 根据this (great) blog post,有一个CertificateVerify 步骤...

"The client is authenticated by using its private key to sign a hash of all the messages up to this point. The recipient verifies the signature using the public key of the signer, thus ensuring it was signed with the client’s private key."

我看不到使用函数 (Python) 代码访问 ...all the messages up to this point. 以验证是否发生这种情况的方法。

这是 Microsoft 自动处理的事情吗(类似于他们通过 X-ARR-ClientCert 标头转发客户端证书的方式)?或者这不可能?

【问题讨论】:

    标签: ssl azure-functions client-certificates azure-function-app mutual-authentication


    【解决方案1】:

    根据我在类似案例中的实现:

    • 您的应用程序通过标头收到证书,并且必须:
      • 加载证书(例如使用 python 中的库加密)
      • 向您的证书颁发机构验证证书的签名
      • 验证有效期
      • 确认没有被撤销
    • 使用 web 应用程序(但同样适用于函数),Azure 前端似乎只是启动身份验证协议来验证发送证书的客户端是否具有关联的私钥(并启动相互身份验证协议,如博客文章)。但它不会验证证书的有效性或签名。

    您提到的 CertificateVerify 步骤似乎由 Azure 前端处理,我认为您无需担心此过程。

    希望这会有所帮助!

    【讨论】:

    • 如果 Azure 在他们的文档中提到这一点会非常有帮助
    • 我想了解更多关于 Microsoft 代表任何 HTTP 触发的 Azure 函数所采取的前端步骤。例如,如果有人尝试使用自签名证书会发生什么?前端会将此转发给函数吗?
    猜你喜欢
    • 1970-01-01
    • 2013-01-26
    • 2018-09-16
    • 2011-04-09
    • 2013-10-07
    • 2022-06-23
    • 1970-01-01
    • 2018-02-12
    • 2012-09-01
    相关资源
    最近更新 更多