Mono https web 请求失败并显示“身份验证或解密失败”

2023-11-21

我正在制作一个简单的 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);
    }
}

我在 Unity 上也遇到了同样的问题(它也使用单声道)并且这个帖子帮我解决了。

只需在提出请求之前添加以下行:

ServicePointManager.ServerCertificateValidationCallback = MyRemoteCertificateValidationCallback;

这个方法:

public bool MyRemoteCertificateValidationCallback(System.Object sender,
    X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
    bool isOk = true;
    // If there are errors in the certificate chain,
    // look at each error to determine the cause.
    if (sslPolicyErrors != SslPolicyErrors.None) {
        for (int i=0; i<chain.ChainStatus.Length; i++) {
            if (chain.ChainStatus[i].Status == X509ChainStatusFlags.RevocationStatusUnknown) {
                continue;
            }
            chain.ChainPolicy.RevocationFlag = X509RevocationFlag.EntireChain;
            chain.ChainPolicy.RevocationMode = X509RevocationMode.Online;
            chain.ChainPolicy.UrlRetrievalTimeout = new TimeSpan (0, 1, 0);
            chain.ChainPolicy.VerificationFlags = X509VerificationFlags.AllFlags;
            bool chainIsValid = chain.Build ((X509Certificate2)certificate);
            if (!chainIsValid) {
                isOk = false;
                break;
            }
        }
    }
    return isOk;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Mono https web 请求失败并显示“身份验证或解密失败” 的相关文章

随机推荐

  • 计算两行之间的时间差

    我有一个包含 StartDate 列的表 我想计算两个连续记录之间的时间差 Thanks Mark Byers 和 Yahia 我有请求表作为 requestId startdate requestId startdate 1 2011 1
  • 使用完整网址时 PHP file_get_contents 非常慢

    我正在使用一个脚本 最初不是我创建的 该脚本从 HTML 页面生成 pdf 文件 问题是现在需要很长的时间来处理 比如 1 2 分钟 据说这最初工作得很好 但在过去几周内速度减慢了 该脚本调用file get contents在 php 脚
  • 用户与 uiview 和动画完成块的交互

    我有以下代码 UIView animateWithDuration 2 0 delay 0 0 options UIViewAnimationOptionAllowUserInteraction animations imageView b
  • 500内部服务器错误,如何调试[重复]

    这个问题在这里已经有答案了 我的 POST 请求出现内部服务器错误 我该如何调试它们 是在 php ini 中设置的吗 该文件非常大 并且多次出现 错误 一词 您可以使用以下命令打开 PHP 错误error reporting error
  • 如何在 angularJS 中将 X-Frame-Options 设置为响应标头?

    我在 API 的响应中收到了 X Frame Options 标头 但据我了解 为了防止点击劫持攻击 我需要将其添加到 UI 代码中 UI代码 用angularjs编写 部署在Tomcat 版本7 0 72 服务器中 我尝试在应用程序的 w
  • 一个动态规划问题

    谁能帮我找到一个最佳的动态规划算法这个问题 在去吃晚饭的路上 CCC 的参赛者正在排队享用美味的炸薯条 N 1 N 100 名选手排成一队进入食堂 CCC 的负责人 V 博士在最后一刻意识到 程序员只是讨厌站在使用不同语言的程序员旁边 值得
  • GraphQL 枚举类型会自动解析它们的值吗?

    我应该期望枚举类型自动解析还是这些类型仅存在以限制选项 给定以下 GraphQL 架构 type Job description String status Status enum Status PENDING REVIEW PENDING
  • 如何在 Game Center 中接受邀请

    我正在尝试通过游戏中心实施邀请 但有一点我不明白 好的 我已从一台设备向另一台设备发送了邀请 然后我在接收器上有一个 UIAlertView 询问我是否愿意接受或拒绝邀请 当我接受它时 它的处理方式如下 GKMatchmaker share
  • Bootstrap xs 列换行

    对于最小的 xs 尺寸 即使我的列加起来为 12 如果屏幕宽度减小到超过一定限制 它们也不会按预期工作 例如 div class container div class row div class col xs 2 div div clas
  • 如何使用 igraph 获取最短路径上的顶点?

    我在用着igraph生成顶点对之间最短路径距离的矩阵 但我不知道如何返回顶点 到目前为止我有 path length matrix ig graph shortest paths dijkstra None None distance AL
  • 如何在 Swift 中获取 2 个数组的公共元素列表?

    我有两个数组 fruitsArray apple mango blueberry orange vegArray tomato potato mango blueberry 我怎样才能获得这两个数组中的常见项目列表 ouptput mang
  • 将数组传递给 asp net core web api 操作方法 HttpGet

    我正在尝试将整数数组发送到我的操作方法 代码如下所示 HttpGet public async Task
  • ASP.NET Webforms 不会为 Chrome/iOS 呈现回发 JavaScript 函数

    当我们提供用户代理时Mozilla 5 0 iPhone CPU iPhone OS 5 0 1 like Mac OS X en us AppleWebKit 534 46 0 KHTML like Gecko CriOS 21 0 11
  • 从 CVImageBufferRef 获取内存所有权

    我正在制作一个简单的管道 从 AVCaptureSession 获取图像 在 OpenCV 中处理它们 然后在 OpenGL 中渲染它们 它基于 RosyWriter 但没有音频和录音功能 OpenCV 处理看起来像 void proces
  • Internet Explorer 中带有边框半径的不稳定 CSS 动画

    在 Internet Explorer 中 此动画似乎在摆动 我正在阅读答案这个问题他们听起来好像可以解决这个问题 我不能真正使用图像 因为边界半径不是恒定的 而且我不想使用动画 gif 我知道 摆动 不是一个很好的描述 但我想不出任何其他
  • pyplot:我可以设置全局标记大小参数吗?

    是否有一个命令可以用来全局设置整个程序中所有散点图点的大小 You can 定义您自己的样式表 or手动覆盖默认值 import matplotlib as mpl mpl rcParams lines markersize 10 And
  • 恢复下载在 Android 中不起作用

    这段用于恢复下载的代码在 Android 中无法正常工作 尽管它在 Java 应用程序中工作正常 在这里 我尝试下载一个 zip 文件 它将恢复下载 但最终结果是一个无效的 zip 文件 BufferedInputStream in nul
  • JsTree 打开一个节点然后选择一个子节点(使用json_result)

    我在 MVC2 项目中使用的 JsTree 遇到问题 我想创建一个函数来取消选择 关闭树上的所有节点 然后打开一个特定的节点 并选择一个特定的子节点 我有两个节点的 Id 值 问题是 select node 总是在 open node 完成
  • 棒棒糖之前的设备上带有 CardView 的空白

    我正在尝试向应用程序上的某些视图添加舍入和阴影 并利用卡片视图库来实现这一目标 它在棒棒糖设备上看起来不错 但与棒棒糖之前的任何设备都遇到了兼容性问题 我将在序言中说 我已经查看了以下问题的答案 发现它们都不适合我 Appcompat Ca
  • Mono https web 请求失败并显示“身份验证或解密失败”

    我正在制作一个简单的 REST 客户端以在我的 C 应用程序中使用 在 Windows 上的 net 中 它适用于 http 和 https 连接 在 Ubuntu 10 10 上的 Mono 2 6 7 中 也用 2 8 进行了测试 结果