如何使用C#中的自签名证书将Xamarin android应用程序连接到Azure?

如何使用C#中的自签名证书将Xamarin android应用程序连接到Azure?,c#,xamarin,azure-web-app-service,x509certificate,C#,Xamarin,Azure Web App Service,X509certificate,亲爱的Stackoverflow用户: 我已将azure key vault自签名证书链接到我的azure web应用程序,启用了minimal TLS v1.0,并将客户端证书模式设置为Required以强制SSL/TLS 如果我在我的windows计算机上安装密钥保管库pfx证书并导航到我的url(即:),我的浏览器会提示我使用我的证书,否则我会出现403 Frobdden错误,这很好 当我在Xamarin android应用程序中加载此pfx时,总是出现403 Frobidden错误 这是

亲爱的Stackoverflow用户:

我已将azure key vault自签名证书链接到我的azure web应用程序,启用了minimal TLS v1.0,并将客户端证书模式设置为
Required
以强制SSL/TLS

如果我在我的windows计算机上安装密钥保管库pfx证书并导航到我的url(即:),我的浏览器会提示我使用我的证书,否则我会出现403 Frobdden错误,这很好

当我在Xamarin android应用程序中加载此pfx时,总是出现
403 Frobidden错误

这是我的密码:

使用(HttpClientHandler handler=new-HttpClientHandler(){
SslProtocols=System.Security.Authentication.SslProtocols.Tls12,
AutomaticDecompression=DecompressionMethods.Deflate | DecompressionMethods.GZip,
ClientCertificateOptions=ClientCertificateOptions.Manual
})
{
//添加SSL证书
X509Certificate2 _privateCert=GetPrivateAPICertificate();//获取本地存储在android文件系统中的自签名pfx
如果(_privateCert!=null)
{
handler.ClientCertificates.Add(_privateCert);
handler.checkCertificatereJournalist=false;
handler.ServerCertificateCustomValidationCallback=
(httpRequestMessage、cert、cetChain、policyErrors)=>
{

返回true;//我终于找到了实现这一点的方法。 下面这篇文章有一点:

通过使用
HttpWebRequest
而不是
HttpClient
我可以用证书发送我的请求


这是一种回归,因为
HttpWebRequest
不如新的
HttpClient
实现直观,但这是迄今为止我找到的唯一解决方案…

我终于找到了实现这一点的方法。 下面这篇文章有一点:

通过使用
HttpWebRequest
而不是
HttpClient
我可以用证书发送我的请求


这是一种回归,因为
HttpWebRequest
不如新的
HttpClient
实现直观,但这是迄今为止我找到的唯一解决方案…

精确性:证书是用Azure Key Vault创建的。由于安全问题,业界5年前决定取消TLS 1.0/1.1。今年6月oft推出了一个安全更新,该更新禁用了服务器上的TLS 1.0/1.1,并要求使用TLS 1.2/1.3。您需要升级到TLS 1.2/1.3。@jdweng感谢您的反馈。我已将Azure设置为1.0的最低TLS版本。我已使用TLS 1.2进行了测试,得到了相同的结果:403(我已更新代码以使用
SslProtocols.Tls12
)。可能需要在标头中设置用户代理。某些服务器不会接受所有浏览器。请参阅:我已在请求中添加了用户代理,但没有解决问题:
httpClient.DefaultRequestHeaders.Add(“用户代理”,“Mozilla/5.0”(Windows NT 10.0;WOW64;rv:44.0)Gecko/20100101 Firefox/44.0“
.Precision:证书是用Azure密钥保险库创建的。5年前,由于安全问题,业界决定取消TLS 1.0/1.1。今年6月,Microsoft推出了一项安全更新,在服务器上禁用了TLS 1.0/1.1,并要求使用TLS 1.2/1.3。您需要升级到TLS 1.2/1.3。@jdweng感谢您的反馈。我很高兴我已将Azure设置为1.0的最低TLS版本。我已使用TLS 1.2进行了测试,得到了相同的结果:403禁止(我已将代码更新为使用
SslProtocols.Tls12
)。可能需要在标头中设置用户代理。某些服务器不会接受所有浏览器。请参阅:我已在请求中添加了用户代理,但没有解决问题:
httpClient.DefaultRequestHeaders.Add(“用户代理”,“Mozilla/5.0(Windows NT 10.0;WOW64;rv:44.0)Gecko/20100101 Firefox/44.0”);
。很高兴知道你自己解决了这个问题,请接受它作为答案,这将对其他有类似问题的社区有益。很高兴知道你自己解决了这个问题,请接受它作为答案,这将对其他有类似问题的社区有益。