コード例 #1
0
		public MonoConnectionProvider (MonoConnectionProviderFactory factory, ConnectionProviderType type, MSI.MonoTlsProvider tlsProvider, bool enableMonoExtensions)
			: base (factory, type, GetFlags (tlsProvider, enableMonoExtensions))
		{
			this.tlsProvider = tlsProvider;
			this.httpProvider = new MonoHttpProvider (this);
			this.enableMonoExtensions = enableMonoExtensions;
		}
コード例 #2
0
		internal static MonoSslStream CreateSslStream (
			Stream innerStream, bool leaveInnerStreamOpen,
			MonoTlsProvider provider, MonoTlsSettings settings = null)
		{
			var stream = new MonoNewTlsStream (innerStream, leaveInnerStreamOpen, provider, settings);
			return new MonoSslStreamImpl (stream);
		}
コード例 #3
0
 public MonoConnectionProvider(MonoConnectionProviderFactory factory, ConnectionProviderType type, MSI.MonoTlsProvider tlsProvider, bool enableMonoExtensions)
     : base(factory, type, GetFlags(tlsProvider, enableMonoExtensions))
 {
     this.tlsProvider          = tlsProvider;
     this.httpProvider         = new MonoHttpProvider(this);
     this.enableMonoExtensions = enableMonoExtensions;
 }
コード例 #4
0
		internal MonoConnectionProviderFactoryImpl ()
		{
			dotNetStreamProvider = new DotNetSslStreamProvider ();
			dotNetHttpProvider = new DefaultHttpProvider (dotNetStreamProvider);
			dotNetConnectionProvider = new DotNetConnectionProvider (this, ConnectionProviderType.DotNet, dotNetStreamProvider, dotNetHttpProvider);
			Install (dotNetConnectionProvider);

			newTlsProvider = DependencyInjector.Get<NewTlsProvider> ();
			newTlsConnectionProvider = new MonoConnectionProviderImpl (this, ConnectionProviderType.NewTLS, newTlsProvider, false);
			Install (newTlsConnectionProvider);

			legacyTlsProvider = MSI.MonoTlsProviderFactory.GetDefaultProvider ();
			legacyConnectionProvider = new MonoConnectionProviderImpl (this, ConnectionProviderType.OldTLS, legacyTlsProvider, false);
			Install (legacyConnectionProvider);

			monoWithNewTlsConnectionProvider = new MonoConnectionProviderImpl (this, ConnectionProviderType.MonoWithNewTLS, newTlsProvider, true);
			Install (monoWithNewTlsConnectionProvider);

			monoWithOldTlsConnectionProvider = new MonoConnectionProviderImpl (this, ConnectionProviderType.MonoWithOldTLS, legacyTlsProvider, true);
			Install (monoWithOldTlsConnectionProvider);

			openSslConnectionProvider = new OpenSslConnectionProvider (this);
			Install (openSslConnectionProvider);

			manualConnectionProvider = new ManualConnectionProvider (this, ConnectionProviderFlags.None);
			Install (manualConnectionProvider);
		}
コード例 #5
0
 internal MonoConnectionProvider(ConnectionProviderFactory factory, ConnectionProviderType type, ConnectionProviderFlags flags,
                                 string name, MSI.MonoTlsProvider tlsProvider)
     : base(factory, type, GetFlags(flags, tlsProvider))
 {
     this.name        = name;
     this.tlsProvider = tlsProvider;
 }
コード例 #6
0
        static MSI.MonoTlsProvider CreateDefaultProviderImpl()
        {
            MSI.MonoTlsProvider provider = null;
            var type = Environment.GetEnvironmentVariable("XA_TLS_PROVIDER");

            switch (type)
            {
            case null:
            case "default":
            case "legacy":
                return(new Private.MonoLegacyTlsProvider());

            case "btls":
#if HAVE_BTLS
                if (!MonoBtlsProvider.IsSupported())
                {
                    throw new NotSupportedException("BTLS in not supported!");
                }
                return(new MonoBtlsProvider());
#else
                throw new NotSupportedException("BTLS in not supported!");
#endif
            default:
                throw new NotSupportedException(string.Format("Invalid TLS Provider: `{0}'.", provider));
            }
        }
コード例 #7
0
#pragma warning disable 618

		internal static ICertificateValidator GetInternalValidator (MonoTlsProvider provider, MonoTlsSettings settings)
		{
			if (settings == null)
				return new ChainValidationHelper (provider, null, false, null, null);
			if (settings.CertificateValidator != null)
				return settings.CertificateValidator;
			return new ChainValidationHelper (provider, settings, false, null, null);
		}
コード例 #8
0
 static MSI.MonoTlsProvider CreateDefaultProviderImpl()
 {
     MSI.MonoTlsProvider provider = null;
     if (MSI.MonoTlsProviderFactory._PrivateFactoryDelegate != null)
     {
         provider = MSI.MonoTlsProviderFactory._PrivateFactoryDelegate();
     }
     return(provider);
 }
コード例 #9
0
        static ConnectionProviderFlags GetFlags(MSI.MonoTlsProvider tlsProvider, bool enableMonoExtensions)
        {
            var flags = ConnectionProviderFlags.SupportsSslStream | ConnectionProviderFlags.SupportsHttp;

            if (tlsProvider is NewTlsProvider)
            {
                flags |= ConnectionProviderFlags.SupportsTls12 | ConnectionProviderFlags.SupportsAeadCiphers | ConnectionProviderFlags.SupportsEcDheCiphers;
            }
            return(flags);
        }
コード例 #10
0
 static ConnectionProviderFlags GetFlags(ConnectionProviderFlags flags, MSI.MonoTlsProvider tlsProvider)
 {
     if (((flags & ConnectionProviderFlags.DisableMonoExtensions) == 0) && tlsProvider.SupportsMonoExtensions)
     {
         flags |= ConnectionProviderFlags.SupportsMonoExtensions | ConnectionProviderFlags.SupportsHttpListener;
         if (DependencyInjector.Get <IMonoConnectionFrameworkSetup> ().ProviderSupportsCleanShutdown(tlsProvider))
         {
             flags |= ConnectionProviderFlags.SupportsCleanShutdown;
         }
     }
     return(flags);
 }
コード例 #11
0
 static IMonoTlsProvider CreateDefaultProvider()
 {
                 #if SECURITY_DEP
     MSI.MonoTlsProvider provider = null;
     if (MSI.MonoTlsProviderFactory._PrivateFactoryDelegate != null)
     {
         provider = MSI.MonoTlsProviderFactory._PrivateFactoryDelegate();
     }
     if (provider != null)
     {
         return(new Private.MonoTlsProviderWrapper(provider));
     }
                 #endif
     return(null);
 }
コード例 #12
0
		public static MonoNewTlsStream CreateClient (
			Stream innerStream, bool leaveOpen, MonoTlsProvider provider, MonoTlsSettings settings,
			string targetHost, PSSCX.X509CertificateCollection clientCertificates, SslProtocols enabledSslProtocols, bool checkCertificateRevocation)
		{
			var stream = new MonoNewTlsStream (innerStream, leaveOpen, provider, settings);

			try {
				stream.AuthenticateAsClient (targetHost, clientCertificates, enabledSslProtocols, checkCertificateRevocation);
			} catch (Exception ex) {
				var tlsEx = stream.LastError;
				if (tlsEx != null)
					throw new AggregateException (ex, tlsEx);
				throw;
			}
			return stream;
		}
コード例 #13
0
 static ConnectionProviderFlags GetFlags(ConnectionProviderFlags flags, MSI.MonoTlsProvider tlsProvider)
 {
     if (tlsProvider.SupportsMonoExtensions)
     {
         flags |= ConnectionProviderFlags.SupportsMonoExtensions | ConnectionProviderFlags.SupportsHttpListener;
         // Legacy TLS does not support the clean shutdown.
         if ((flags & ConnectionProviderFlags.SupportsTls12) != 0)
         {
             if (DependencyInjector.Get <IConnectionFrameworkSetup> ().SupportsCleanShutdown)
             {
                 flags |= ConnectionProviderFlags.SupportsCleanShutdown;
             }
         }
     }
     return(flags);
 }
コード例 #14
0
ファイル: SslStream.cs プロジェクト: Profit0004/mono
		internal SslStream (Stream innerStream, bool leaveInnerStreamOpen, EncryptionPolicy encryptionPolicy, MonoTlsProvider provider, MonoTlsSettings settings)
			: base (innerStream, leaveInnerStreamOpen)
		{
			if (encryptionPolicy != EncryptionPolicy.RequireEncryption && encryptionPolicy != EncryptionPolicy.AllowNoEncryption && encryptionPolicy != EncryptionPolicy.NoEncryption)
				throw new ArgumentException (SR.GetString (SR.net_invalid_enum, "EncryptionPolicy"), "encryptionPolicy");

			var validationHelper = MNS.ChainValidationHelper.CloneWithCallbackWrapper (provider, ref settings, myUserCertValidationCallbackWrapper);

			LocalCertSelectionCallback selectionCallback = null;
			if (validationHelper.HasCertificateSelectionCallback)
				selectionCallback = validationHelper.SelectClientCertificate;

			var internalProvider = new MNS.Private.MonoTlsProviderWrapper (provider);
			_Configuration = new MyConfiguration (internalProvider, settings, this);
			_SslState = new SslState (innerStream, null, selectionCallback, encryptionPolicy, _Configuration);
		}
コード例 #15
0
        internal MonoConnectionProviderFactory()
        {
            dotNetStreamProvider     = new DotNetSslStreamProvider();
            dotNetHttpProvider       = new DefaultHttpProvider(dotNetStreamProvider);
            dotNetConnectionProvider = new DotNetConnectionProvider(this, ConnectionProviderType.DotNet, dotNetStreamProvider, dotNetHttpProvider);
            Install(dotNetConnectionProvider);

            newTlsProvider           = DependencyInjector.Get <NewTlsProvider> ();
            newTlsConnectionProvider = new MonoConnectionProvider(this, ConnectionProviderType.NewTLS, newTlsProvider, false);
            Install(newTlsConnectionProvider);

            monoWithNewTlsConnectionProvider = new MonoConnectionProvider(this, ConnectionProviderType.MonoWithNewTLS, newTlsProvider, true);
            Install(monoWithNewTlsConnectionProvider);

                        #if !__MOBILE__
            openSslConnectionProvider = new OpenSslConnectionProvider(this);
            Install(openSslConnectionProvider);
                        #endif

            manualConnectionProvider = new ManualConnectionProvider(this, ConnectionProviderFlags.IsExplicit);
            Install(manualConnectionProvider);
        }
コード例 #16
0
		internal MonoConnectionProviderFactory ()
		{
			dotNetStreamProvider = new DotNetSslStreamProvider ();
			dotNetHttpProvider = new DefaultHttpProvider (dotNetStreamProvider);
			dotNetConnectionProvider = new DotNetConnectionProvider (this, ConnectionProviderType.DotNet, dotNetStreamProvider, dotNetHttpProvider);
			Install (dotNetConnectionProvider);

			newTlsProvider = DependencyInjector.Get<NewTlsProvider> ();
			newTlsConnectionProvider = new MonoConnectionProvider (this, ConnectionProviderType.NewTLS, newTlsProvider, false);
			Install (newTlsConnectionProvider);

			monoWithNewTlsConnectionProvider = new MonoConnectionProvider (this, ConnectionProviderType.MonoWithNewTLS, newTlsProvider, true);
			Install (monoWithNewTlsConnectionProvider);

			#if !__MOBILE__
			openSslConnectionProvider = new OpenSslConnectionProvider (this);
			Install (openSslConnectionProvider);
			#endif

			manualConnectionProvider = new ManualConnectionProvider (this, ConnectionProviderFlags.IsExplicit);
			Install (manualConnectionProvider);
		}
コード例 #17
0
		ChainValidationHelper (ChainValidationHelper other, MonoTlsProvider provider, MonoTlsSettings settings, ServerCertValidationCallbackWrapper callbackWrapper = null)
		{
			sender = other.sender;
			certValidationCallback = other.certValidationCallback;
			certSelectionCallback = other.certSelectionCallback;
			tlsStream = other.tlsStream;
			request = other.request;

			if (settings == null)
				settings = MonoTlsSettings.DefaultSettings;

			this.provider = provider;
			this.settings = settings.CloneWithValidator (this);
			this.callbackWrapper = callbackWrapper;
		}
コード例 #18
0
		/*
		 * This is a hack which is used in SslStream - see ReferenceSources/SslStream.cs for details.
		 */
		internal static ChainValidationHelper CloneWithCallbackWrapper (MonoTlsProvider provider, ref MonoTlsSettings settings, ServerCertValidationCallbackWrapper wrapper)
		{
			var helper = (ChainValidationHelper)settings.CertificateValidator;
			if (helper == null)
				helper = new ChainValidationHelper (provider, settings, true, null, wrapper);
			else
				helper = new ChainValidationHelper (helper, provider, settings, wrapper);
			settings = helper.settings;
			return helper;
		}
コード例 #19
0
		/*
		 * Use this overloaded version in user code.
		 */
		public static ICertificateValidator GetValidator (MonoTlsSettings settings, MonoTlsProvider provider = null)
		{
			return GetDefaultValidator (settings, provider);
		}
コード例 #20
0
		internal static ICertificateValidator2 GetDefaultValidator (MonoTlsSettings settings, MonoTlsProvider provider)
		{
			return GetInternalValidator (settings, provider);
		}
コード例 #21
0
ファイル: MonoTlsProviderFactory.cs プロジェクト: Numpsy/mono
		/*
		 * Create @HttpWebRequest with the specified @provider (may be null to use the default one).
		 * 
		 * NOTE: This needs to be written as "System.Uri" to avoid ambiguity with Mono.Security.Uri in the
		 *        mobile build.
		 * 
		 */
		public static HttpWebRequest CreateHttpsRequest (System.Uri requestUri, MonoTlsProvider provider, MonoTlsSettings settings = null)
		{
			return NoReflectionHelper.CreateHttpsRequest (requestUri, provider, settings);
		}
コード例 #22
0
 public MonoConnectionProvider(ConnectionProviderFactory factory, ConnectionProviderType type, ConnectionProviderFlags flags, string name, MSI.MonoTlsProvider tlsProvider)
     : base(factory, type, flags)
 {
     this.name        = name;
     this.tlsProvider = tlsProvider;
 }
コード例 #23
0
		/*
		 * Installs a custom TLS Provider.
		 *
		 * May only be called at application startup and will throw
		 * @InvalidOperationException if a provider has already been installed.
		 */
		public static void InstallProvider (MonoTlsProvider provider)
		{
			installProviderMethod.Invoke (null, new object[] { provider });
		}
コード例 #24
0
		/*
		 * Create @HttpWebRequest with the specified @provider (may be null to use the default one).
		 * 
		 * NOTE: This needs to be written as "System.Uri" to avoid ambiguity with Mono.Security.Uri in the
		 *        mobile build.
		 * 
		 */
		public static HttpWebRequest CreateHttpsRequest (System.Uri requestUri, MonoTlsProvider provider, MonoTlsSettings settings = null)
		{
			return (HttpWebRequest)createHttpsRequestMethod.Invoke (null, new object[] { requestUri, provider, settings });
		}
コード例 #25
0
 public static HttpListener CreateHttpListener(X509Certificate certificate, MonoTlsProvider provider = null, MonoTlsSettings settings = null)
 {
     return((HttpListener)NoReflectionHelper.CreateHttpListener(certificate, provider, settings));
 }
コード例 #26
0
ファイル: MonoNewTlsStream.cs プロジェクト: yangjunhua/mono
		internal MonoNewTlsStream (Stream innerStream, bool leaveOpen, MSI.MonoTlsProvider provider, MSI.MonoTlsSettings settings)
			: base (innerStream, leaveOpen, EncryptionPolicy.RequireEncryption, provider, settings)
		{
			this.provider = provider;
		}
コード例 #27
0
 internal MonoNewTlsStream(Stream innerStream, bool leaveOpen, MSI.MonoTlsProvider provider, MSI.MonoTlsSettings settings)
     : base(innerStream, leaveOpen, EncryptionPolicy.RequireEncryption, provider, settings)
 {
     this.provider = provider;
 }
コード例 #28
0
 internal MonoNewTlsStream(Stream innerStream, MSI.MonoTlsProvider provider, MSI.MonoTlsSettings settings)
     : this(innerStream, false, provider, settings)
 {
 }
コード例 #29
0
		internal static ChainValidationHelper Create (MonoTlsProvider provider, ref MonoTlsSettings settings, MonoTlsStream stream)
		{
			var helper = new ChainValidationHelper (provider, settings, true, stream, null);
			settings = helper.settings;
			return helper;
		}
コード例 #30
0
		/*
		 * Installs a custom TLS Provider.
		 *
		 * May only be called at application startup and will throw
		 * @InvalidOperationException if a provider has already been installed.
		 */
		public static void InstallProvider (MonoTlsProvider provider)
		{
			NoReflectionHelper.InstallProvider (provider);
		}
コード例 #31
0
		ChainValidationHelper (MonoTlsProvider provider, MonoTlsSettings settings, bool cloneSettings, MonoTlsStream stream, ServerCertValidationCallbackWrapper callbackWrapper)
		{
			if (settings == null)
				settings = MonoTlsSettings.CopyDefaultSettings ();
			if (cloneSettings)
				settings = settings.CloneWithValidator (this);
			if (provider == null)
				provider = MonoTlsProviderFactory.GetProvider ();

			this.provider = provider;
			this.settings = settings;
			this.tlsStream = stream;
			this.callbackWrapper = callbackWrapper;

			var fallbackToSPM = false;

			if (settings != null) {
				if (settings.RemoteCertificateValidationCallback != null) {
					var callback = Private.CallbackHelpers.MonoToPublic (settings.RemoteCertificateValidationCallback);
					certValidationCallback = new ServerCertValidationCallback (callback);
				}
				certSelectionCallback = Private.CallbackHelpers.MonoToInternal (settings.ClientCertificateSelectionCallback);
				fallbackToSPM = settings.UseServicePointManagerCallback ?? stream != null;
			}

			if (stream != null) {
				this.request = stream.Request;
				this.sender = request;

				if (certValidationCallback == null)
					certValidationCallback = request.ServerCertValidationCallback;
				if (certSelectionCallback == null)
					certSelectionCallback = new LocalCertSelectionCallback (DefaultSelectionCallback);

				if (settings == null)
					fallbackToSPM = true;
			}

			if (fallbackToSPM && certValidationCallback == null)
				certValidationCallback = ServicePointManager.ServerCertValidationCallback;
		}
コード例 #32
0
ファイル: SslStream.cs プロジェクト: ArsenShnurkov/mono
		public SslStream (Stream innerStream, bool leaveInnerStreamOpen, RemoteCertificateValidationCallback userCertificateValidationCallback, LocalCertificateSelectionCallback userCertificateSelectionCallback)
			: base (innerStream, leaveInnerStreamOpen)
		{
			provider = GetProvider ();
			var settings = MonoTlsSettings.CopyDefaultSettings ();
			settings.RemoteCertificateValidationCallback = MNS.Private.CallbackHelpers.PublicToMono (userCertificateValidationCallback);
			settings.ClientCertificateSelectionCallback = MNS.Private.CallbackHelpers.PublicToMono (userCertificateSelectionCallback);
			impl = provider.CreateSslStream (innerStream, leaveInnerStreamOpen, settings);
		}
コード例 #33
0
ファイル: LegacySslStream.cs プロジェクト: JokerGITHUB/mono
		public LegacySslStream (Stream innerStream, bool leaveInnerStreamOpen, MonoTlsProvider provider, MonoTlsSettings settings)
			: base (innerStream, leaveInnerStreamOpen)
		{
			this.provider = provider;
			this.settings = settings;
			this.certificateValidator = ChainValidationHelper.GetDefaultValidator (provider, settings);
		}
コード例 #34
0
		public MonoBtlsStream (Stream innerStream, bool leaveInnerStreamOpen, MonoTlsSettings settings, MonoTlsProvider provider)
			: base (innerStream, leaveInnerStreamOpen, settings, provider)
		{
		}
コード例 #35
0
ファイル: SslStream.cs プロジェクト: ArsenShnurkov/mono
		public SslStream (Stream innerStream, bool leaveInnerStreamOpen)
			: base (innerStream, leaveInnerStreamOpen)
		{
			provider = GetProvider ();
			impl = provider.CreateSslStream (innerStream, leaveInnerStreamOpen);
		}
コード例 #36
0
		static ICertificateValidator GetDefaultValidator (MonoTlsProvider provider, MonoTlsSettings settings)
		{
			return (ICertificateValidator)NoReflectionHelper.GetDefaultCertificateValidator (provider, settings);
		}
コード例 #37
0
ファイル: MonoTlsProviderFactory.cs プロジェクト: Numpsy/mono
		public static HttpListener CreateHttpListener (X509Certificate certificate, MonoTlsProvider provider = null, MonoTlsSettings settings = null)
		{
			return (HttpListener)NoReflectionHelper.CreateHttpListener (certificate, provider, settings);
		}
コード例 #38
0
		/*
		 * Internal API, intended to be used by MonoTlsProvider implementations.
		 */
		public static ICertificateValidator GetValidator (MonoTlsProvider provider, MonoTlsSettings settings)
		{
			return GetDefaultValidator (provider, settings);
		}
コード例 #39
0
 /*
  * Create @HttpWebRequest with the specified @provider (may be null to use the default one).
  *
  * NOTE: This needs to be written as "System.Uri" to avoid ambiguity with Mono.Security.Uri in the
  *        mobile build.
  *
  */
 public static HttpWebRequest CreateHttpsRequest(System.Uri requestUri, MonoTlsProvider provider, MonoTlsSettings settings = null)
 {
     return(NoReflectionHelper.CreateHttpsRequest(requestUri, provider, settings));
 }
コード例 #40
0
		/*
		 * Internal API, intended to be used by MonoTlsProvider implementations.
		 */
		internal static ICertificateValidator2 GetInternalValidator (MonoTlsSettings settings, MonoTlsProvider provider)
		{
			return (ICertificateValidator2)NoReflectionHelper.GetInternalValidator (provider, settings);
		}