Я делаю простой клиент REST для использования в моих приложениях C#. В .net на Windows Он отлично работает с http: // и https: // соединениями. В моно 2.6.7 (также проверено с 2.8 с теми же результатами) на Ubuntu 10.10 работает только http: //. https: // соединения подбросить это исключение на методе request.GetResponse():Моно https webrequest завершилось с ошибкой «Ошибка аутентификации или дешифрования»
Unhandled Exception: System.Net.WebException: Error getting response stream (Write: The authentication or decryption has failed.): SendFailure ---> System.IO.IOException: The authentication or decryption has failed. ---> Mono.Security.Protocol.Tls.TlsException: Invalid certificate received from server. Error code: 0xffffffff800b010a
at Mono.Security.Protocol.Tls.Handshake.Client.TlsServerCertificate.validateCertificates (Mono.Security.X509.X509CertificateCollection certificates) [0x00000] in <filename unknown>:0
at Mono.Security.Protocol.Tls.Handshake.Client.TlsServerCertificate.ProcessAsTls1() [0x00000] in <filename unknown>:0
at Mono.Security.Protocol.Tls.Handshake.HandshakeMessage.Process() [0x00000] in <filename unknown>:0
at (wrapper remoting-invoke-with-check) Mono.Security.Protocol.Tls.Handshake.HandshakeMessage:Process()
at Mono.Security.Protocol.Tls.ClientRecordProtocol.ProcessHandshakeMessage (Mono.Security.Protocol.Tls.TlsStream handMsg) [0x00000] in <filename unknown>:0
at Mono.Security.Protocol.Tls.RecordProtocol.InternalReceiveRecordCallback (IAsyncResult asyncResult) [0x00000] in <filename unknown>:0
--- End of inner exception stack trace ---
at Mono.Security.Protocol.Tls.SslStreamBase.AsyncHandshakeCallback (IAsyncResult asyncResult) [0x00000] in <filename unknown>:0
--- End of inner exception stack trace ---
at System.Net.HttpWebRequest.EndGetResponse (IAsyncResult asyncResult) [0x00000] in <filename unknown>:0
at System.Net.HttpWebRequest.GetResponse() [0x00000] in <filename unknown>:0
Я не смог найти какой-либо способ, чтобы исправить это. Кто-нибудь знает, почему это происходит и как это исправить?
Опять же, это только не удается в Mono .Net, похоже, не имеет проблем с установлением соединения.
вот код вызова:
public JToken DoRequest(string path, params string[] parameters) {
if(!path.StartsWith("/")) {
path = "/" + path;
}
string fullUrl = url + path + ToQueryString(parameters);
if(DebugUrls) Console.WriteLine("Requesting: {0}", fullUrl);
WebRequest request = HttpWebRequest.CreateDefault(new Uri(fullUrl));
using(WebResponse response = request.GetResponse())
using(Stream responseStream = response.GetResponseStream()) {
return ReadResponse(responseStream);
}
}
Вы пытались запустить Windows/Mono, Windows/.NET? – abatishchev
Как объяснялось в моем вопросе, я попробовал его в Windows/.NET, однако я никогда не пробовал его в Mono в Windows. Было бы интересно посмотреть, работает ли это. Тем не менее, сообщение jpobst, похоже, является решением моей проблемы. – Joel
Перетаскивание мертвых здесь - я что-то упускаю? где почта jpobst? –