2012-02-08 3 views
16

У меня есть служба WCF с защитой сообщений Аутентификация.WCF Routing with Message Security

Я хочу настроить службу маршрутизации для балансировки нагрузки.

По какой-то причине он не работает, я позволил includeExceptionDetailInFaults видеть исключения, поэтому в клиенте я вижу:

Сертификат клиента не предусмотрено. Укажите клиентский сертификат в ClientCredentials.

Похоже, что сертификат не перенаправлен из службы router->.

В настоящее время клиент/маршрутизатор/служба находится на одной машине, поэтому у меня есть все сертификаты, но если я развожу их на другой машине, у маршрутизатора должны быть закрытые ключи?

Кроме того, если я хочу установить незащищенное соединение между маршрутизатором и сервисом (разгрузить безопасность), как я могу предоставить идентификатор вызывающего?

EDIT: Для всех клиентов/Router (оба сервера & клиента)/Server безопасности настроен так же:

  <security mode="Message"> 
       <message clientCredentialType="Certificate" negotiateServiceCredential="false" 
        algorithmSuite="Default" establishSecurityContext="false" /> 
      </security> 
+6

Можете ли вы показать 3 файла конфигурации? –

ответ

1

Сертификат клиента не предусмотрено. Укажите клиентский сертификат в ClientCredentials.

Я видел эту ошибку, если сертификат службы не соответствует доменному имени хоста.

Если вы все еще видите эту проблему, можете опубликовать некоторые свои записи конфигурации?

+0

Сертификат не совпадает с именем хоста. Теперь я использую «localhost» или IP. Но он все равно должен работать ... это известная ошибка? – Maxim

+0

вы можете попробовать [WinHttpCertCfg.exe] (http://msdn.microsoft.com/en-us/library/windows/desktop/aa384088 (v = vs.85) .aspx), чтобы узнать, правильно ли установлен сертификат необходимые разрешения на использование ключа. –

+0

Я не думаю, что это поможет, я запускаю приложения как Администратор, поэтому у меня должно быть достаточно прав. – Maxim

0

1) Сначала попробуйте установить сертификат на стороне клиента по коду.

ChannelFactory<IService1> factory = 
      new ChannelFactory<IService1>("Service1_Endpoint"); 
factory.Credentials.ServiceCertificate.SetDefaultCertificate(
      System.Security.Cryptography.X509Certificates.StoreLocation.CurrentUser, 
      System.Security.Cryptography.X509Certificates.StoreName.My, 
      System.Security.Cryptography.X509Certificates.X509FindType.FindBySubjectName, 
      "<SeriveCerificateName>"); 

Если у вас действительно есть проблемы с сертификатом, вы незамедлительно получите исключение при запуске приложения.

2) Если нет исключений, проверьте чеки сертификата обслуживания с обеих сторон.