经过大量搜索并尝试了其他答案,每种解决方案-仍然没有成功
简短的序言:我的计算机对自身的响应请求-确实适用于证书。从另一台计算机到我的计算机-不会。
在我的机器上-我创建了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
(摘自here)
我已经将它们两者安装在我的机器上的商店中(通过mmc):
我正在使用这个简单的WCF config,该主机托管在我机器上的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();
-我确实得到结果:
太好了。
现在,让我们转到另一台计算机,该计算机是我在 only 中安装的公用密钥证书放入受信任的根目录中。
但是-现在,当我访问我的计算机(使用相同的代码^)时-出现以下错误:
证书“ CN = ds.com”必须具有私钥。该过程必须 拥有私钥的访问权限。
即使我在计算机上关闭了WAS IIS服务,我仍然在另一台计算机上看到错误。
似乎问题仅出在另一台机器上。我已经在另一台机器上设置了权限:
C:\ProgramData\Microsoft\Crypto <--------Everyone: full control +inheritance
问题:
我在这里想念什么?为什么要在客户端计算机中寻找私钥。它不应该具有私钥。专用服务器只能驻留在服务计算机中。 (这是我的机器)。