Я создаю службу Azure WCF, защищенную ACS, которая потребует от клиентов аутентификации через сертификат.
Я хотел бы, чтобы клиент (и сервер) загружал их соответствующие сертификаты пароля из X509Store, а не из файловой системы.
Я использую этот код:
private static X509Certificate2 GetCertificate(string thumbprint)
{
var certStore = new X509Store(StoreName.My, StoreLocation.LocalMachine);
certStore.Open(OpenFlags.ReadOnly);
X509Certificate2Collection certCollection = certStore.Certificates.Find(
X509FindType.FindByThumbprint,
thumbprint, false);
certStore.Close();
if (certCollection.Count == 0)
{
throw new System.Security.SecurityException(string.Format(CultureInfo.InvariantCulture, "No certificate was found for thumbprint {0}", thumbprint));
}
return certCollection[0];
}
Проблема заключается в том, что она не загружает закрытый ключ, который необходим для аутентификации. Я попытался изменить оператор return на это:
return new X509Certificate2(certCollection[0].Export(X509ContentType.Pfx, "password"));
Однако это не выполняется с помощью CryptographicException "Неправильный сетевой пароль неверен".
Edit: Метод .Export() работает правильно, если вы не передаете аргумент пароля.
Любая помощь по этому поводу?