Webservice 通过ssl 加密,访问变成https,unity 获取网络数据报错

由于IOS 中要求App内访问的网络必须使用HTTPS协议,我便将网站改成了HTTPS
修改成HTTPS后,什么都没操作,直接在unity中使用https访问数据,然后直接报错:“身份验证或者解密失败” 的错误

下面将详细讲解问题以及解决方案

问题:关于 Unity Https 加密通道 无法连接的问题

错误信息:

TlsException: Invalid certificate received from server. Error code: 0xffffffff800b010a
unity访问https,出现的错误

一. 由于接口网站使用了SSL证书

SSL证书就是遵守SSL协议,由受信任的CA机构颁发的数字证书

二. HTTPS是通过SSL实现安全通信

HTTPS是HTTP的安全版本,它可以通过SSL / TLS连接保护在线传输的任何通信。简而言之,HTTPS=HTTP+SSL

三. unity 访问 https

unity 直接访问https会出现

Mono https webrequest失败,并显示“身份验证或解密失败”

解决方案:所以,在unity的代码中,也需要加密

    public bool HttpsCertificateValidationCallback(System.Object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
    {
    
    
        bool isOk = true;
        if (sslPolicyErrors != SslPolicyErrors.None)
        {
    
    
            for (int i = 0; i < chain.ChainStatus.Length; i++)
            {
    
    
                if (chain.ChainStatus[i].Status == X509ChainStatusFlags.RevocationStatusUnknown)
                {
    
    
                    continue;
                }
                chain.ChainPolicy.RevocationFlag = X509RevocationFlag.EntireChain;
                chain.ChainPolicy.RevocationMode = X509RevocationMode.Online;
                chain.ChainPolicy.UrlRetrievalTimeout = new TimeSpan(0, 1, 0);
                chain.ChainPolicy.VerificationFlags = X509VerificationFlags.AllFlags;
                bool chainIsValid = chain.Build((X509Certificate2)certificate);
                if (!chainIsValid)
                {
    
    
                    isOk = false;
                    break;
                }
            }
        }
        return isOk;
    }

然后在Start函数中调用一下就行

private void Start()
    {
    
    
        ServicePointManager.ServerCertificateValidationCallback = HttpsCertificateValidationCallback;
    }

使用HTTPS 我觉得还会有很多坑。我最近刚把网站改为HTTPS,然后unity中访问数据全部都要改,直接访问就出现这个错误,接下来还会使用的更多。遇到的问题,解决后,再分享给大家哟

猜你喜欢

转载自blog.csdn.net/qq_46641769/article/details/105365131