1

我找不到与我遇到的错误相关的任何内容。

问题是我在store.Add下面遇到 CryptographicException:

“不支持该请求。”

MSDN 文档不是很有帮助,它指出:

无法将证书添加到存储中。

我使用以下代码作为指导,并进行了以下更改:

  • 他们正在添加到 StoreName.My,我想添加到 StoreName.Root
  • 我想使用 IDisposable 类来模拟用户。

我的概念验证代码(删节/伪劣):

public class UserLogonImpersonator : IDisposable
{
    private WindowsImpersonationContext _impersonationContext = null;
    private const int LOGON_INTERACTIVE = 2;
    private const int PROVIDER_DEFAULT = 0;

    [DllImport("advapi32.dll", SetLastError=true)]
        private static extern int LogonUser(
        string lpszUserName,
        string lpszDomain,
        string lpszPassword,
        int dwLogonType,
        int dwLogonProvider,
        ref IntPtr phToken);

    public UserLogonImpersonator()
    {
        _impersonationContext = null;
        IntPtr userHandle = IntPtr.Zero;
        const string domain = "domain";
        const string user = "user";
        const string hcpw = "password";

        try
        {
            int logonResult = LogonUser(user, domain, hcpw, 
                LOGON_INTERACTIVE, PROVIDER_DEFAULT, ref userHandle);
            bool isLoggedOn = logonResult != 0;

            if (isLoggedOn)
            {
                _impersonationContext = 
                    WindowsIdentity.Impersonate(userHandle);
            }

        }
        catch(Exception e)
        {
            // Handle Exception
        }
    }

    public void Dispose()
    {
        // UndoImpersonation();
    }

    // Private methods ...
}

public class CertService
{
    public void AddCertToRootStore()
    {
        using(new UserLogonImpersonator())
        {
            X509Certificate2 rootCert = 
                new X509Certificate2(certData.CertFilePath);
            X509Store store = 
                new X509Store(StoreName.Root, StoreLocation.CurrentUser);
            store.Open(OpenFlags.MaxAllowed);
            store.Add(rootCert);
            store.Close();
        }
    }
}

我可以删除模拟并且不会引发异常,但这不是正确的用户商店。

StoreName.AuthRoot通过模拟,我可以毫无例外地将证书放入。这不是我希望证书进入的商店。

这些无异常的解决方案都不起作用。我要求程序以提升的权限运行并进入另一个用户的商店。

4

1 回答 1

0

我通过手动解决了这个问题。

我想这样做是为了自动化“测试链证书”。我们的第三方 CA 为我们提供了一组 .local 域的证书。

我们的实际用例已经安装了根证书和链证书。

于 2017-09-19T21:20:49.033 回答