/// <summary> /// Enable transport encryption /// </summary> protected void EnableClientTransportEncryption(string server) { // Check if transport encryption is applied if (Transport.InnerStream is SslStream) { return; } Log("Enabling client transport encryption..."); // Wrap TDS stream with auto TDS stream AutoTDSStream tds = new AutoTDSStream(Transport, false); // We want to wrap each TLS message with PreLogin tds.OutgoingMessageType = TDSMessageType.PreLogin; // Create multiplexer stream to be able to remove TDS from under SSL PlaceholderStream multiplexer = new PlaceholderStream(tds, false); // Wrap multiplexer stream with SSL stream SslStream ssl = new SslStream(multiplexer, true, new RemoteCertificateValidationCallback(_ValidateServerCertificate)); // Secure the channel ssl.AuthenticateAsClient(server); // Replace TDS stream with raw transport stream in multiplexer multiplexer.InnerStream = Transport.InnerStream; // Upgrade transport stream to SSL Transport.InnerStream = ssl; Log("Client transport encryption enabled"); }