用户帐户无权访问客户端证书的私钥

Kur*_*ula 5 c# mmc ssl-certificate x509certificate

我有一个场景,我在代码中使用证书来触发操作。将证书导入到本地计算机并运行 C# 代码后,它会引发私钥访问问题,并显示错误“用户帐户无法访问客户端证书的私钥”。任何可以解决问题或可以让我调试问题的指针?

我做了什么:运行 - certlm.msc 个人 - 证书 - 所有任务 - 导入 - 本地计算机 - 浏览我的 .cer 文件

我试图解决(但无法解决):运行 - certlm.msc 个人 - 证书 - 我的证书 - 右键单击​​ - 所有任务 - 管理私钥 - 添加具有完全控制权的“网络服务”。我尝试添加我的邮件 ID 或用户名,但不允许添加。

错误:System.InvalidOperationException:“用户帐户无权访问客户端证书的私钥”

配置:

<system.serviceModel>
        <behaviors>
            <endpointBehaviors>
                <behavior name="ClientBehavior">
                    <clientCredentials>
                        <clientCertificate findValue="xxxx-correct thumbprint-xxxxxxx" storeLocation="LocalMachine" storeName="My" x509FindType="FindByThumbprint" />  
                    </clientCredentials>
                </behavior>
            </endpointBehaviors>
        </behaviors>
</system.serviceModel>
Run Code Online (Sandbox Code Playgroud)

Tib*_*ic4 6

问题发生的原因可能有多种选择。

你可以试试:

将用户帐户添加到本地计算机的证书存储中。要将用户帐户添加到本地计算机证书存储区,请使用命令: certutil -user -addstore "My" "C:\Users\username\Documents\certificates\client.pfx"

导入证书,可以使用以下命令:certutil -user -importpfx "C:\Users\username\Downloads\cert.pfx"

将用户帐户添加到证书的私钥访问控制列表 (ACL)。您可以通过在提升的命令提示符中运行以下命令来执行此操作: certutil -user -setreg 。例如,如果您的证书指纹是 1234567890ABCDEF 并且您的用户帐户是 MyUser ,您将运行以下命令:certutil -user -setreg 1234567890ABCDEF MyUser

您可以通过在提升的命令提示符中运行以下命令来查找证书的指纹,在此命令中,指纹称为“证书哈希”:certutil -store my

您可以通过在提升的命令提示符中运行以下命令来查找用户帐户:whoami /user

最后可以尝试使用代码将证书导入到本地计算机。例子:

public static void ImportCertificate(string certificatePath)
{
    X509Certificate2 certificate = new X509Certificate2(certificatePath);
    X509Store store = new X509Store(StoreName.My, StoreLocation.LocalMachine);
    store.Open(OpenFlags.ReadWrite);
    store.Add(certificate);
    store.Close();
} 
Run Code Online (Sandbox Code Playgroud)

如果有任何选项有效,请告诉我。


Kur*_*ula 0

经过几周的努力,我找到了问题的解决方案。我以管理员身份运行 Visual Studio,但经过几次尝试,我尝试以特定用户身份运行 Visual Studio(Shift + 右键单击​​ Visual Studio 快捷方式),输入我的凭据并打开 Visual Studio。通过使用我的凭据以特定用户身份打开 Visual Studio 可以解决该问题。