【问题标题】:Azure API Management - Validate incoming client certificate and Send cert to backendAzure API 管理 - 验证传入的客户端证书并将证书发送到后端
【发布时间】:2020-04-11 00:17:24
【问题描述】:

在 Azure API 管理中,我试图能够验证来自调用应用程序的传入证书以及将证书发送到后端。我也在尝试使用 Azure Keyvault Certs 来执行此操作。我能够独立完成其中任何一项工作,但无法让他们一起工作。

基本上我想从 Keyvault 获取证书,确保传入的证书匹配,然后还将相同的证书发送到后端以进行端到端证书验证。通过使用下面的入站策略,我可以从 keyvault 获取证书并使用它发送到我的后端。我还能够获得传入证书的缩略图。

我遇到的问题是从我从 keyvault 获得的证书的 base64 字符串中获取指纹。我无论如何都可以将证书字符串转换为证书对象?

<inbound>
        <base />
        <send-request mode="new" response-variable-name="keyVaultCertResponse" timeout="20" ignore-error="false">
            <set-url>https://MYKEYVAULTNAME.vault.azure.net/secrets/CLIENTCERTTEST/?api-version=2016-10-01</set-url>
            <set-method>GET</set-method>
            <authentication-managed-identity resource="https://vault.azure.net" />
        </send-request>
        <set-variable name="keyVaultCertBase64" value="@(((IResponse)context.Variables["keyVaultCertResponse"]).Body.As<JObject>()["value"].ToString())" />
        <choose>
            <when condition="@(context.Request.Certificate == null)">
                <return-response>
                    <set-status code="403" reason="No Client Certificate Provided to APIM" />
                </return-response>
            </when>
            <when condition="@(context.Variables["keyVaultCertResponse"] != context.Request.Certificate.Thumbprint)">
                <return-response>
                    <set-status code="403" reason="Client Certificate Presented to APIM is incorrect" />
                </return-response>
            </when>
        </choose>
        <authentication-certificate body="@(Convert.FromBase64String((string)context.Variables["keyVaultCertBase64"]))" />
    </inbound>

【问题讨论】:

    标签: certificate azure-api-management


    【解决方案1】:

    在您的第二个when 中,您将keyVaultCertResponse(即IResponse 对象)与客户端证书的指纹进行比较。如果您可以通过指纹比较它们,请尝试实例化 X509Certificate2 对象并从中获取指纹。像这样:

    new X509Certificate2(Convert.FromBase64String((string)context.Variables["keyVaultBase64"])). Thumbprint == context.Request.Certiricate.Thumbprint
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-26
    • 1970-01-01
    • 2023-03-10
    • 2018-10-15
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    相关资源
    最近更新 更多