为了账号安全,请及时绑定邮箱和手机立即绑定

证书“CN=ds.com”必须有一个私钥。进程必须拥有私钥的访问权限

证书“CN=ds.com”必须有一个私钥。进程必须拥有私钥的访问权限

C#
慕丝7291255 2021-09-19 18:59:31
在搜索了很多并尝试了其他人的答案后,每个解决方案 - 仍然没有成功简短的前言:从我的机器到自身的响应请求 - 与证书一起工作。从另一台计算机到我的机器 - 它没有。在我的机器上 - 我创建了 2 个证书:公钥和私钥,通过:makecert -r -pe -n "CN=ds.com" -b 01/01/2018 -e 01/01/2020  -sky exchange Server.cer -sv Server.pvk进而 :pvk2pfx.exe -pvk Server.pvk -spc Server.cer -pfx Server.pfx(取自这里)我已经安装了他们都在店里在我的机器(通过MMC):我正在使用这个简单的WCF 配置,它托管在我机器上的WAS IIS 中。当我用这个简单的代码调用该服务(从我的机器到它自己)时:  WSHttpBinding myBinding = new WSHttpBinding();            myBinding.Security.Mode = SecurityMode.Message;            myBinding.Security.Message.ClientCredentialType =MessageCredentialType.Certificate;            EndpointAddress ea = new                EndpointAddress("http://ds.com/Service1.svc/HelloWorldService");            var client   = new HelloWorldServiceClient(myBinding, ea);            client.ClientCredentials.ClientCertificate.SetCertificate(                StoreLocation.CurrentUser,                StoreName.Root,                X509FindType.FindByThumbprint,                "9394f570069e7af263ef7ca5a46a5bcab9f68659");    Console.WriteLine(client.GetMessage("Mike Liu"));    Console.ReadLine();    client.Close();— 我确实得到了结果:伟大的。现在让我们转到另一台计算机,我只将公钥证书安装到受信任的根中。但是 - 现在当我访问我的计算机时(使用相同的代码 ^) - 我收到以下错误:证书“CN=ds.com”必须有一个私钥。该进程必须具有对私钥的访问权限。即使我在我的电脑上关闭了 WAS IIS 服务,我仍然在另一台机器上看到错误。似乎问题只出在另一台机器上。我已经在另一台机器上设置了权限:C:\ProgramData\Microsoft\Crypto <--------Everyone: full control +inheritance题:我在这里错过了什么?为什么它会在客户端机器中寻找私钥。它不应该有私钥。私人应仅驻留在服务计算机中。(这是我的机器)。
查看完整描述

1 回答

?
慕工程0101907

TA贡献1887条经验 获得超5个赞

在您的示例中,您在服务器和客户端上使用相同的证书。那不是它应该的样子。

为了保护客户端请求,您必须使用客户端证书对请求进行签名,并且服务器响应使用服务器证书进行签名。

所以在客户端你应该有:

  • 其个人证书存储中的客户端证书的私钥(和公钥)

  • 受信任的根授权中服务器证书的公钥

在服务器上你应该有相反的:

  • 它的个人证书存储中的服务器证书的私钥(和公钥)

  • 受信任的根授权中客户端证书的公钥

你可以看到例如这里和阅读更多关于它在这里

这篇文章很好地描述了有关 HTTPS 协议的详细信息。


查看完整回答
反对 回复 2021-09-19
  • 1 回答
  • 0 关注
  • 236 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信