首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将UnityWebRequest更改为https

将UnityWebRequest更改为https
EN

Stack Overflow用户
提问于 2019-03-12 09:16:45
回答 1查看 10.7K关注 0票数 7

我有在http下工作的unity android app和site api的工作基础设施。

最近,我切换了服务器并应用了ssl certificate。现在我的api在https下了。

在unity应用程序中,我使用UnityWebRequest与我的api进行通信。切换到https后的逻辑变化是将应用程序中的所有api地址从http更改为https。我这样做了,但是我的api表现得很奇怪。(总是给出我自己的错误状态作为响应,而在没有证书的旧服务器上给出好的响应。)

在切换到https时,是否还有其他需要更改的内容

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-12 12:16:44

通常,Unity会自动处理证书,并根据已知的根证书进行验证,或者完全忽略它们,具体取决于平台:

将此属性设置为null可使平台使用默认证书验证。某些平台将根据根证书颁发机构存储区验证证书。其他平台将完全绕过证书验证。

但是,如果决定使用第一个证书,则使用Unity自签名证书将失败。

因此,对于具有自签名证书的https,您可能必须实现一个实现方法ValidateCertificateCertificateHandler

您可以通过接受来简单地绕过证书(这更简单,但当然会使https变得毫无意义)

代码语言:javascript
复制
public class BypassCertificate : CertificateHandler
{
    protected override bool ValidateCertificate(byte[] certificateData)
    {
        //Simply return true no matter what
        return true;
    }
} 

或者使用您的公钥从文档中尝试此示例

代码语言:javascript
复制
// 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));
    }
}

并将其添加到请求中

代码语言:javascript
复制
using(var www = UnityWebRequest.Get("https://example.com"))
{
    //www.certificateHandler = new BypassCertificate();
    // Or
    www.certificateHandler = new AcceptAllCertificatesSignedWithASpecificPublicKey();

    yield return www.SendWebRequest();
    
    //...
}

注意:目前只支持Android、iOS、tvOS、桌面等平台的自定义证书验证。

所以在Android上你应该没问题。

默认情况下,CertificateHandlerUnityWebRequest一起使用automatically disposed,因此无需再做更多工作。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55112733

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档