Unity WebClient SSL Timeout



我正在开发一个 Unity 项目,该项目依赖于从我在公共 Web 服务器上设置的 Web API 获取数据。服务器当前设置为自签名 ssl,并要求客户端发送证书才能读取数据,如果客户端发送证书失败,网站返回"403 禁止"。

我已经在浏览器和邮递员中对此进行了测试,一切正常。 我还在一个纯粹的视觉工作室项目中测试了完全相同的功能,它就像一个魅力。

但是,当我在 Unity 中尝试此功能时,我遇到了 Web异常"请求超时 ">.

我目前的做法是通过WebClient,使用WebRequest的覆盖方法:

private void Connect()
{
ServicePointManager.CheckCertificateRevocationList = false;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;
ServicePointManager.ServerCertificateValidationCallback += ignoreCertCallback;
ServicePointManager.Expect100Continue = true;
using (var wc = new CertificateWebClient())
{
try
{
var responseBytes = wc.DownloadString(url);
Debug.Log(responseBytes);
Debug.Log(wc.ResponseHeaders);
}
catch (WebException e)
{
Debug.Log(e.ToString());
}
}
}

覆盖网络请求:

protected override WebRequest GetWebRequest(Uri address)
{   
HttpWebRequest request = (HttpWebRequest)base.GetWebRequest(address);
X509Certificate2 certificate = new X509Certificate2(@"C:tempClientCert.pfx", "password");
request.ServerCertificateValidationCallback = delegate (System.Object obj, X509Certificate X509certificate, X509Chain chain, System.Net.Security.SslPolicyErrors errors)
{
return true;
};
Debug.Log(request.RequestUri);
(request as HttpWebRequest).ClientCertificates.Add(certificate);
request.Timeout = 2000;
return request;
}

需要注意的重要一点是,我已经在 Unity 中使用"client.badssl.com"及其证书尝试了完全相同的功能,并且这也像魅力一样工作,在没有发送证书时返回正确的错误代码以及所有内容,如果我在我的网站上关闭客户端认证,一切都像魅力一样工作......

据我了解,可能是 Mono 可能是问题所在,因为认证是自签名的,而不是来自经过验证的 CA......但是我一直找不到解决方法...所以任何帮助都会很棒

您的 BG 设置是什么?我的意思是:它在 AWS 上吗?Express/NodeJS?WebGL?我面临着同样的问题,但是在本地测试时,它就像一个魅力

我建议:要检查这是否是基础设施问题,您可能需要为您的域创建一个证书(例如"goodboy.mytest.io"(,该证书已从一些免费的SSL提供商处获得认证(我可以说LetsEncrypt仅用于测试(并启动使用该证书的本地服务器,然后进入您的"主机"文件(取决于您当前正在运行的操作系统(并将您的本地主机模拟为"goodboy.mytest.io", 因此,您可以检查连接到该域是否一切正常,而无需额外的层(通常放置在Web上的连接"弹跳"之间(

我也在跟进这个

相关内容

  • 没有找到相关文章

最新更新