- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在使用 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/
我目前遇到一个问题,一个作为 Windows 服务安装的 .Net 应用程序与另一个用 Java 编写的应用程序对话,该应用程序在 Apache Tomcat 7 中运行,在 Windows Serv
我正在使用 Unity5 中的安全套接字(在 C# 中)开发一个应用程序,以允许服务器将信息推送到客户端。我想为此使用 Socket 和 SSLStream,以确保通信安全。 我有一个弹性 beant
这个问题是关于解决 SslPolicyError.RemoteCertificateNotAvailable 错误。 我开发了一个带有 SSLStream 的 TCP 服务器和一个用于另一端的 TCP
我是一名优秀的程序员,十分优秀!