Я работаю над приложением Xamarin, в котором я устанавливаю соединение с сервером.Код сервера в настоящее время для меня черный ящик, у меня есть только документация.
Однако, поскольку сервер переключился на TLS1.2, я пытаюсь использовать SslStream .NET для аутентификации в моем приложении.Я убедился, что оба используют один и тот же сертификат. сертификат является самоподписанным .
Всякий раз, когда я пытаюсь сделать AuthenticateAsClient, я получаю следующее исключение:
Mono.Security.Interface.TlsException: Unknown Secure Transport error `PeerHandshakeFail'.
Вот некоторая часть моего кода:
using (var stream = new SslStream(new NetworkStream(mainSocket), false, new RemoteCertificateValidationCallback(ValidateServerCertificate)))
{
try
{
stream.AuthenticateAsClient(ServerIpAdressServer, GetX509CertificateCollection(), System.Security.Authentication.SslProtocols.Tls12, false);
}
catch (Exception e)
{
Console.WriteLine(e);
}
}
(ValidateServerCertificate всегда возвращает true)
Вот мой способ получения сертификата:
public static X509CertificateCollection GetX509CertificateCollection()
{
var assembly = IntrospectionExtensions.GetTypeInfo(typeof(MyClass)).Assembly;
X509CertificateCollection collection1;
using (MemoryStream ms = new MemoryStream())
{
assembly.GetManifestResourceStream("namespace.cert.pem").CopyTo(ms);
X509Certificate2 certificate1 = new X509Certificate2(ms.ToArray());
collection1 = new X509CertificateCollection();
collection1.Add(certificate1);
}
return collection1;
}
Заранее спасибо!