Я работаю над проектом Unity, который полагается на выборку данных из веб-API, который я настроил на общедоступном веб-сервере. В настоящее время сервер настроен на использование самозаверяющего ssl и требует, чтобы клиент отправил сертификат, чтобы иметь возможность прочитать данные, если клиенту не удается отправить сертификат, который веб-сайт возвращает с «403 запрещено» .
Я проверил это в браузере и почтальоне, и все работает отлично. Я также тестировал точно такую же функцию в чисто визуальном студийном проекте, и она работала как чудо.
Однако, когда я пробую эту функцию в Unity, меня встречает WebException "Запрос приуроченout ".
То, как я сейчас это делаю, - через 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());
}
}
}
Переопределение WebRequest:
protected override WebRequest GetWebRequest(Uri address)
{
HttpWebRequest request = (HttpWebRequest)base.GetWebRequest(address);
X509Certificate2 certificate = new X509Certificate2(@"C:\temp\ClientCert.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, что может быть проблемой, так как сертификация является самоподписанной ине из проверенного ЦС ... Но я не смог найти обходной путь ... поэтому любая помощь будет отличной