Доступ к веб-службе и интерфейсу HTTP с использованием аутентификации по сертификату

Это первый раз, когда мне приходится использовать аутентификацию по сертификату. Коммерческий партнер предоставляет две службы: веб-службу XML и службу HTTP. Мне нужно получить доступ к ним обоим с помощью клиентов .NET.

Что я пробовал

0. Настройка среды

Я установил SSLCACertificates (корневой и два промежуточных) и клиентский сертификат на моем локальном компьютере (win 7 professional) с помощью certmgr.exe.

1. Для веб-сервиса

  • у меня есть клиентский сертификат (der).
  • Услуга будет использоваться через прокси-сервер .NET.

Вот код:

OrderWSService proxy = new OrderWSService();
string CertFile = "ClientCert_DER.cer";

proxy.ClientCertificates.Add(new System.Security.Cryptography.X509Certificates.X509Certificate(CertFile));
orderTrackingTO ot = new orderTrackingTO() { order_id = "80", tracking_id = "82", status = stateOrderType.IN_PREPARATION };
resultResponseTO res = proxy.insertOrderTracking(ot);

Исключение, сообщенное в последнем выражении: Ошибка запроса с пустым ответом.

2. Для интерфейса HTTP

  • это интерфейс HTTPS, который я должен вызывать с помощью метода POST.
  • Запрос HTTPS будет отправлен клиентом .NET с использованием HTTPWebRequest.

Вот код:

string PostData = "MyPostData";

//setting the request
HttpWebRequest req;
req = (HttpWebRequest)HttpWebRequest.Create(url);
req.UserAgent = "MyUserAgent";
req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded";
req.ClientCertificates.Add(new System.Security.Cryptography.X509Certificates.X509Certificate(CertFile, "MyPassword")); 

//setting the request content
byte[] byteArray = Encoding.UTF8.GetBytes(PostData);
Stream dataStream = req.GetRequestStream();
dataStream.Write(byteArray, 0, byteArray.Length);
dataStream.Close();

//obtaining the response
WebResponse res = req.GetResponse();
r = new StreamReader(res.GetResponseStream());

Исключение, сообщенное в последнем операторе: Запрос был прерван: Не удалось создать безопасный канал SSL/TLS.

3. Последняя попытка: с помощью браузера

В Chrome после установки сертификатов, если я пытаюсь получить доступ к обоим URL-адресам, я получаю сообщение об ошибке 107:

Error 107 (net::ERR_SSL_PROTOCOL_ERROR)

Я застрял.

9
задан Alberto De Caro 24 June 2012 в 21:56
поделиться