【发布时间】:2011-06-23 00:54:15
【问题描述】:
我正在制作一个简单的 REST 客户端以在我的 C# 应用程序中使用。在 Windows 上的 .net 中,它适用于 http:// 和 https:// 连接。在 Ubuntu 10.10 上的 mono 2.6.7(也用 2.8 测试,结果相同)只有 http:// 有效。 https:// 连接在 request.GetResponse() 方法上抛出此异常:
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 上运行吗?
-
正如我的问题中所解释的,我在 Windows/.NET 中尝试过,但是我从未在 Windows 上的 Mono 中尝试过。看看它是否有效会很有趣。但是,jpobst 的帖子似乎可以解决我的问题。
-
在这里拖死人——我错过了什么吗? jpobst 的帖子在哪里?
-
@daveL:由于人们可以更改他们的显示名称,它可能仍然存在(但由于我也只是这个问题的访问者,所以我无法告诉你它是哪一个)。跨度>
标签: c# https mono webrequest