- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在编写一个应用程序,它需要从只能通过 https 访问的 REST API 进行读取。我遇到了请求在 Mono.Security 中失败的问题,并显示消息:“身份验证或解密失败。”
我进行了研究,发现默认情况下 Mono 没有任何受信任的证书。我找到的所有资源都说我可以使用
ServicePointManager.ServerCertificateValidationCallback += new RemoteCertificateValidationCallback((sender, certificate, chain, policyErrors) => { return true; });
分别在 iOS 和 Droid 项目的 Main() 和 OnCreate() 方法中覆盖该检查并允许任何 ssl 证书。即使采用该解决方法,我仍然遇到相同的错误。我已经逐步检查了代码并确认在 iOS 和 Android 上运行时执行了上述行。
我的代码在访问非 https API 时完美运行。这是一个 PCL,不是共享的项目。
我在提问之前引用了这些问题/资源:
这是目前的代码:
public class PawPrintsDataConnection
{
private string response = "";
private Task<string> StartWebRequest(string url)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.ContentType = "application/json";
request.Method = "GET";
Task<WebResponse> task = Task.Factory.FromAsync (request.BeginGetResponse, asyncResult => request.EndGetResponse (asyncResult), (object)null);
return task.ContinueWith (t => ReadStreamFromResponse (t.Result));
}
private string ReadStreamFromResponse(WebResponse response)
{
using (Stream responseStream = response.GetResponseStream ())
using (StreamReader sr = new StreamReader (responseStream)) {
string strContent = sr.ReadToEnd ();
return strContent;
}
}
public string getRawResponse(){
var task = StartWebRequest(string.Format (@"https://pawprints.rit.edu/v1/petitions?key={0}&limit={1}", "apikey", 50));
this.response = task.Result;
return response;
}
}
public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsApplicationActivity
{
protected override void OnCreate (Bundle bundle)
{
ServicePointManager.ServerCertificateValidationCallback += new RemoteCertificateValidationCallback((sender, certificate, chain, policyErrors) => { return true; });
base.OnCreate (bundle);
global::Xamarin.Forms.Forms.Init (this, bundle);
LoadApplication (new App ());
}
}
static void Main (string[] args)
{
ServicePointManager.ServerCertificateValidationCallback += new RemoteCertificateValidationCallback((sender, certificate, chain, policyErrors) => { return true; });
// if you want to use a different Application Delegate class from "AppDelegate"
// you can specify it here.
UIApplication.Main (args, null, "AppDelegate");
//ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;
}
在我的研究中,我在 Xamarin bugzilla 上发现了一个可能相关的错误,但我不确定它是否适用于我正在使用的版本。我是 Xamarin 开发人员的新手,所以我不熟悉诸如包含哪个版本的 Mono.security 之类的事情。 https://bugzilla.xamarin.com/show_bug.cgi?id=26658
如果有帮助,这里是异常的相关部分:
System.AggregateException: One or more errors occurred ---> System.Exception: One or more errors occurred ---> System.Exception: Error: SendFailure (Error writing headers) ---> System.Exception: Error writing headers ---> System.Exception: The authentication or decryption has failed. ---> System.Exception: The authentication or decryption has failed.
at Mono.Security.Protocol.Tls.RecordProtocol.ProcessAlert (AlertLevel alertLevel, AlertDescription alertDesc) [0x00013] in ///Library/Frameworks/Xamarin.iOS.framework/Versions/8.6.1.26/src/mono/mcs/class/Mono.Security/Mono.Security.Protocol.Tls/RecordProtocol.cs:654
at Mono.Security.Protocol.Tls.RecordProtocol.InternalReceiveRecordCallback (IAsyncResult asyncResult) [0x000dc] in ///Library/Frameworks/Xamarin.iOS.framework/Versions/8.6.1.26/src/mono/mcs/class/Mono.Security/Mono.Security.Protocol.Tls/RecordProtocol.cs:377
最佳答案
您正在访问 pawprints.rit.edu
对吗?
然后站点的证书(及其根 CA)就可以了,即 iOS 会接受它(并且 Xamarin.iOS 将信任决定委托(delegate)给 iOS)。 IOW 设置委托(delegate)对您没有帮助(它仅用于证书,没关系)。
这里的问题是服务器是configured只允许一小部分 TLS 1.0 密码套件。它们都不与 HttpWebRequest
使用的 Mono 当前 SSL/TLS 实现兼容。
您最好的选择是使用 HttpClient
和 CFNetworkHandler
(适用于 iOS)或第 3 方句柄(例如,ModernHttpClient 适用于 iOS 和 Android)。这将使用 native (来自操作系统)的 SSL/TLS 实现,它支持那些密码套件(以及更好的性能)。
关于mono - 尽管 servicePointManager hack,WebRequest 无法在 Xamarin.Forms 上使用 ssl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28847309/
我正在尝试遵循与 How does System.Net.Mail.SMTPClient do its local IP binding 中给出的代码类似的代码。我在具有多个 IP 地址的机器上使用
我们有一个网站,每秒调用 Azure 存储数千次。所有存储端点都是 HTTPS。有谁知道设置 ServicePointManager.SetTcpKeepAlive = true 是否有助于提高性能?
我们有一个网站,每秒调用 Azure 存储数千次。所有存储端点都是 HTTPS。有谁知道设置 ServicePointManager.SetTcpKeepAlive = true 是否有助于提高性能?
目前刚刚了解 Windows Azure。 我正在查看一些示例,并且在我看到的辅助角色的 OnStart 事件 ServicePointManager.DefaultConnectionLimit =
我有一个 Xamarin.Forms 应用程序,它利用 ServicePointManager.ServerCertificateValidationCallback 类和方法实现证书固定。在 And
我需要使用多个任务来达到网络服务端点。每个任务都将流式传输数据,并打开一个 httpWebRequest 连接。 我需要将属性 ServicePointManager.DefaultConnectio
我在 azure 中作为 webjob 运行的控制台应用程序中调用了这行代码 50000 次: await cloudBlockBlob.UploadFromFileAsync(sourceFile)
有人可以解释一下 ServicePointManager.FindServicePoint 的用途吗?我一直在编写一些代码来使用 C# 中的代理,并且已经看到它在这方面可能有用的指标,但看不出为什么或
我想知道当我在她的标志上设置三个不同的 SecurityProtocolType 时属性 ServicePointManager.SecurityProtocol 是如何工作的。即: ServiceP
更改 ServicePointManager.DefaultConnectionLimit 是只影响当前进程还是影响整个 .NET 平台。请提供来源。 最佳答案 ServicePointManager
最近,我在发送电子邮件时遇到错误: The remote certificate is invalid according to the validation procedure using 我找到了
我在我的网站中使用网络服务。供应商提供了一个示例代码,在代码中有这样一行: // For Ignore SSL Error ServicePointManager.ServerCertificateV
我有以下代码。 public void Submit(string XML) { ServicePointManager.ServerCertificateValidationCallback = V
下面的代码是如何求值的? ServicePointManager.ServerCertificateValidationCallback += ValidateRemoteCertificateA;
ServicePointManager.DefaultConnectionLimit 设置辅助角色的最大并发 session 数,但如何找到最佳值? 最佳答案 根据Microsoft Support
如果我的机器上运行着2个Asp.Net网站,并且打开了2个PowerShell窗口,那么有多少个静态类System.Net.ServicePointManager实例? 每台机器一台?每个应用程序域一
默认情况下,HttpClient 每个主机仅使用 2 个并发连接。根据 docs我可以改变这一点。我不想在全局范围内更改它,我只想为我正在使用的服务更改它。因此我写了以下代码: // Increase
我正在使用一个应用程序,该应用程序每分钟向不同的 URI 发送数百个 HTTP 请求。有什么方法可以监控应用程序创建的连接吗?我发现 ServicePointManager 非常适合检查特定域,但它需
在 .NET 4.5 中,如果我将 ServicePointManager.SecurityProtocol 设置为多个协议(protocol)并且服务器接受所有这些协议(protocol),将使用哪
我正在尝试将 VB.net 项目转换为用于 Android 应用程序的 Java。我在某个时候卡住了。我的 VB.net 代码是 Public Function SendWebRequest(ByVa
我是一名优秀的程序员,十分优秀!