async protected override Task InitializeConnectionAsync(TcpSocket Client) { var Stream = new SslStream( innerStream: Client.Stream, leaveInnerStreamOpen: false, userCertificateValidationCallback: (Sender, Certificate, Chain, SslPolicyErrors) => { //Console.WriteLine("userCertificateValidationCallback"); return true; }, userCertificateSelectionCallback: (Sender, TargetHost, LocalCertificates, RemoteCertificate, AcceptableIssuers) => { //Console.WriteLine("Host: '{0}'", targetHost); //Console.WriteLine(String.Join(",", acceptableIssuers)); if (HostCertificates.ContainsKey(TargetHost)) { return HostCertificates[TargetHost]; } else { return DefaultX509Certificate; } } ); await Stream.AuthenticateAsServerAsync(DefaultX509Certificate); //await Stream.AuthenticateAsServerAsync(X509Certificate, true, SslProtocols.Tls, true); Client.UnsafeSetStream(Stream); }