将pem文件上载到Azure密钥保管库密钥中

时间:2018-02-09 15:06:40

标签: azure azure-keyvault

我已经通过azure portal将pem文件上传到Azure Key Vault Keys并尝试使用以下函数来使用"azure-keyvault": "^3.0.0-preview",获取数据

client.getKey(vaultUri, keyName, keyVersion,  {maxresults : 10}, function(err, result)  {
    if (err) throw err;

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

结果

{ 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文件,我们非常感谢您提供的任何帮助。我对azure vault非常陌生,并尝试使用keys, secrets and certificates进行一些尝试。

1 个答案:

答案 0 :(得分:3)

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

使用,您可以备份密钥,但Azure Key Vault中的备份也受到保护,您无法检索或请求获取密钥正文内容。备份有助于您丢失密钥并想要恢复密钥。

可能不在问题的范围内,但我很乐意介绍

如果将证书上传到证书库,则只能导出x509证书的CER内容并生成.cer文件。您无法导出包含私钥的完整密钥。

如果您以秘密的形式将证书(称为.pfx文件)上传到Azure Key Vault,您可以使用以下几种方式以编程方式将其下载到客户端:

  • 使用 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); } }
  • 致电KeyVault REST API

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

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

public void rule2b(List<Integer> diceRolled) {
    score.updateTotalScore(
             diceRolled.stream()
                       .collect(Collectors.groupingBy(
                                               Function.identity(), 
                                               Collectors.counting()))
                       .entrySet()
                       .stream()
                       .filter(e -> e.getValue() >= 3)
                       .mapToLong(e -> e.getKey() * 10L)
                       .sum()
    );
}

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

注意:即使您在上传到Secret商店时设置了密钥保管库的导出证书(作为密码)也没有密码