После долгих поисков и попыток найти ответы других, все решения остались безуспешными
Краткое предисловие: запрос ответа от моей машины к самой себе - работает с сертификатом. С другого компьютера на мою - нет.
На своей машине я создал 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 в моем < / strong> машина.
Когда я вызываю эту службу (с моей машины на себя) с помощью этого простого кода:
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
Вопрос:
Что мне здесь не хватает? Почему он ищет закрытый ключ на клиентской машине. У него не должно быть закрытого ключа. Частный должен находиться только на служебном компьютере. (это моя машина).
Изображение трассировки полного стека (на другом компьютере)