使用Azure函数HTTP触发器的mTLS?

问题描述

我正在使用带有HTTP触发器的Python Azure Function构建身份验证令牌服务器。目标是使用相互TLS(mTLS)身份验证。

工作方式:

  1. 客户端通过两个标头向功能端点发送http请求:
  • requestor-id:用于查找的标识符
  • X-ARR-ClientCert:其.pem证书的字符串表示形式
  1. 函数将在先前共享请求者的.pem数据库中查找
  2. 函数将使用pyOpenSSL加载两个.pem文件,并比较请求证书和检索到的证书:
  • not_valid_before/after日期
  • common name
  • issuer
  • thumbprint
  1. 如果证书的每个属性都匹配,则该函数将以身份验证令牌进行响应,以用于下游数据调用

我的问题是:

  • 这并不是真正的“相互”,因为托管功能代码的服务器没有在握手的任何地方(可见)出示证书。
  • mTLS握手的服务器端是否已在其他位置配置,或者它是“正常工作”的,因为Function端点是现成的http s

解决方法

如果要在Azure函数应用中进行双向TLS(mTLS)身份验证,则只需启用客户端证书。完成此操作后,Function App Service将使用客户端证书注入X-ARR-ClientCert请求标头。 Function App Service除了将此客户端证书转发到您的应用程序外不对其执行任何其他操作。您的应用代码负责验证客户端证书。有关更多详细信息,请参阅herehere