Тайм-аут Unity WebClient SSL - PullRequest
       18

Тайм-аут Unity WebClient SSL

1 голос
/ 01 октября 2019

Я работаю над проектом 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, что может быть проблемой, так как сертификация является самоподписанной ине из проверенного ЦС ... Но я не смог найти обходной путь ... поэтому любая помощь будет отличной

...