Я загрузил сертификат Azure KeyVault и получил «все» доступ к нему с помощью приложения, зарегистрированного в Active Directory. Все работает отлично. Теперь мне нужно загрузить полученный ключ в X509Certificate, чтобы иметь возможность использовать его в качестве клиентского сертификата для вызова веб-сервиса SOAP 3rdparty. Насколько я знаю, я могу использовать только сертификат X509 для вызова этого веб-сервиса.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 { "не удается найти требуемый объект \ г \ п."}
Ahhhh
вторая попытка, загружая его в 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 { "Не удается найти запрашиваемый объект. \ Г \ п"}
Любое предложение можно только приветствовать.
мне нужна PFX включая частный ключ, глядя на tracelog
ystem.Net информация: 0: [37880] SecureChannel # 23107755 - Оставшись с 1 сертификатов клиента на выбор. Информация о System.Net: 0: [37880] SecureChannel # 23107755 - попытка найти соответствующий сертификат в хранилище сертификатов. System.Net Информация: 0: [37880] SecureChannel # 23107755 - Обнаружение закрытого ключа для сертификата: [Тема]
Кажется, Microsoft очень занята с улучшенной библиотекой KeyVault, для образцов, по крайней мере .. в вилке: https: // github.com/Azure/azure-sdk-for-net/tree/93c8ebcf01461ed5d838837dc7dbb7b3f507eec0/src/KeyVault/Microsoft.Azure.KeyVault/Customized – rfcdejong