Я пытаюсь создать службу WCF, которая будет использовать безопасность в режиме сообщений с сертификатом. Когда я запускаю сервисный код, как в IIS, так и в cassini, я получаю следующее сообщение
Вполне вероятно, что сертификат
'CN = TempCA' может не иметь закрытого ключа
который способен к обмену ключами или тому
процесс может не иметь прав доступа для
закрытый ключ
Я создал сертификаты, используя следующие команды
makecert -n "CN=TempCA" -r -sv TempCA.pvk TempCA.cer -sky Exchange -pe
makecert -sk SignedByCA -iv TempCA.pvk -n "CN=SignedByCA" -ic TempCA.cer SignedByCA.cer -sr localmachine -ss My
TempCA.cer был импортирован в «Доверенные корневые центры сертификации \ Сертификаты», а SignedByCA.cer - в «Личные \ сертификаты»
Затем я выполнил следующую команду
pvk2pfx.exe -pvk TempCA.pvk -spc TempCA.cer
и импортировал TempCA.pfx в «Личные \ Сертификаты»
Файл конфигурации службы выглядит следующим образом (взят из учебника по MSDN и изменен для моего проекта)
<system.serviceModel>
<services>
<service name="Service.Service1" behaviorConfiguration="wsHttpEnpointBinding">
<endpoint address="http://localhost:5372/Service1.svc" binding="wsHttpBinding"
bindingConfiguration="wsHttpEndpointBinding" name="wsHttpEndpoint"
contract="Service.Contracts.IService1" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="wsHttpEnpointBinding">
<serviceDebug includeExceptionDetailInFaults="true"/>
<serviceMetadata httpGetEnabled="true" />
<serviceCredentials>
<!-- Certificate storage path on the server -->
<serviceCertificate findValue="TempCA" x509FindType="FindBySubjectName" storeLocation="LocalMachine" storeName="My" />
<issuedTokenAuthentication allowUntrustedRsaIssuers="true" />
<!-- Certificate storage path in the client -->
<clientCertificate>
<certificate findValue="TempCA" x509FindType="FindBySubjectName" storeLocation="LocalMachine" storeName="My"/>
</clientCertificate>
</serviceCredentials>
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="wsHttpEnpointBinding">
<clientCredentials>
<clientCertificate findValue="TempCA" x509FindType="FindBySubjectName" storeLocation="LocalMachine" storeName="My"/>
<serviceCertificate>
<authentication certificateValidationMode="None" />
</serviceCertificate>
</clientCredentials>
</behavior>
</endpointBehaviors>
</behaviors>
<bindings>
<wsHttpBinding>
<binding name="wsHttpEndpointBinding">
<security mode="Message">
<message clientCredentialType="Certificate" />
</security>
</binding>
</wsHttpBinding>
</bindings>
</system.serviceModel>
Я потратил значительное количество времени, пытаясь решить эту проблему, но я не добиваюсь реального прогресса ...