So beheben Sie UNITYTLS_X509VERIFY_NOT_DONE
Ich habe mehrere Antworten auf ähnliche Fehler gesehen, aber nicht meinen spezifischen Fehler. Das beste Beispiel ist Remys Antwort auf UNITYTLS_X509VERIFY_FLAG_NOT_TRUSTED
Mein Fehler ist wie folgt: TlsException: Handshake failed - error code: UNITYTLS_INTERNAL_ERROR, verify result: UNITYTLS_X509VERIFY_NOT_DONE
- Web-API Node.js / MongoDB
- NGINX mit CertBot
- SSL LetsEncrypt mit verketteten Zertifikaten in fullchain.pem
NGINX-Standard
listen [::]:443 ssl ipv6only=on #managed by Certbot
listen 443 ssl
ssl_certificate /etc/letsencrypt/live/mysite.com/fullchain.pem # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/mysite.com/privatekey.pem # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem # managed by Certbot
Gemäß Unity Docs habe ich die CertificateHandlerKlasse verwendet
internal class RequestCertificate : CertificateHandler
{
private static string PUB_KEY = "SOME public key";
protected override bool ValidateCertificate(byte[] certificateData)
{
X509Certificate2 certificate = new X509Certificate2(certificateData);
string pk = certificate.GetPublicKeyString();
if (pk.Equals(PUB_KEY))
{
Debug.Log("Validate Certificate");
return true;
}
else
{
Debug.Log("Not Validate Certificate");
return false;
}
}
}
Meine Registrierungsmethode
protected IEnumerator Register()
{
List<IMultipartFormSection> wwwForm = new List<IMultipartFormSection>();
wwwForm.Add(new MultipartFormDataSection("name", uName.text));
wwwForm.Add(new MultipartFormDataSection("email", uEmail.text));
wwwForm.Add(new MultipartFormDataSection("screenName", uScreenName.text));
wwwForm.Add(new MultipartFormDataSection("password", uConPass.text));
UnityWebRequest www = UnityWebRequest.Post(EndPointManager.API_URL + "users/store-user", wwwForm);
www.certificateHandler = new RequestCertificate();
Debug.Log(www.certificateHandler.GetHashCode());
yield return www.SendWebRequest();
if (www.isNetworkError || www.isHttpError)
{
Debug.Log(www.error); // OUTPUT: Unable to complete SSL connection
debugText.text += $"\n HTTP ERROR: {www.error} \n";
}
else
{
debugText.text += "Success";
}
}
Antworten
Dies hatte nichts mit der Zertifizierungsstelle oder NGINX zu tun. Ich habe beschlossen, ein Front-End-Formular einzurichten, um diesen Fehler in Chrome zu testen. Sobald ich dies tat, traf mich die Antwort ins Gesicht. Ich habe vergessen, Umgebungsvariablen auf dem Produktionsserver festzulegen und bekam net::ERR_SSL_PROTOCOL_ERROR. Da Unity einen Fehler zurückgab, mit dem ich nicht vertraut war, wusste ich nicht, wie ich damit umgehen sollte.
Ich hatte meine app.js-Datei auf der Suche nach der, process.env.NODE_ENVdamit sie gesetzt werden konnte, protocol = 'https'aber nicht gesetzt hatte. Sobald ich Node.js https.createServer(app)anstelle von verwendet habe http.crateServer(app)und alles in Ordnung ist.