Маршрутизация WCF с защитой сообщений - PullRequest
16 голосов
/ 08 февраля 2012

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

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

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

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

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

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

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

РЕДАКТИРОВАТЬ: Для всех клиентов / маршрутизаторов (как серверов, так и клиентов) / серверов безопасность настроена одинаково:

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

Ответы [ 4 ]

2 голосов
/ 05 ноября 2014
1 голос
/ 14 марта 2012

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

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

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

0 голосов
/ 15 апреля 2012

В этом блоге объясняется, что Microsoft не поддерживает этот сценарий-

http://blogs.microsoft.co.il/blogs/applisec/archive/2011/12/12/wcf-routing-and-message-security.aspx

0 голосов
/ 08 апреля 2012

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) Если исключений нет, проверьте отпечатки пальцев сервисного сертификата с обеих сторон.

...