Mono: ошибки SSL HttpWebRequest на URI, отличном от SSL - PullRequest
4 голосов
/ 03 августа 2010

У меня есть консольное приложение, которое я написал для .NET / Windows, которое мне вдруг понадобилось в моей системе Unix.Mono, по большей части, был чрезвычайно успешным в предоставлении этого для меня.

Однако есть небольшая проблема: приложение выдает много HttpWebRequests во время работы, и для небольшой части из них Mono возвращаетсяошибка:

Ошибка при получении потока ответов (запись: сбой аутентификации или дешифрования.): SendFailure

Это сообщение об ошибке указывает на ошибку SSL.Однако это приложение не выдает никаких запросов к защищенным SSL URI (т. Е. Все URI http://).

Основной код, о котором идет речь, выглядит следующим образом:

HttpWebRequest req = WebRequest.Create(url) as HttpWebRequest;
req.UserAgent = UserAgent;
req.AuthenticationLevel = AuthenticationLevel.None;
req.AllowAutoRedirect = true;
req.KeepAlive = true;
req.CachePolicy = new RequestCachePolicy(RequestCacheLevel.NoCacheNoStore);
req.Timeout = timeout;

if (useCompression) {
    req.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip,deflate");
}

Редактировать: Для выполнения этого кода вы можете определить фиктивные переменные следующим образом:

string url = "http://example.com";
string UserAgent = "WhateverBot";
int timeout = 5000;
bool useCompression = true;

Следует отметить, что код работает без проблем в Windows / .NET.

1 Ответ

1 голос
/ 17 марта 2011

У меня также была эта проблема при запуске Mono в Windows, даже если URL-адрес не HTTPS. Позвольте мне сказать это громко: НЕ НАПРАВЛЕНО.

Решение было использовать взломать:

System.Net.ServicePointManager.ServerCertificateValidationCallback += delegate 
{ 
    return true; 
};  

Я предполагаю, что Mono не ищет в хранилище ключей Windows сертификаты, поэтому не находит их, поэтому HTTPWebXXXX не инициализируется правильно, а затем происходит сбой неправильно.

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

...