Xamarin iOS SslStream.AuthenticateAsUser() returns 异常 "Unknown Secure Transport error `PeerHandshakeFail'."
Xamarin iOS SslStream.AuthenticateAsUser() returns exception "Unknown Secure Transport error `PeerHandshakeFail'."
我正在开发一个 Xamarin 应用程序,我正在其中建立与服务器的连接。服务器代码目前对我来说是一个黑匣子,我只有文档。
但是,由于服务器切换到 TLS1.2,我正在尝试使用 .NET 的 SslStream 在我的应用程序上进行身份验证。我确保两者都使用相同的证书。 证书是自签名的。
每当我尝试执行 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 总是 returns 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;
}
提前致谢!
这是 document 中有关 Xamarin 中 TLS1.2 的警告 IOS.May 对您有所帮助。
the downside is that it requires the event loop to be running for async operations to be executed.
SslStream.AuthenticateAsClientAsync Method : 将 client-server 连接的客户端验证为异步操作。
因此,从您使用异步方法进行的测试来看,这是正确的解决方案。很高兴解决了。
我正在开发一个 Xamarin 应用程序,我正在其中建立与服务器的连接。服务器代码目前对我来说是一个黑匣子,我只有文档。
但是,由于服务器切换到 TLS1.2,我正在尝试使用 .NET 的 SslStream 在我的应用程序上进行身份验证。我确保两者都使用相同的证书。 证书是自签名的。
每当我尝试执行 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 总是 returns 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;
}
提前致谢!
这是 document 中有关 Xamarin 中 TLS1.2 的警告 IOS.May 对您有所帮助。
the downside is that it requires the event loop to be running for async operations to be executed.
SslStream.AuthenticateAsClientAsync Method : 将 client-server 连接的客户端验证为异步操作。
因此,从您使用异步方法进行的测试来看,这是正确的解决方案。很高兴解决了。