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