Как получить доступ к хранилищу сертификатов приложения в приложении Windows Phone 8.1 Runtime

Я хочу получить доступ к хранилищу сертификатов моего приложения из другого приложения. Я уже включил "sharedusercertificates" в package.appmanifest файл.

Windows.Storage.StorageFile selectedCertFile = await folder.GetFileAsync(fileName);
IBuffer buffer = await FileIO.ReadBufferAsync(selectedCertFile);

string certificateData = CryptographicBuffer.EncodeToBase64String(buffer);
string password = "password";

await CertificateEnrollmentManager.ImportPfxDataAsync(
certificateData,
password,
ExportOption.NotExportable,
KeyProtectionLevel.ConsentWithPassword,
InstallOptions.None,
selectedCertFile.DisplayName);

В моем собственном приложении я могу без проблем перечислить установленные сертификаты:

protected override void OnNavigatedTo(NavigationEventArgs e)
{
    var task = CertificateStores.FindAllAsync();
    task.AsTask().Wait();
    var certlist = task.GetResults();
    Debug.WriteLine("Cert count: {0}", certlist.Count);
    LoadCertList(certlist);
}

private void LoadCertList(IReadOnlyList<Certificate> certificateList)
{
    listbox1.Items.Clear();

    foreach (Certificate cert in certificateList)
    {
        listbox1.Items.Add(cert.Subject);
    }
}

Если я попытаюсь получить доступ к ним из другого приложения, оно не будет в списке. В настройках почтового клиента Windows Phones 8.1 также отсутствует установленный сертификат. Сертификаты, которые были установлены регулярно, а не программно, перечислены.

Есть ли способ установить мои пользовательские сертификаты в хранилище сертификатов системы? Так что это может быть использовано в других приложениях.

Я искал в Интернете уже несколько дней, но не нашел решения.

Благодаря этому это должно быть возможно.

"Возможность sharedUserCertificates предоставляет контейнеру приложения доступ для чтения к сертификатам и ключам, содержащимся во всех хранилищах пользователей и хранилище доверенных корней смарт-карт". https://msdn.microsoft.com/en-us/library/windows/apps/hh465025.aspx

Я что-то пропустил? Помощь будет высоко ценится.

Dino

1 ответ

Если вы хотите, чтобы сертификат был доступен для других приложений, необходимо зарегистрировать его, используя CertificateEnrollmentManager.UserCertificateEnrollmentManager.ImportPfxDataAsync скорее тогда CertificateEnrollmentManager.ImportPfxDataAsync,

Обратите внимание, что невозможно удалить общий сертификат, если срок его действия не истек (используя InstallOptions.DeleteExpired в качестве параметра в ImportPfxDataAsync).

Кроме того, чем больше сертификатов вы используете таким образом, тем медленнее будут выполняться запросы к хранилищам сертификатов.

Другие вопросы по тегам