2016-04-28 13 views
0

У меня проблема с Windows Azure ACS, и я не могу определить, должно ли это быть так, или если в моем коде есть ошибка.Вызов доверенной стороны через HTTPS и шифрование токена

У меня есть несколько полагающихся сторон, настроенных в ACS, и все они настроены с помощью HTTPS. Каждая служба настроена таким образом, что требуется шифрование Token. Для этого я загрузил сертификат, созданный с помощью MakeCert.exe.

Когда клиент взаимодействует с проверяющей стороной, я добавляю публичную часть сертификата в качестве служебного удостоверения и добавить имя субъекта как DnsIdentity:

var identity = EndpointIdentity.CreateDnsIdentity(GetClientCertificateSubjectName()); 
var serviceEndpointAddress = new EndpointAddress(new Uri(_serviceAddress), identity); 

// Creation of channel factory 

if(channelFactory.Credentials != null) { 
    channelFactory.Credentials.ServiceCertificate.DefaultCertificate = GetClientCertificate(); 
    channelFactory.Credentials.ClientCertificate.Certificate = GetServiceIdentityCertificate(); 
} 

Вот вещь: когда я называю полагаясь на HTTPS, я могу пропустить создание EndpointIdentity, а затем полагающаяся сторона даст мне правильный ответ. Я также могу пропустить установку свойства ServiceCertificate.DefaultCertificate или установить абсолютно случайный сертификат, и полагающаяся сторона все равно даст мне правильный ответ.

При вызове через HTTP выполнение любого из вышеперечисленных действий приведет к ошибке ACS с сообщениями, указывающими, что я не использовал правильные сертификаты. Короче говоря: при вызове через HTTP я могу общаться только с правильным сертификатом клиента. Я ожидал, что это также относится к HTTPS.

Я могу себе представить, что ChannelFactory<T> или ACS достаточно умен, чтобы обнаружить, что HTTPS используется, и что сконфигурированное шифрование пропускается в пользу шифрования SSL. К сожалению, я не могу найти документацию, которая поддерживает эту идею.

Мой вопрос: нормально ли игнорировать EndpointIdentity и сертификаты при вызове полагающейся стороны по протоколу HTTPS? Или мне нужна дополнительная настройка, чтобы сделать эту работу?

Заранее благодарен!

ответ

0

Количество информации, которую я дал, оказалось недостаточным для правильного ответа на вопрос. Оказалось, что все это было в привязках, которые мы создавали. Это создает привязку со следующим фрагментом кода:

public static Binding CreateServiceBinding(string acsCertificateEndpoint, string bindingNameSpace, bool useSsl) { 
    var binding = new IssuedTokenWSTrustBinding(CreateAcsCertificateBinding(), new EndpointAddress(acsCertificateEndpoint)); 

    if(useSsl) { 
    binding.SecurityMode = SecurityMode.TransportWithMessageCredential; 
    } 

    if(!string.IsNullOrWhiteSpace(bindingNameSpace)) { 
    binding.Namespace = bindingNameSpace; 
    } 

    return binding; 
} 

public static CertificateWSTrustBinding CreateAcsCertificateBinding() { 
    return new CertificateWSTrustBinding(SecurityMode.TransportWithMessageCredential); 
} 

Это приводит к следующему:

  1. Если это HTTP связи, он проходит через MutualCertificate потока режим аутентификации и применяется на сообщение слой только. Именно поэтому клиенту поручено представить сертификат клиента. Этот элемент привязки создает асимметричный элемент привязки безопасности, который настроен на необходимость проверки подлинности клиента на основе сертификата, а также проверки подлинности сервера на основе сертификатов.
  2. Если это https-связь, он проходит через режим проверки подлинности CertificateOverTransport и применяется только на транспортном уровне. Вот почему, хотя клиентский сертификат не представлен, он работает. Этот элемент привязки ожидает, что транспорт будет обеспечивать аутентификацию сервера, а также защиту сообщений (например, HTTPS).

Для получения более подробной информации о режимах безопасности, проверьте следующие ссылки:

https://msdn.microsoft.com/en-us/library/ms733098%28v=vs.110%29.aspx https://msdn.microsoft.com/en-us/library/ms731074%28v=vs.110%29.aspx

Надеется, что это помогает кто-то!

 Смежные вопросы

  • Нет связанных вопросов^_^