gpt4 book ai didi

c# - unity SSLStream AuthenticateAsClient 给SslPolicyErrors.RemoteCertificateNotAvailable

转载 作者:太空宇宙 更新时间:2023-11-03 15:05:19 25 4
gpt4 key购买 nike

我正在使用 Unity5 中的安全套接字(在 C# 中)开发一个应用程序,以允许服务器将信息推送到客户端。我想为此使用 Socket 和 SSLStream,以确保通信安全。

我有一个弹性 beantalk 环境设置,其中包含 AWS 证书服务提供的证书。

我已经编写了一个客户端类,可以使用下面的 RemoteCertificateValidationCallback 连接到此环境:

 public static bool RemoteCertificateValidationCallback(System.Object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
bool isOk = true;
// If there are errors write them out
if (sslPolicyErrors != SslPolicyErrors.None)
{
//Debug.Log(sslPolicyErrors.ToString());
Console.WriteLine(sslPolicyErrors.ToString());
return false;
}
return isOk;
}

当我从 Visual Studio 2017 中创建的控制台应用程序运行此代码时,我得到了预期的 sslPolicyErrors.None。

从 Unity5 中运行完全相同的代码(减去控制台引用)给我 sslPolicyErrors.RemoteCertificateNotAvailable。

我已经尝试使用 mozroots -import --machine 将证书导入到 Mono 信任库中,输出如下:

Issuer: C=US, O=Amazon, OU=Server CA 1B, CN=Amazon
Serial number: 66-xx-xx-xx-xx-xx-xx-xx-xx-xx-46-xx-xx-xx-xx-0D
Valid from 05/05/2017 00:00:00 to 05/06/2018 12:00:00

我一直在四处寻找,但找不到任何东西可以说明为什么它可以作为独立的控制台程序运行,但在从 Unity 运行时却不能运行。如果我特别忽略这个 sslPolicyError,一切正常,客户端和服务器之间的通信按预期进行。但我不想随意忽略可能意味着通信可能受到损害的错误。

我真的希望这里有人有一些想法!

最佳答案

why this works as a standalone console program, but not when run from Unity?

作为Mono official said , Mono 不包含根证书,而独立程序使用系统证书。

有一种解决方案是通过X509Store 安装证书。

string cert = "BASE64 ENCODED CERT(PEM), NOT HEADER AND FOOTER, BASICALLY EXPORTED BY OPENSSL";
byte[] certBytes = Convert.FromBase64String(cert);
X509Certificate2 certificate = new X509Certificate2(cert);
X509Store store = new X509Store(StoreName.Root, StoreLocation.CurrentUser);
store.Open(OpenFlags.ReadWrite);
store.Add(certificate);
store.Close();

您可以使用 openssl 导出 pem,例如 openssl x509 -inform DER -in YOUR_CER.cer -out YOUR_PEM.pem

安装正确的证书后,RemoteCertificateValidationCallback 如果连接到受信任的站点,将不再返回 RemoteCertificateNotAvailable

关于c# - unity SSLStream AuthenticateAsClient 给SslPolicyErrors.RemoteCertificateNotAvailable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43819851/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com