Azure Key Vault 证书指纹格式不匹配

问题描述 投票:0回答:1

我正在尝试通过 Azure 的 REST API 检索 ssl 证书的指纹,并将其从逻辑应用程序内转换为十六进制值。 REST API 的返回值包括一个属性

x5t
,其中包含指纹:

{
  "id": "https://myvault.vault.azure.net/certificates/selfSignedCert01/f60f2a4f8ae442cfb41ca2090bd4b769",
  "kid": "https://myvault.vault.azure.net/keys/selfSignedCert01/f60f2a4f8ae442cfb41ca2090bd4b769",
  "sid": "https://myvault.vault.azure.net/secrets/selfSignedCert01/f60f2a4f8ae442cfb41ca2090bd4b769",
  "x5t": "a9gQzwmHiKJ3vHoKhXVTFuMohMX",
...

但是,我需要的是门户中显示的格式的指纹,它表示它是十六进制的:

文本格式:

X.509 SHA-1 Thumbprint (in hex)
54795FFE62D9088DD6D4AA47393...

这个十六进制值是我随后需要写入单独秘密的值。 (Azure,为什么你用这种明显非标准的格式表示指纹?这也是搜索证书时证书存储中使用的格式,这就是我最终需要它的原因。但我离题了......)

如何将 REST API 返回的

x5t
字符串值(我认为是 base64 编码的二进制(?))转换为门户中作为逻辑应用步骤使用的十六进制值?我没有找到“base64 文本到十六进制”转换函数。

编辑: 如果我用“=”将值填充为 4 个字符的倍数,我可以在 Compose 步骤中成功使用

baseto64String()
函数。这给了我这样的二进制表示:

Outputs:
k�� ���w�z
�uS�(��

现在我只需要弄清楚如何在逻辑应用程序中制作该十六进制。 python 中有效的示例:

import base64
base64.b64decode('a9gQzwmHiKJ3vHoKhXVTFuMohMX=').hex()
azure azure-logic-apps
1个回答
0
投票

我最终创建了一个可以从逻辑应用程序调用的 Azure 函数:

    /// <summary>
    /// This function takes a base64 encoded string and converts it to hex. This is useful for converting the x5t
    /// certificate thumbprint the key vault REST api returns to the hex thumbprint the .net API expects.
    /// </summary>
    /// <param name="logger"></param>
    /// <param name="base64value"</param>
    [FunctionName("Base64ToHex")]
    public static async Task<IActionResult> Base64ToHex(
            [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
            ILogger log)
    {
        log.LogInformation("C# HTTP trigger function processed a request for Base64ToHex.");
        var requestBody = await new StreamReader(req.Body).ReadToEndAsync();
        dynamic bodyData = JsonConvert.DeserializeObject(requestBody);
        var encodedString = bodyData?.encodedString;
        var responseMessage = "";
        if (string.IsNullOrEmpty(encodedString))
        {
            responseMessage = /*lang=json,strict*/ "{\"error\":\"No encodedString provided\"}";
        }
        else
        {
            encodedString = encodedString.Replace("-", "+").Replace("_", "/");
            encodedString = encodedString.PadRight(encodedString.Length + (encodedString.Length * 3 % 4), '=');
            byte[] data = Convert.FromBase64String(encodedString);
            responseMessage = $@"{{""hexString"":""{Convert.ToHexString(data)}""}}";
        }
        return new OkObjectResult(responseMessage);
    }
© www.soinside.com 2019 - 2024. All rights reserved.