private IStreamFactory CreateStreamFactory(ClusterKey clusterKey)
        {
            var            tcpStreamSettings = CreateTcpStreamSettings(clusterKey);
            IStreamFactory streamFactory     = new TcpStreamFactory(tcpStreamSettings);

            if (clusterKey.SslSettings != null)
            {
                var sslStreamSettings = new SslStreamSettings(
                    clientCertificates: Optional.Create(clusterKey.SslSettings.ClientCertificates ?? Enumerable.Empty <X509Certificate>()),
                    checkCertificateRevocation: clusterKey.SslSettings.CheckCertificateRevocation,
                    clientCertificateSelectionCallback: clusterKey.SslSettings.ClientCertificateSelectionCallback,
                    enabledProtocols: clusterKey.SslSettings.EnabledSslProtocols,
                    serverCertificateValidationCallback: clusterKey.SslSettings.ServerCertificateValidationCallback);

                streamFactory = new SslStreamFactory(sslStreamSettings, streamFactory);
            }

            return(streamFactory);
        }
        private IStreamFactory CreateStreamFactory(ClusterKey clusterKey)
        {
            var            tcpStreamSettings = CreateTcpStreamSettings(clusterKey);
            IStreamFactory streamFactory     = new TcpStreamFactory(tcpStreamSettings);

            if (clusterKey.SslSettings != null)
            {
                var sslStreamSettings = new SslStreamSettings(
                    new Optional <IEnumerable <X509Certificate> >(clusterKey.SslSettings.ClientCertificates),
                    clusterKey.SslSettings.CheckCertificateRevocation,
                    clusterKey.SslSettings.ClientCertificateSelectionCallback,
                    clusterKey.SslSettings.EnabledSslProtocols,
                    clusterKey.SslSettings.ServerCertificateValidationCallback);

                streamFactory = new SslStreamFactory(sslStreamSettings, streamFactory);
            }

            return(streamFactory);
        }
        private SslStreamSettings ConfigureSsl(SslStreamSettings settings, ClusterKey clusterKey)
        {
            if (clusterKey.SslSettings != null)
            {
                var validationCallback = clusterKey.SslSettings.ServerCertificateValidationCallback;
                if (validationCallback == null && !clusterKey.VerifySslCertificate)
                {
                    validationCallback = AcceptAnySslCertificate;
                }

                return(settings.With(
                           clientCertificates: Optional.Create(clusterKey.SslSettings.ClientCertificates ?? Enumerable.Empty <X509Certificate>()),
                           checkCertificateRevocation: clusterKey.SslSettings.CheckCertificateRevocation,
                           clientCertificateSelectionCallback: clusterKey.SslSettings.ClientCertificateSelectionCallback,
                           enabledProtocols: clusterKey.SslSettings.EnabledSslProtocols,
                           serverCertificateValidationCallback: validationCallback));
            }

            return(settings);
        }
        private SslStreamSettings ConfigureSsl(SslStreamSettings settings, ClusterKey clusterKey)
        {
            if (clusterKey.UseTls)
            {
                var sslSettings = clusterKey.SslSettings ?? new SslSettings();

                var validationCallback = sslSettings.ServerCertificateValidationCallback;
                if (validationCallback == null && clusterKey.AllowInsecureTls)
                {
                    validationCallback = AcceptAnySslCertificate;
                }

                return(settings.With(
                           clientCertificates: Optional.Enumerable(sslSettings.ClientCertificates ?? Enumerable.Empty <X509Certificate>()),
                           checkCertificateRevocation: sslSettings.CheckCertificateRevocation,
                           clientCertificateSelectionCallback: sslSettings.ClientCertificateSelectionCallback,
                           enabledProtocols: sslSettings.EnabledSslProtocols,
                           serverCertificateValidationCallback: validationCallback));
            }

            return(settings);
        }
 public SslStreamFactory(SslStreamSettings settings, IStreamFactory wrapped)
 {
     _settings = Ensure.IsNotNull(settings, nameof(settings));
     _wrapped  = Ensure.IsNotNull(wrapped, nameof(wrapped));
 }
 public SslStreamFactory(SslStreamSettings settings, IStreamFactory wrapped)
 {
     _settings = Ensure.IsNotNull(settings, "settings");
     _wrapped  = Ensure.IsNotNull(wrapped, "wrapped");
 }