我有在http下工作的unity android app和site api的工作基础设施。
最近,我切换了服务器并应用了ssl certificate。现在我的api在https下了。
在unity应用程序中,我使用UnityWebRequest与我的api进行通信。切换到https后的逻辑变化是将应用程序中的所有api地址从http更改为https。我这样做了,但是我的api表现得很奇怪。(总是给出我自己的错误状态作为响应,而在没有证书的旧服务器上给出好的响应。)
在切换到https时,是否还有其他需要更改的内容
发布于 2019-03-12 12:16:44
通常,Unity会自动处理证书,并根据已知的根证书进行验证,或者完全忽略它们,具体取决于平台:
将此属性设置为null可使平台使用默认证书验证。某些平台将根据根证书颁发机构存储区验证证书。其他平台将完全绕过证书验证。
但是,如果决定使用第一个证书,则使用Unity自签名证书将失败。
因此,对于具有自签名证书的https,您可能必须实现一个实现方法ValidateCertificate的CertificateHandler。
您可以通过接受来简单地绕过证书(这更简单,但当然会使https变得毫无意义)
public class BypassCertificate : CertificateHandler
{
protected override bool ValidateCertificate(byte[] certificateData)
{
//Simply return true no matter what
return true;
}
} 或者使用您的公钥从文档中尝试此示例
// 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));
}
}并将其添加到请求中
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上你应该没问题。
默认情况下,CertificateHandler与UnityWebRequest一起使用automatically disposed,因此无需再做更多工作。
https://stackoverflow.com/questions/55112733
复制相似问题