我能够通过 PowerShell 将密钥导入 Key Vault。现在我想制作一个 Web 界面来导入密钥。我尝试使用 KeyVaultClient.ImportKeyAsync() 函数,但我坚持使用 keyBundle 参数。我了解 keyBundle 是从 KeyVault 返回的。我不知道如何将 PFX 文件转换为 keyBundle。是否有任何类似于 Add-AzureKeyVaultKey cmdlet 的扩展方法,我在其中传递文件路径和密码?或者将 PFX 转换为 keyBundle 的方法?
问问题
679 次
1 回答
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 密钥。
于 2016-07-30T07:40:48.160 回答