2014-10-27 2 views
3

Я пытаюсь использовать услугу, опубликованную другой компанией. Спецификации о AUTH и коммуникации:Ошибка в авторизации WCF с общим SSL с использованием сертификатов

  • SOAP
  • HTTPS с взаимной SSL аутентификации (2-полосная SSL)
    • Используйте публичный сертификат, который они посылают нас (я использую в качестве ServiceCertificate)
    • Используйте частный сертификат, который они создали для нас (я использую в качестве ClientCertificate)
  • WS-Security с UsernameToken

Вот код, я пришел с до сих пор:

WSHttpBinding binding = new WSHttpBinding(SecurityMode.Transport); 
binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Certificate; 
binding.SendTimeout = binding.CloseTimeout = binding.ReceiveTimeout = binding.OpenTimeout = new TimeSpan(0, 15, 0); // 15 minutes 

Uri uri = new Uri(input.ServiceAddress); 
EndpointAddress endpointAddress = new EndpointAddress(uri); 

// Client creation 
using (Client client = new Client(binding, endpointAddress)) 
{ 
    client.ClientCredentials.ClientCertificate.Certificate = input.PrivateCertificate; 
    client.ClientCredentials.ServiceCertificate.DefaultCertificate = input.PublicCertificate; 

    client.Open(); 

    // Service call 
    ResponseType response = client.ServiceCall(params); 
} 

Я получаю эту ошибку, когда служба в настоящее время называется:

Произошла ошибка при создании запроса на HTTP для сервис. Это может быть связано с тем, что сертификат сервера не настроен должным образом с HTTP.SYS в случае HTTPS. Это также может быть вызвано несоответствием привязки безопасности между клиентом и сервером.

Вещи, которые я уже пробовал:

  • Добавление этой строки кода: "System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Ssl3;"
    • Решение найдено на this и this
  • Зарегистрируйте публичный сертификат в порту с помощью Netsh
    • Используя эту команду: «Netsh HTTP добавить sslcert ipport = 0.0.0.0: 443 certhash = Отпечаток сертификата AppID = {Применение GUID}»
    • Основываясь на другой проблеме мы имели в другом проекте

Я не знаю, как решить эту проблему, и я об этом не знаю! Уже искали много, и все, что я пробовал, не делает этого!

+1

Хотя я не могу сказать вам, что случилось, я могу сказать вам, что может пойти не так, как надо с битами SSL3 и netsh: они могли бы отключить SSL3 после недавней атаки пуделя. Вы должны проверить, какие протоколы и шифры они предлагают в рукопожатии SSL (я предполагаю, что ваш браузер доверяет SSL-сертификату, по крайней мере), а затем посмотрите, включены ли эти шифры.Netsh бит не имеет значения, поскольку этот бит является серверной, а клиент youre полностью игнорирует этот бит, если вы не используете сервер локально. Вы можете использовать https://www.ssllabs.com/ для проверки того, что происходит со стороны сервера и на стороне клиента. – Maverik

+0

закончилось ограничение слов: когда я сказал, что недавняя атака пуделя, я имею в виду как в новостях, а не как в вашей третьей стороне. – Maverik

+0

@Maverik, спасибо! У меня есть руководство, объясняющее требования к аутентификации и подключению. То, что я знаю, я написал на вопрос, но я постараюсь задать им немного больше. К сожалению, ssllabs получил непредвиденную ошибку при проверке имени домена, но сертификат сервера (публичный, который я сказал) был там, с тем, чтобы доверять ему (VeriSign). –

ответ

0

Было обнаружено, что наша инфраструктура имеет некоторые проблемы с сетью. Как только мы уберем слой безопасности с моей машины, служба работает.

Я думаю, что сертификаты (возможно, ключи) не проходили через сеть, и я получал эту ошибку (потому что она не аутентифицировалась).

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