我将证书上载到Azure KeyVault,并使用注册到Active Directory的应用程序获得对它的“全部”访问。这一切都很好。现在我需要将获得的密钥加载到X509Certificate中,以便能够将其用作调用第三方遗留SOAP Web服务的客户端证书。据我所知,我只能使用X509Certificate来调用该Web服务。Azure KeyVault如何加载X509Certificate?
把它作为密钥或秘密上传它并不重要?我已经尝试了两个。
var clientId = "...."
var clientSecret = "...."
..
var token = authenticationContext.GetAccessToken(resource, adCredential);
var keyClient = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(token));
KeyBundle key = keyClient.GetKeyAsync("https://mycertifcates.vault.azure.net/keys/MyCertificate/123456789");
到目前为止好,我有一个KeyBundle作为一个结果,它好像我可以将其转换为Base64String,但无论我尝试我最终例外:(
1日尝试我想:
var publicKey = Convert.ToBase64String(key.Key.N);
var cert = X509Certificate.FromBase64String(publicKey);
System.Security.Cryptography.CryptographicException { “无法找到请求的对象\ r \ n。”}
AHHHH
第2次尝试,它加载到RSACryptoServiceProvider,但与该怎么办呢?结果到同一个例外,我甚至能够得到私有密钥,如果我想
var rsaCryptoProvider = new RSACryptoServiceProvider();
var rsaParameters = new RSAParameters()
{
Modulus = key.Key.N,
Exponent = key.Key.E
};
rsaCryptoProvider.ImportParameters(rsaParameters);
var cspBlob = rsaCryptoProvider.ExportCspBlob(false);
// what to do with the cspBlob ?
var publicKey = Convert.ToBase64String(cspBlob);
没有私钥以及,公钥是不同的。当然这也行不通。
第三尝试
我使用管理门户上传它作为一个秘密证书的ContentType。
var secret = helper.GetSecret("https://myCertificate.vault.azure.net/secrets/MyCertificate/1234567890");
var value = secret.Value;
// Now I got the secret.. works flawless
// But it crash with the same exception at .Import
var exportedCertCollection = new X509Certificate2Collection();
exportedCertCollection.Import(Convert.FromBase64String(value));
var cert2 = exportedCertCollection.Cast<X509Certificate2>().Single(s => s.HasPrivateKey);
System.Security.Cryptography.CryptographicException { “找不到 请求的对象。\ r \ n”}
任何建议是值得欢迎的。
我需要PFX包括私有密钥,看着追踪日志
ystem.Net信息:0:[37880] SecureChannel#23107755 - 1个客户端证书以供选择左。 System.Net信息:0:[37880] SecureChannel#23107755 - 尝试在证书存储中查找匹配的证书。 System.Net信息:0:[37880] SecureChannel#23107755 - 查找证书的私钥:[主题]
看来微软是非常繁忙的一个改进KeyVault库,样品至少..在一个叉:https://开头github.com/Azure/azure-sdk-for-net/tree/93c8ebcf01461ed5d838837dc7dbb7b3f507eec0/src/KeyVault/Microsoft.Azure.KeyVault/Customized – rfcdejong