【问题标题】:Why do I get UnauthorisedAccessException from ImportPfxDataAsync?为什么我会从 ImportPfx DataAsync 获得 UnauthorizedAccessException?
【发布时间】:2014-12-03 23:20:49
【问题描述】:

我正在尝试将 X.509 证书导入我的 WinRT 应用程序。证书是通过从 Windows 中的证书管理器中以 PXCS #12 格式导出证书及其私钥来生成的。

我使用FileOpenPicker 来选择文件。为了便于测试,我已将证书的密码硬编码到我的方法中:

private async void LoadCertificateAsync()
{
    var picker = new FileOpenPicker();

    picker.SuggestedStartLocation = PickerLocationId.Desktop;
    picker.FileTypeFilter.Add(".pfx");
    picker.ViewMode = PickerViewMode.List;

    var file = await picker.PickSingleFileAsync();
    var buffer = await FileIO.ReadBufferAsync(file);

    string certificateData = CryptographicBuffer.EncodeToBase64String(buffer);

    string password = "47679005-c8b8-47b5-b54c-277b12854973";

    await CertificateEnrollmentManager.ImportPfxDataAsync(
            certificateData,
            password,
            ExportOption.NotExportable,
            KeyProtectionLevel.NoConsent,
            InstallOptions.None,
            "Client Certificate");
}

代码运行到调用ImportPfxDataAsync,此时我收到UnauthorisedAccessException,如下所示:

“System.UnauthorizedAccessException”类型的未处理异常 发生在 mscorlib.dll 中

WinRT 信息:_InstallResponse

附加信息:访问被拒绝。 (HRESULT 的例外情况: 0x80070005 (E_ACCESSDENIED))

我要上传的证书在我的 SkyDrive here

我找不到任何文档来解释为什么我可能会收到此错误,也没有建议我需要做什么来解决它,无论是导出的证书中的错误、应用程序的配置还是环境中的错误。

【问题讨论】:

  • 并不是说它有多大帮助,但代码似乎很好,因为它在我的机器上运行
  • 那么它要么是特定于机器的(哦不),要么是关于我正在导入的证书的一些东西。我会将证书加载到公开的地方。
  • 我上传了一个用于测试目的的证书并修改了代码中的密码。如果您可以尝试使用证书的代码,它可能会增加线索。
  • 将证书下载到我的桌​​面文件夹中,使用您的密码,也不例外。正如预期的那样,更改了密码并得到了异常。我在机器上以管理员身份运行(认为这可能与给定异常相关)。你有其他的环境来检查它吗?
  • 我可以构建一个虚拟机——希望能给我一些明确的结果。非常感谢您的帮助。

标签: c# windows-runtime certificate


【解决方案1】:

我的代码中有同样的错误。 我的解决方案是检查 Package.appxmanifest

中的共享用户证书企业身份验证功能

【讨论】:

  • 我在本地加载证书,并尝试将其放入应用程序的缓存中。为了让它工作,我只需要共享用户证书(不需要企业)。
  • 是的,你是对的,它在没有企业身份验证的情况下也可以工作,似乎是为了其他目的。
猜你喜欢
  • 2011-12-09
  • 2019-12-25
  • 2016-09-09
  • 1970-01-01
  • 2023-04-07
  • 1970-01-01
  • 1970-01-01
  • 2017-04-30
  • 2019-12-16
相关资源
最近更新 更多