WCF + SSL + IIS - Несколько экземпляров службы
От: SergASh  
Дата: 21.09.11 11:56
Оценка:
Привет всем!

Есть 3 экземпляра одного и того же веб-сайта, расположенные на одном сервере. Привязаны они все по разным доменам и IP адресам, а именно
sub1.domain.com ON xxx.xxx.xxx.28:80
sub2.domain.com ON xxx.xxx.xxx.29:80
sub3.domain.com ON xxx.xxx.xxx.30:80

DNS для субдоменов настроен правильно, каждое имя смотрит на соответствующий IP.
Для каждого экземпляра при помощи SelfSSL сгенерирован свой самоподписанный сертификат вот так:
selfssl /N:CN=sub1.domain.com /V:3650 /K:4096 /S:28

На каждый сайт можно зайти по HTTPS, то есть собственно веб работает.

Кроме веба сайт хостит WCF-службу, к которой доступ тоже идет через SSL. Но только у первых двух экземпяров служба доступна, а у третьего нет.

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

Падает вот с таким стектрейсом
  Скрытый текст
System.ServiceModel.Security.SecurityNegotiationException: The token provider cannot get tokens for target 'http://sub1.domain.com/tratata.svc'. ---> System.ServiceModel.Security.SecurityNegotiationException: The caller was not authenticated by the service. ---> System.ServiceModel.FaultException: The request for security token could not be satisfied because authentication failed.
at System.ServiceModel.Security.SecurityUtils.ThrowIfNegotiationFault(Message message, EndpointAddress target)
at System.ServiceModel.Security.SspiNegotiationTokenProvider.GetNextOutgoingMessageBody(Message incomingMessage, SspiNegotiationTokenProviderState sspiState)
--- End of inner exception stack trace ---
at System.ServiceModel.Security.IssuanceTokenProviderBase`1.DoNegotiation(TimeSpan timeout)
at System.ServiceModel.Security.IssuanceTokenProviderBase`1.GetTokenCore(TimeSpan timeout)
at System.IdentityModel.Selectors.SecurityTokenProvider.GetToken(TimeSpan timeout)
at System.ServiceModel.Security.SecurityProtocol.GetToken(SecurityTokenProvider provider, EndpointAddress target, TimeSpan timeout)
--- End of inner exception stack trace ---

Server stack trace:
at System.ServiceModel.Security.SecurityProtocol.GetToken(SecurityTokenProvider provider, EndpointAddress target, TimeSpan timeout)
at System.ServiceModel.Security.MessageSecurityProtocol.GetTokenAndEnsureOutgoingIdentity(SecurityTokenProvider provider, Boolean isEncryptionOn, TimeSpan timeout, SecurityTokenAuthenticator authenticator)
at System.ServiceModel.Security.SymmetricSecurityProtocol.TryGetTokenSynchronouslyForOutgoingSecurity(Message message, SecurityProtocolCorrelationState correlationState, Boolean isBlockingCall, TimeSpan timeout, SecurityToken& token, SecurityTokenParameters& tokenParameters, SecurityToken& prerequisiteWrappingToken, IList`1& supportingTokens, SecurityProtocolCorrelationState& newCorrelationState)
at System.ServiceModel.Security.SymmetricSecurityProtocol.SecureOutgoingMessageCore(Message& message, TimeSpan timeout, SecurityProtocolCorrelationState correlationState)
at System.ServiceModel.Security.MessageSecurityProtocol.SecureOutgoingMessage(Message& message, TimeSpan timeout, SecurityProtocolCorrelationState correlationState)
at System.ServiceModel.Channels.SecurityChannelFactory`1.SecurityRequestChannel.Request(Message message, TimeSpan timeout)
at System.ServiceModel.Dispatcher.RequestChannelBinder.Request(Message message, TimeSpan timeout)
at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)
at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs)
at System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)
at System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)
Что бы это значило?

Спасибо.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.