После того, как я изменил самозаверяющий сертификат "localhost" (DNS = localhost) на "Сертификат источника Cloudflare" (dns = mydomain.com), я получаю следующую ошибку:
SOAP security negotiation with 'http://localhost:8000/MyService.svc' for target 'http://localhost:8000/MyService.svc' failed. See inner exception for more details.
Внутреннее исключение:
Either the client credential was invalid or there was an error collecting the client credentials by the SSPI.
Я заметил, что после запуска клиента у меня появляется окно для ввода учетных данных.Не знаю почему.
Что я сделал точно:
- Сгенерированный запрос сертификата в IIS
- Завершенный сертификат на CloudFlare
- Полученный ключ вставлен в текстовый файлс CloudFlare Root CA
- Завершенный сертификат в IIS (Personal, LocalMachine)
- В MMC добавлен в доверенные издатели CloudFlare Root CA (LocalMachine)
- Для веб-сайта WCF изменен сертификат SSL наCloudFlare
- Изменено значение клиента с "localhost" на "mydomain.com"
- Изменено значение сервера с "localhost" на "mydomain.com"
- Изменено findValue для
WCF web.config
<system.serviceModel>
<client />
<behaviors>
<serviceBehaviors>
<behavior name="authBehavior">
<serviceAuthorization principalPermissionMode="UseWindowsGroups">
<authorizationPolicies>
<add policyType="WCF.Common.AuthorizationPolicy, WCF" />
</authorizationPolicies>
</serviceAuthorization>
<serviceCredentials>
<userNameAuthentication userNamePasswordValidationMode="Custom" customUserNamePasswordValidatorType="WCF.Common.IdentityValidator, WCF" />
<serviceCertificate findValue="CloudFlare Origin Certificate" storeLocation="LocalMachine" x509FindType="FindBySubjectName" storeName="My" />
</serviceCredentials>
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
<behavior name="svcBehavior">
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
<behavior name="">
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<bindings>
<basicHttpsBinding>
<binding name="basicHttpsEndpointBinding" maxReceivedMessageSize="1073741824" maxBufferSize="1073741824" maxBufferPoolSize="1073741824">
<readerQuotas maxDepth="32" maxArrayLength="1073741824" maxStringContentLength="1073741824" />
<security mode="Transport">
<transport clientCredentialType="Windows" />
</security>
</binding>
</basicHttpsBinding>
<wsHttpBinding>
<binding name="wsHttpEndpointBinding"></binding>
</wsHttpBinding>
</bindings>
<services>
<service name="WCF.MyService" behaviorConfiguration="svcBehavior">
<endpoint address="" binding="wsHttpBinding" bindingConfiguration="wsHttpEndpointBinding" contract="WCF.IMyService">
<identity>
<dns value="mydomain.com" />
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
</service>
</services>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
</system.serviceModel>
Client app.config
<system.serviceModel>
<bindings>
<wsHttpBinding>
<binding name="MessageAndUserName">
<security mode="Message">
<message clientCredentialType="UserName" />
</security>
</binding>
<binding name="WSHttpBinding_IMyService" />
</wsHttpBinding>
</bindings>
<client>
<endpoint address="http://localhost:8777/MyService.svc"
binding="wsHttpBinding" contract="WCF.IMyService"
name="WSHttpBinding_IMyService">
<identity>
<dns value="mydomain.com" />
</identity>
</endpoint>
</client>
<behaviors>
<serviceBehaviors>
<behavior name="DefaultServiceBehavior">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
Я размещаю дополнительные услуги в своем WCF, а также некоторые службы размещаю в Clientно ни один из них не нужен.
Я использую wsHttpBindings между WCF и Клиентом.Что я могу сделать, чтобы избавиться от этой ошибки?
Какова цель использования wsHttpBinding и т. Д. ... Разрешить только этому клиенту общаться с MyService ... больше никому не разрешено.Клиентское приложение будет работать на нескольких компьютерах в домене.Вы предлагаете использовать другой подход?
Спасибо за любую идею!
РЕДАКТИРОВАТЬ: компьютер с ошибкой не работает в домене.Ни один из них не работает для компьютера в домене: /
EDIT2: Привязка транспорта WCF web.config в режиме безопасности:
<wsHttpBinding>
<binding name="wsHttpEndpointBinding">
<security mode="Transport">
<message clientCredentialType="None" />
</security>
</binding>
</wsHttpBinding>
Привязки конфигурации на стороне клиента:
<bindings>
<wsHttpBinding>
<binding name="WSHttpBinding_IMyService">
<security mode="Transport">
<message clientCredentialType="None" />
</security>
</binding>
</wsHttpBinding>
</bindings>
<client>
<endpoint address="https://localhost:8001/MyService.svc"
binding="wsHttpBinding" contract="WCF.IMyService"
name="WSHttpBinding_IMyService">
<identity>
<dns value="mydomain.com" />
</identity>
</endpoint>
</client>
IIS:![Certificate](https://i.stack.imgur.com/grIby.png)