Обычно Unity обрабатывает сертификат автоматически и проверяет его по известным корневым сертификатам или полностью игнорирует их в зависимости от платформы:
UnityWebRequest.certificateHandler:
Если для этого свойства установлено значение null
, платформа будет использовать проверку сертификата по умолчанию.Некоторые платформы проверяют сертификаты в хранилище корневого центра сертификации.Другие платформы просто обойдут проверку сертификата полностью.
Использование самозаверяющего сертификата , однако, завершится неудачей, если Unity решит за первое.
Таким образом, для https
с самозаверяющим сертификатом вам, возможно, придется реализовать CertificateHandler
, который реализует метод ValidateCertificate
.
Вы можете либо просто обойти сертификат, приняв их all (что проще, но, конечно, сделает 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 AcceptAllCertificatesSignedWithASpecificKeyPublicKey : 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();
if (pk.Equals(PUB_KEY))
return true;
// Bad dog
return false;
}
}
И добавьте его к вашему запросу
using(var www = UnityWebRequest.Get("https://example.com"))
{
//www.certificateHandler = new BypassCertificate();
// Or
www.certificateHandler = new AcceptAllCertificatesSignedWithASpecificKeyPublicKey();
yield return www.SendWebRequest();
//...
}
Примечание. В настоящее время проверка пользовательских сертификатов реализована только для следующих платформ:Android, iOS, tvOS и настольные платформы.
Так что на Android все должно быть в порядке.
CertificateHandler
по умолчанию автоматически располагается вместе сUnityWebRequest
так что больше делать нечего.