由于IOS 中要求App内访问的网络必须使用HTTPS协议,我便将网站改成了HTTPS
修改成HTTPS后,什么都没操作,直接在unity中使用https访问数据,然后直接报错:“身份验证或者解密失败” 的错误
下面将详细讲解问题以及解决方案
问题:关于 Unity Https 加密通道 无法连接的问题
错误信息:
TlsException: Invalid certificate received from server. Error code: 0xffffffff800b010a
一. 由于接口网站使用了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中访问数据全部都要改,直接访问就出现这个错误,接下来还会使用的更多。遇到的问题,解决后,再分享给大家哟