ssw*_*qaa 7 ssl unity-game-engine
我有统一的 android 应用程序和站点 api 在http
.
最近换了服务器,申请了ssl certificate
。现在我的 api 在https
.
在统一应用程序中,我UnityWebRequest
用来与我的 api 进行通信。切换到 后的逻辑变化是https
将应用程序中的所有 api 地址从http
更改为https
。我这样做了,但是我的 api 表现得很奇怪。(一直将我自己的错误状态作为响应,而在没有证书的旧服务器上给出良好的响应。)
切换到 时我需要改变https
什么吗?
通常 Unity 会自动处理证书并根据已知的根证书对其进行验证,或者根据平台完全忽略它们:
UnityWebRequest.certificateHandler:
设置此属性null
使平台使用默认证书验证。某些平台将根据根证书颁发机构存储验证证书。其他平台将完全绕过证书验证。
但是,如果 Unity 决定第一个,使用自签名证书将失败。
因此,对于https
自签名证书,您可能必须实现CertificateHandler
实现方法的ValidateCertificate
。
您可以简单地通过接受所有证书来绕过证书(这更容易,但当然会使https
这种毫无意义)
public class BypassCertificate : CertificateHandler
{
protected override bool ValidateCertificate(byte[] certificateData)
{
//Simply return true no matter what
return true;
}
}
Run Code Online (Sandbox Code Playgroud)
或者使用您的公钥尝试文档中的此示例
// Based on https://www.owasp.org/index.php/Certificate_and_Public_Key_Pinning#.Net
class AcceptAllCertificatesSignedWithASpecificPublicKey : CertificateHandler
{
// Encoded RSAPublicKey
private static string PUB_KEY = "30818902818100C4A06B7B52F8D17DC1CCB47362" +
"C64AB799AAE19E245A7559E9CEEC7D8AA4DF07CB0B21FDFD763C63A313A668FE9D764E" +
"D913C51A676788DB62AF624F422C2F112C1316922AA5D37823CD9F43D1FC54513D14B2" +
"9E36991F08A042C42EAAEEE5FE8E2CB10167174A359CEBF6FACC2C9CA933AD403137EE" +
"2C3F4CBED9460129C72B0203010001";
protected override bool ValidateCertificate(byte[] certificateData)
{
X509Certificate2 certificate = new X509Certificate2(certificateData);
string pk = certificate.GetPublicKeyString();
return pk.Equals(PUB_KEY));
}
}
Run Code Online (Sandbox Code Playgroud)
并将其添加到您的请求中
using(var www = UnityWebRequest.Get("https://example.com"))
{
//www.certificateHandler = new BypassCertificate();
// Or
www.certificateHandler = new AcceptAllCertificatesSignedWithASpecificPublicKey();
yield return www.SendWebRequest();
//...
}
Run Code Online (Sandbox Code Playgroud)
注意:自定义证书验证目前仅针对以下平台实施 - Android、iOS、tvOS 和桌面平台。
所以在Android上你应该没问题。
在CertificateHandler
默认情况下自动处理一起UnityWebRequest
,所以没有更多的事情要做。
归档时间: |
|
查看次数: |
9284 次 |
最近记录: |