Я уже некоторое время борюсь с WCF и, похоже, не могу этого понять.
У меня есть собственный сервис WCF с включенным SSL (с использованием подписанного сертификата от самоподписанного корневого центра сертификации), пока что все хорошо. Услуга предназначена для делового общения, поэтому сертификаты кажутся лучшим решением.
(в настоящее время я использую привязку WS, но это только для целей разработки, поскольку все методы привязки поддерживают (насколько мне известно) безопасность на транспортном уровне с помощью клиентских сертификатов.)
Некоторые соответствующие биты конфигурации для службы:
<bindings>
<wsHttpBinding>
<binding name="wsHttpBinding">
<security mode="Transport">
<transport clientCredentialType="Certificate"/>
</security>
</binding>
</wsHttpBinding>
</bindings>
<!-- snip -->
<serviceCredentials>
<clientCertificate>
<authentication certificateValidationMode="PeerTrust" trustedStoreLocation="CurrentUser" />
</clientCertificate>
</serviceCredentials>
Когда у меня есть клиент, использующий самозаверяющий сертификат, который находится в хранилище «доверенных лиц» пользователя, запустившего службу WCF, происходит сбой. Когда я использую сертификат, подписанный моим собственным корневым центром сертификации, он работает, даже если его нет в хранилище «доверенных лиц».
Я ожидал, что смогу использовать самозаверяющие сертификаты, хранить их в хранилище "доверенных лиц", и все будет работать. Но, кажется, происходит какая-то дополнительная проверка, там что-то мне не хватает? Есть ли лучший способ?