Это первый раз, когда мне приходится использовать аутентификацию по сертификату. Коммерческий партнер предоставляет две службы: веб-службу XML и службу HTTP. Мне нужно получить доступ к ним обоим с помощью клиентов .NET.
Что я пробовал
0. Настройка среды
Я установил SSLCACertificates (корневой и два промежуточных) и клиентский сертификат на моем локальном компьютере (win 7 professional) с помощью certmgr.exe.
1. Для веб-сервиса
Вот код:
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
Вот код:
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)
Я застрял.