Я создал свой собственный центр сертификации (CA) с помощью openssl. Затем я создал сертификат, используя предыдущий и запрос от IIS. Итак, теперь у меня есть цепочка сертификатов. Затем я привязал второй к своей службе WCF, и все в порядке. Затем на клиенте я установил свой сертификат CA в Trusted Root Certification Authority, чтобы он мог распознать мой собственный сертификат. Моя служба WCF в настоящее время работает с простым HTTP-соединением. Сторона сервера:
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="SyncWcfServices.MainServiceBehavior">
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<bindings>
<wsHttpBinding>
<binding name="ExtendedMaxSize" maxReceivedMessageSize="2147483647">
<security mode="None">
<transport clientCredentialType="None"></transport>
</security>
</binding>
</wsHttpBinding>
</bindings>
<services>
<service name="SyncWcfServices.MainService" behaviorConfiguration="SyncWcfServices.MainServiceBehavior">
<endpoint address="/syncService.svc" binding="wsHttpBinding" bindingConfiguration="ExtendedMaxSize" contract="SyncWcfServices.IMainService"></endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"></endpoint>
</service>
</services>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
</system.serviceModel>
Сторона клиента:
<system.serviceModel>
<bindings>
<wsHttpBinding>
<binding name="WSHttpBinding_IMainService" maxReceivedMessageSize="2147483647" sendTimeout="00:10:00">
<security mode="None" />
</binding>
</wsHttpBinding>
</bindings>
<client>
<endpoint address="http://localhost/SyncService/SyncService.svc"
binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IMainService"
contract="SyncServiceReference.IMainService" name="WSHttpBinding_IMainService" />
</client>
</system.serviceModel>
Итак, мне нужно изменить эти настройки, чтобы поддерживать SSL-соединение. Я читал много сообщений о том, как это сделать, но всегда используется двусторонняя проверка сертификации, что означает, что сервер должен проверять сертификат клиента, а клиент должен проверять сертификат сервера. Но я только хочу, чтобы клиент проверял сертификат сервера с помощью установленного мной ЦС. И сервер будет проверять с обычными учетными данными (имя пользователя, пароль), как и раньше. Я думаю, что мне нужно изменить режим безопасности на Транспорт с обеих сторон и конечную точку сервера mex на mexHttpsBinding, но что мне делать дальше? Пожалуйста, помогите решить эту проблему. Спасибо вам всем!