Android 和 IOS 的 Xamarin PCL 自签名证书
Xamarin PCL self signed certificat for Android and IOS
我正在尝试将完整的 Rest 服务从 http 传递到 https。
我创建了一个自签名证书,我将其用于 IIS Express。我在 google Chrome 上验证了它,它与邮递员一起工作得很好。我的休息服务在 http 和 https 中工作。
我使用 PCL 项目(IOS 和 Android)http 请求一切正常,但 https 请求有异常。异常消息为空。
我尝试直接从 Visual Studio 2015 创建测试证书,但该按钮在属性 -> 签名中被禁用。
我还尝试将我的自签名证书安装为受信任的根,但我的模拟器和其余服务之间的通信没有成功。
我的代码
public partial class MainPage : ContentPage
{
private string url = string.Empty;
private HttpClient _client;
public MainPage()
{
InitializeComponent();
switch (Device.RuntimePlatform)
{
case Device.iOS:
_client = new HttpClient(new NSUrlSessionHandler());
break;
case Device.Android:
_client = new HttpClient();
break;
}
_client = new HttpClient();
test();
}
private async void test()
{
//url = "http://192.168.1.106:9630/PrototypeB.svc/Test";
url = "https://192.168.1.106:44301/PrototypeB.svc/Test";
try
{
var _content = await _client.GetStringAsync(url);
List<Test> _posts = JsonConvert.DeserializeObject<List<Test>>(_content);
}
catch (HttpRequestException e)
{
string test = e.Message;
}
catch (Exception e)
{
string test = e.Message;
}
}
}
如何使用 https 和自签名证书与我的 Android 和 IOS 模拟器通信?
您可以使用ServicePointManager忽略证书验证检查。
像这样在 iOS 和 Android 平台中执行代码:
System.Net.ServicePointManager.ServerCertificateValidationCallback += (se, cert, chain, sslerror) => {
return true;
};
参考文献:
此外,ModernHttpClient Pro提供此功能,但不是免费的。
我正在尝试将完整的 Rest 服务从 http 传递到 https。
我创建了一个自签名证书,我将其用于 IIS Express。我在 google Chrome 上验证了它,它与邮递员一起工作得很好。我的休息服务在 http 和 https 中工作。
我使用 PCL 项目(IOS 和 Android)http 请求一切正常,但 https 请求有异常。异常消息为空。
我尝试直接从 Visual Studio 2015 创建测试证书,但该按钮在属性 -> 签名中被禁用。
我还尝试将我的自签名证书安装为受信任的根,但我的模拟器和其余服务之间的通信没有成功。
我的代码
public partial class MainPage : ContentPage
{
private string url = string.Empty;
private HttpClient _client;
public MainPage()
{
InitializeComponent();
switch (Device.RuntimePlatform)
{
case Device.iOS:
_client = new HttpClient(new NSUrlSessionHandler());
break;
case Device.Android:
_client = new HttpClient();
break;
}
_client = new HttpClient();
test();
}
private async void test()
{
//url = "http://192.168.1.106:9630/PrototypeB.svc/Test";
url = "https://192.168.1.106:44301/PrototypeB.svc/Test";
try
{
var _content = await _client.GetStringAsync(url);
List<Test> _posts = JsonConvert.DeserializeObject<List<Test>>(_content);
}
catch (HttpRequestException e)
{
string test = e.Message;
}
catch (Exception e)
{
string test = e.Message;
}
}
}
如何使用 https 和自签名证书与我的 Android 和 IOS 模拟器通信?
您可以使用ServicePointManager忽略证书验证检查。
像这样在 iOS 和 Android 平台中执行代码:
System.Net.ServicePointManager.ServerCertificateValidationCallback += (se, cert, chain, sslerror) => {
return true;
};
参考文献:
此外,ModernHttpClient Pro提供此功能,但不是免费的。