Azure Function应用如何处理客户端证书身份验证?

问题描述

希望我能说得足够清楚。

目标:

  • 客户端证书授权的Azure函数

场景:

  • Azure功能应用,具有:

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

    • 加载客户端证书from X-ARR-ClientCert header
    • 数据库提取预共享的客户端证书,然后进行比较:
      • 发行人
      • CommonName
      • 之前/之后无效
    • 访问列出的OCSP端点,以查看证书是否已撤销
  • 如果每个证书的属性都匹配并且证书尚未被撤消,则该功能将为请求者生成SAS令牌并在响应中发送。

问题:

"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标头转发客户端证书的方式)?还是不可能?

解决方法

根据我在类似情况下实现的内容:

  • 您的应用通过标题收到了证书,并且必须:
    • 加载证书(例如,使用python中的库加密)
    • 与您的证书颁发机构一起验证证书的签名
    • 验证有效日期
    • 确认它未被撤销
  • 使用Web应用程序(但对功能也是如此),Azure前端似乎只是启动身份验证协议,以验证发送证书的客户端是否具有关联的私钥(并启动相互身份验证协议,如博客文章)。但是它不验证证书的有效性或签名。

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

希望这会有所帮助!