如何在Windows Phone 8.1运行时应用程序中访问应用程序的证书存储区

时间:2015-04-28 16:13:34

标签: windows-phone-8.1 certificate smime certificate-store

我想从其他应用访问我应用的证书商店。我已在"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 Phone 8.1的邮件客户端设置中,也缺少已安装的证书。列出了已定期安装但未按程序安装的证书。

有没有办法将自定义证书安装到系统的证书存储区?所以它可以在其他应用程序中使用。

我几天来一直在网上搜索,但我找不到解决方案。

由于这个原因,它应该是可能的。

&#34; sharedUserCertificates功能授予应用容器对所有用户存储和智能卡受信任根存储中包含的证书和密钥的读访问权限。 &#34; https://msdn.microsoft.com/en-us/library/windows/apps/hh465025.aspx

我错过了什么吗?非常感谢帮助。

恐龙

1 个答案:

答案 0 :(得分:0)

如果您希望其他应用可以访问证书,则需要使用CertificateEnrollmentManager.ImportPfxDataAsync而不是InstallOptions.DeleteExpired进行注册。

请注意,除非共享证书已过期,否则无法删除共享证书(使用ImportPfxDataAsync作为import java.util.*; import java.util.Scanner; public class Homework3 { public static void main(String[] args) { Scanner scan = new Scanner(System.in); System.out.print("Type :"); int numbers = scan.nextInt(); int [] a = {numbers}; System.out.println(Arrays.toString(a)); while ( a.length < 5 ) { System.out.print("Type: "); int number = scan.nextInt(); int[] b = Arrays.copyOf(a, a.length + 1); b[b.length-1] = number; a = b; System.out.println(Arrays.toString(a)); } Arrays.sort(a); System.out.println(Arrays.toString(a)); } } 中的参数)。

此外,您以这种方式共享的证书越多,对证书存储的查询就越慢。