Exemplo n.º 1
0
        public SslStream(Stream innerStream, bool leaveInnerStreamOpen)
            : base(innerStream, leaveInnerStreamOpen)
        {
            var provider = GetProvider();

            impl = provider.CreateSslStream(innerStream, leaveInnerStreamOpen);
        }
Exemplo n.º 2
0
 protected void Dispose(bool disposing)
 {
     if (impl != null && disposing)
     {
         impl.Dispose();
         impl = null;
     }
 }
Exemplo n.º 3
0
        public SslStream(Stream innerStream, bool leaveInnerStreamOpen, RemoteCertificateValidationCallback userCertificateValidationCallback, LocalCertificateSelectionCallback userCertificateSelectionCallback)
            : base(innerStream, leaveInnerStreamOpen)
        {
            var provider = GetProvider();
            var settings = new MonoTlsSettings();

            settings.RemoteCertificateValidationCallback = MNS.Private.CallbackHelpers.PublicToMono(userCertificateValidationCallback);
            settings.ClientCertificateSelectionCallback  = MNS.Private.CallbackHelpers.PublicToMono(userCertificateSelectionCallback);
            impl = provider.CreateSslStream(innerStream, leaveInnerStreamOpen, settings);
        }
Exemplo n.º 4
0
 protected override void Dispose(bool disposing)
 {
     try {
         if (impl != null && disposing)
         {
             impl.Dispose();
             impl = null;
         }
     } finally {
         base.Dispose(disposing);
     }
 }
		public async Task<MonoSslStream> CreateClientStreamAsync (Stream stream, string targetHost, ClientParameters parameters, MSI.MonoTlsSettings settings, CancellationToken cancellationToken)
		{
			var protocol = GetProtocol (parameters, false);

			MSI.ICertificateValidator validator = null;
			if (settings != null)
				CallbackHelpers.AddCertificateValidator (settings, parameters.ClientCertificateValidator);
			else
				validator = CallbackHelpers.GetCertificateValidator (parameters.ClientCertificateValidator);

			var clientCertificates = CallbackHelpers.GetClientCertificates (parameters);

			var sslStream = tlsProvider.CreateSslStream (stream, false, validator, settings);
			var monoSslStream = new MonoSslStream (sslStream);

			try {
				await sslStream.AuthenticateAsClientAsync (targetHost, clientCertificates, protocol, false).ConfigureAwait (false);
			} catch (Exception ex) {
				var lastError = monoSslStream.LastError;
				if (lastError != null)
					throw new AggregateException (ex, lastError);
				throw;
			}

			return monoSslStream;
		}
		public async Task<MonoSslStream> CreateServerStreamAsync (Stream stream, ServerParameters parameters, MSI.MonoTlsSettings settings, CancellationToken cancellationToken)
		{
			var certificate = CertificateProvider.GetCertificate (parameters.ServerCertificate);
			var protocol = GetProtocol (parameters, true);

			MSI.ICertificateValidator validator = null;
			if (settings != null)
				CallbackHelpers.AddCertificateValidator (settings, parameters.ServerCertificateValidator);
			else
				validator = CallbackHelpers.GetCertificateValidator (parameters.ServerCertificateValidator);

			var askForCert = (parameters.Flags & (ServerFlags.AskForClientCertificate|ServerFlags.RequireClientCertificate)) != 0;

			var sslStream = tlsProvider.CreateSslStream (stream, false, validator, settings);
			var monoSslStream = new MonoSslStream (sslStream);

			try {
				await sslStream.AuthenticateAsServerAsync (certificate, askForCert, protocol, false).ConfigureAwait (false);
			} catch (Exception ex) {
				var lastError = monoSslStream.LastError;
				if (lastError != null)
					throw new AggregateException (ex, lastError);
				throw;
			}

			return monoSslStream;
		}
Exemplo n.º 7
0
 public MonoSslStreamWrapper(MonoSslStream impl)
 {
     this.impl = impl;
 }
Exemplo n.º 8
0
		protected sealed override async Task<ISslStream> Start (TestContext ctx, Socket socket, CancellationToken cancellationToken)
		{
			UserSettings userSettings = null;
			Instrumentation instrumentation = null;
			if (SupportsInstrumentation && InstrumentationProvider != null) {
				instrumentation = InstrumentationProvider.CreateInstrument (ctx);
				if (instrumentation != null && instrumentation.HasSettingsInstrument)
					userSettings = instrumentation.SettingsInstrument.UserSettings;
			}

			if (ConnectionProvider.IsNewTls)
				settings = GetSettings (userSettings);

			if (instrumentation != null)
				((TlsSettings)settings).Instrumentation = instrumentation;

			monoSslStream = await Start (ctx, socket, settings, cancellationToken);
			return monoSslStream;
		}
Exemplo n.º 9
0
 internal SslStream(Stream innerStream, bool leaveInnerStreamOpen, MonoSslStream impl)
     : base(innerStream, leaveInnerStreamOpen)
 {
     this.impl = impl;
 }
Exemplo n.º 10
0
		protected sealed override async Task<ISslStream> Start (TestContext ctx, Stream stream, CancellationToken cancellationToken)
		{
			UserSettings userSettings = new UserSettings ();
			if (SupportsInstrumentation && InstrumentationProvider != null) {
				var instrumentation = InstrumentationProvider.CreateInstrument (ctx);
				if (instrumentation != null && instrumentation.HasSettingsInstrument)
					userSettings = instrumentation.SettingsInstrument.UserSettings;
				userSettings.Instrumentation = instrumentation;
			}

			GetSettings (userSettings);

			if (ConnectionProvider.IsNewTls) {
				settings = new MSI.MonoTlsSettings ();
				settings.UserSettings = userSettings;
			}

			monoSslStream = await Start (ctx, stream, settings, cancellationToken);
			return monoSslStream;
		}