首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将pem文件上传到Azure密钥库中

将pem文件上传到Azure密钥库中
EN

Stack Overflow用户
提问于 2018-02-09 15:06:40
回答 1查看 7.4K关注 0票数 1

我通过azure门户将一个pem文件上传到Azure Key Vault Keys,并尝试了下面的函数来使用"azure-keyvault": "^3.0.0-preview",获取数据。

代码语言:javascript
复制
client.getKey(vaultUri, keyName, keyVersion,  {maxresults : 10}, function(err, result)  {
    if (err) throw err;

    console.log(result,'-----------key-');   
})

结果

代码语言:javascript
复制
{ key:
    { 
     kid: 'https://test.vault.azure.net/keys/test/1123123123lksldkf',
     kty: 'RSA',
     keyOps: [ 'sign', 'verify', 'wrapKey', 'unwrapKey', 'encrypt', 'decrypt' ],
     n: <Buffer  ... >,
     e: <Buffer > 
    },
    attributes: { enabled: true,
     created: 2016-02-09T08:48:27.000Z,
     updated: 2016-02-09T08:48:27.000Z,
     recoveryLevel: 'Purgeable'
    } 
} 

如何从pem下载result文件,任何帮助都是非常感谢的。我对天蓝色的金库和尝试几样东西的keys, secrets and certificates几乎是新的。

EN

回答 1

Stack Overflow用户

发布于 2018-02-09 18:11:39

一旦证书上传到Keys存储区,您就无法从Azure Key Vault下载证书文件(无论是.pem还是.pfx)形式的Key。Azure密钥库中的密钥用于签名/加密/解密操作。返回JSON是JWT (Json令牌)的一种格式,它只包含存储密钥的公共部分。这基本上意味着不可能将输出转换为PEM或X.509格式。

使用Keys,您可以备份您的密钥,但是备份在Azure密钥库中也是受保护的,您无法检索或请求获取密钥正文内容。如果您丢失了密钥并想要恢复它,备份是很有用的。

(might不属于问题的范围,但我很想去introduce)

如果将证书上载到证书存储区,则只能导出x509证书的CER内容并生成.cer文件。无法导出包括私钥在内的全部密钥。

如果您以秘密形式将证书(例如.pfx文件)上传到Azure密钥库,您可以使用以下几种方式编程地将证书下载到客户端:

  • 使用GetSecretAsyn()
  • 调用KeyVault REST

这两种方式都需要秘密标识符和访问令牌( Azure Active提供给您的)。然后,您需要将返回值从Base64转换为字节,并以.pfx文件的形式将其写入客户端。

下面是我在异步模式下使用HttpClient生成上传的PFX文件的示例代码(来自秘密存储)

代码语言:javascript
复制
    public static async Task<string> GetSecret(HttpClient client)
    {
        string url = $"/secrets/cert01?api-version=2016-10-01";

        using (var httpResponse = await client.GetAsync(url))
        {
            httpResponse.EnsureSuccessStatusCode();
            string responsContent = await httpResponse.Content.ReadAsStringAsync();
            JObject jsonKv = JObject.Parse(responsContent);
            string secretBody = jsonKv["value"].ToString();
            return secretBody;
        }
    }

    public static async Task ExportPfx()
    {
        string filePath = @"test02.pfx";

        var key = await GetSecret();
        byte[] encodedText = Encoding.Unicode.GetBytes(key);
        using (FileStream sourceStream = new FileStream(filePath, FileMode.Append, FileAccess.Write, FileShare.None, bufferSize: 4096, useAsync: true))
        {
            await sourceStream.WriteAsync(encodedText, 0, encodedText.Length);
        }

    }

导出证书后,将其导入到本地计算机,并验证其是否具有相同的拇指指纹和其他规范。

注意:从密钥库导出的证书(作为秘密)没有密码,即使您在上传到秘密存储时设置它。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48708681

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档