以编程方式将密钥导入Azure Key Vault

时间:2016-06-04 13:27:43

标签: azure azure-keyvault

我可以通过PowerShell将密钥导入Key Vault。现在我想创建一个Web界面来导入密钥。 我尝试使用KeyVaultClient.ImportKeyAsync()函数,但我坚持使用keyBundle参数。我知道keyBundle是从KeyVault返回的。我不知道如何将PFX文件转换为keyBundle。 是否有类似于Add-AzureKeyVaultKey cmdlet的扩展方法,我传递文件路径和密码?或者将PFX转换为keyBundle的方法?

1 个答案:

答案 0 :(得分:4)

它不像单个方法那么容易,但这应该在.Net 4.6.1中做到了。它仅适用于包含RSA密钥的PFX,但这基本上是PFX和KeyVault都支持的唯一功能。这是代码:

X509Certificate2 cert = new X509Certificate2(
    pfxBytes,
    password,
    X509KeyStorageFlags.Exportable);

using (RSA rsa = cert.GetRSAPrivateKey())
{
    var parameters = rsa.ExportParameters(true);

    KeyBundle bundle = new KeyBundle
    {
        Key = new JsonWebKey
        {
            Kty = JsonWebKeyType.Rsa,
            // Private stuff
            D = parameters.D,
            DP = parameters.DP,
            DQ = parameters.DQ,
            P = parameters.P,
            Q = parameters.Q,
            QI = parameters.InverseQ,
            // Public stuff
            N = parameters.Modulus,
            E = parameters.Exponent,
        },
    };
}

如果您使用的是旧版本的.Net,则必须使用RSA rsa = (RSA) cert.PrivateKey而不是cert.GetRSAPrivateKey(),但建议使用上面的代码,因为它更清楚地处理IDisposable和非RSA密钥