Вопрос по c#, certificate, httpwebrequest, ssl, put – Ошибка: C # Основное соединение было закрыто: не удалось установить доверительные отношения для безопасного канала SSL / TLS

22

Я пытаюсь сделать запрос через SSL. Сертификат уже установлен на машине и работает через браузер.

Я использую этот запрос:

System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding();
byte[] data = encoding.GetBytes(request.Content.OuterXml.ToString());
string password = "XXXX";
X509Certificate2 cert = new X509Certificate2("c:\\zzzz.p12", password);
string key = cert.GetPublicKeyString();
string certData = Encoding.ASCII.GetString(cert.Export(X509ContentType.Cert));

Uri uri = new Uri(request.Url);
HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(uri);
myRequest.Credentials = new NetworkCredential(request.User, request.Password.ToString());
myRequest.Method = "PUT";
myRequest.ContentType = request.ContentType;
myRequest.ContentLength = data.Length;
myRequest.ClientCertificates.Add(cert);

Stream newStream = myRequest.GetRequestStream();
newStream.Write(data, 0, data.Length);
newStream.Close();

System.IO.StreamReader st = new StreamReader(((HttpWebResponse)myRequest.GetResponse()).GetResponseStream());

Используя этот код, я получаю эту ошибку:

The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel. ---> System.Security.Authentication.AuthenticationException: The remote certificate is invalid according to the validation procedure.

В чем проблема?

Спасибо Джонн Блейд Roger G
В случае веб-служб Exchange (EWS) рекомендуемое решение Microsoft здесь:msdn.microsoft.com/en-us/library/bb408523.aspx RenniePet
Возможный дубликатC# Ignore certificate errors? Kristopher Johnson
взгляните на этот пост, возможно, это поможет вамstackoverflow.com/questions/703272/… JohnnBlade

Ваш Ответ

3   ответа
58

ServicePointManager.ServerCertificateValidationCallback = new        
RemoteCertificateValidationCallback
(
   delegate { return true; }
);
Эта проблема возникла у меня при отправке запросов из моего приложения через Fiddler. И добавление трюка делегата, чтобы не проверять сертификат, помогло мне успешно выполнить мой вызов, а также увидеть ответ в Fiddler.
Я понизил голосование, потому что, как говорит @Amzath, это обходит безопасность. Лучше решить проблему в корне (каламбур).
Это решение может представлять потенциальную угрозу безопасности, поскольку вы отключаете проверку сертификата SSL. Если это рабочий код, понимайте риск сервера, к которому вы подключаетесь.
это сработало для меня, большое спасибо
Как это можно сделать в Windows Phone 8? ServicePointManager не указанcmsresources.windowsphone.com/devcenter/en-us/downloads/…
0

что ваш сертификат является надежным. Был ли корневой сертификат добавлен в правильное хранилище сертификатов (Trusted Root CA на локальном компьютере)?

Я столкнулся с этой ошибкой, когда (самодельный) корневой сертификат для (самозаверяющего) сертификата был добавлен в доверенный корневой центр сертификации для текущего пользователя). Перемещение корневого сертификата в хранилище Root CA на локальной машине решило мою проблему.

-2

Я думаю, что проблема с сертификатом сервера, который не может проверить стек TLS на стороне клиента. Когда вы подключаетесь к этому URL через браузер, он работает нормально или вы видите предупреждение о несоответствии сертификата?

Да, это код клиента. Да, я получаю доступ через https. Когда я подключаюсь в браузере, он работает гладко и не видит никаких предупреждений .. Roger G
Если вы чувствуете себя комфортно с сетевыми анализаторами (например, Wireshark от NetMon), вы можете просто прослушать ваш трафик и посмотреть, с каким хостом вы действительно общаетесь, какой сертификат он предоставляет, и если подтверждение TLS завершается с ошибками или без них. В противном случае, ссылка, которую вы получили для справки, является хорошим началом. Если это не поможет вам, вы можете начать рассылать здесь все больше и больше деталей о вашей настройке (URL, к которому вы обращаетесь, сертификат, установленный на сервере, конфигурация сети - прокси и т. Д.)

Похожие вопросы