static SimpleConnectionParameters CreateParameters(MonoConnectionTestCategory category, SimpleConnectionType type, params object[] args)
        {
            var sb = new StringBuilder();

            sb.Append(type);
            foreach (var arg in args)
            {
                sb.AppendFormat(":{0}", arg);
            }
            var name = sb.ToString();

            return(new SimpleConnectionParameters(category, type, name, ResourceManager.SelfSignedServerCertificate)
            {
                ClientCertificateValidator = AcceptAnyCertificate
            });
        }
Пример #2
0
        public static ConnectionTestFlags GetConnectionFlags(TestContext ctx, MonoConnectionTestCategory category)
        {
            switch (category)
            {
            case MonoConnectionTestCategory.SimpleMonoClient:
            case MonoConnectionTestCategory.SelectClientCipher:
                return(ConnectionTestFlags.RequireMonoClient);

            case MonoConnectionTestCategory.SimpleMonoServer:
            case MonoConnectionTestCategory.SelectServerCipher:
                return(ConnectionTestFlags.RequireMonoServer);

            case MonoConnectionTestCategory.SimpleMonoConnection:
            case MonoConnectionTestCategory.MonoProtocolVersions:
            case MonoConnectionTestCategory.SelectCipher:
                return(ConnectionTestFlags.RequireMono);

            case MonoConnectionTestCategory.ClientConnection:
            case MonoConnectionTestCategory.MartinTestClient:
                return(ConnectionTestFlags.RequireMonoClient);

            case MonoConnectionTestCategory.ServerConnection:
            case MonoConnectionTestCategory.MartinTestServer:
                return(ConnectionTestFlags.RequireMonoServer);

            case MonoConnectionTestCategory.Connection:
            case MonoConnectionTestCategory.CertificateChecks:
            case MonoConnectionTestCategory.SecurityFramework:
                return(ConnectionTestFlags.RequireMono);

            case MonoConnectionTestCategory.MartinTest:
                // return ConnectionTestFlags.RequireMono | ConnectionTestFlags.RequireTls12;
                return(ConnectionTestFlags.None);

            default:
                ctx.AssertFail("Unsupported instrumentation category: '{0}'.", category);
                return(ConnectionTestFlags.None);
            }
        }
 public MonoConnectionProviderFilter(MonoConnectionTestCategory category, MonoConnectionTestFlags flags)
 {
     Category = category;
     Flags    = flags;
 }
 public MonoConnectionTestCategoryAttribute(MonoConnectionTestCategory category)
 {
     this.category   = category;
     this.identifier = Type.Name;
 }
        public static IEnumerable <SimpleConnectionType> GetTestTypes(TestContext ctx, MonoConnectionTestCategory category)
        {
            switch (category)
            {
            case MonoConnectionTestCategory.SimpleMonoClient:
                yield return(SimpleConnectionType.SimpleTls10);

                yield return(SimpleConnectionType.SimpleTls11);

                yield return(SimpleConnectionType.SimpleTls12);

                yield break;

            case MonoConnectionTestCategory.SimpleMonoServer:
                yield return(SimpleConnectionType.SimpleTls10);

                yield return(SimpleConnectionType.SimpleTls11);

                yield return(SimpleConnectionType.SimpleTls12);

                yield break;

            case MonoConnectionTestCategory.SimpleMonoConnection:
                yield return(SimpleConnectionType.SimpleTls10);

                yield return(SimpleConnectionType.SimpleTls11);

                yield return(SimpleConnectionType.SimpleTls12);

                yield return(SimpleConnectionType.DefaultCipherTls10);

                yield return(SimpleConnectionType.DefaultCipherTls11);

                yield return(SimpleConnectionType.DefaultCipherTls12);

                yield return(SimpleConnectionType.CipherSelectionOrder);

                yield return(SimpleConnectionType.CipherSelectionOrder2);

                yield break;

            case MonoConnectionTestCategory.MonoProtocolVersions:
                yield return(SimpleConnectionType.Simple);

                yield return(SimpleConnectionType.ValidateCertificate);

                yield return(SimpleConnectionType.RequestClientCertificate);

                yield return(SimpleConnectionType.RequireClientCertificateRSA);

                yield return(SimpleConnectionType.RequireClientCertificateDHE);

                yield break;

            case MonoConnectionTestCategory.SecurityFramework:
                yield return(SimpleConnectionType.Simple);

                yield break;

            case MonoConnectionTestCategory.MartinTest:
                yield return(SimpleConnectionType.MartinTest);

                // goto case MonoConnectionTestCategory.SimpleMonoConnection;
                yield break;

            default:
                ctx.AssertFail("Unspported connection category: '{0}.", category);
                yield break;
            }
        }
        static SimpleConnectionParameters Create(TestContext ctx, ClientAndServerProvider provider, MonoConnectionTestCategory category, SimpleConnectionType type)
        {
            var parameters = CreateParameters(category, type);

            var certificateProvider = DependencyInjector.Get <ICertificateProvider> ();
            var acceptSelfSigned    = certificateProvider.AcceptThisCertificate(ResourceManager.SelfSignedServerCertificate);
            var acceptFromCA        = certificateProvider.AcceptFromCA(ResourceManager.LocalCACertificate);

            bool            clientSupportsEcDhe;
            bool            serverSupportsEcDhe;
            CipherSuiteCode defaultCipher;
            CipherSuiteCode defaultCipher12;
            CipherSuiteCode alternateCipher12;

            if (provider != null)
            {
                clientSupportsEcDhe = (provider.Client.Flags & ConnectionProviderFlags.SupportsEcDheCiphers) != 0;
                serverSupportsEcDhe = (provider.Server.Flags & ConnectionProviderFlags.SupportsEcDheCiphers) != 0;
            }
            else
            {
                clientSupportsEcDhe = serverSupportsEcDhe = false;
            }

            if (clientSupportsEcDhe && serverSupportsEcDhe)
            {
                defaultCipher     = CipherSuiteCode.TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA;
                defaultCipher12   = CipherSuiteCode.TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384;
                alternateCipher12 = CipherSuiteCode.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA;
            }
            else
            {
                defaultCipher     = CipherSuiteCode.TLS_DHE_RSA_WITH_AES_256_CBC_SHA;
                defaultCipher12   = CipherSuiteCode.TLS_DHE_RSA_WITH_AES_256_GCM_SHA384;
                alternateCipher12 = CipherSuiteCode.TLS_DHE_RSA_WITH_AES_128_CBC_SHA;
            }

            switch (type)
            {
            case SimpleConnectionType.Simple:
                break;

            case SimpleConnectionType.ValidateCertificate:
                parameters.ServerCertificate          = ResourceManager.ServerCertificateFromCA;
                parameters.ClientCertificateValidator = acceptFromCA;
                break;

            case SimpleConnectionType.SimpleTls10:
                parameters.ProtocolVersion = ProtocolVersions.Tls10;
                break;

            case SimpleConnectionType.SimpleTls11:
                parameters.ProtocolVersion = ProtocolVersions.Tls11;
                break;

            case SimpleConnectionType.SimpleTls12:
                parameters.ProtocolVersion = ProtocolVersions.Tls12;
                break;

            case SimpleConnectionType.DefaultCipherTls10:
                parameters.ProtocolVersion = ProtocolVersions.Tls10;
                parameters.ExpectedCipher  = defaultCipher;
                break;

            case SimpleConnectionType.DefaultCipherTls11:
                parameters.ProtocolVersion = ProtocolVersions.Tls11;
                parameters.ExpectedCipher  = defaultCipher;
                break;

            case SimpleConnectionType.DefaultCipherTls12:
                parameters.ProtocolVersion = ProtocolVersions.Tls12;
                parameters.ExpectedCipher  = defaultCipher12;
                break;

            case SimpleConnectionType.SelectCiphersTls10:
                parameters.ProtocolVersion = ProtocolVersions.Tls10;
                break;

            case SimpleConnectionType.SelectCiphersTls11:
                parameters.ProtocolVersion = ProtocolVersions.Tls11;
                break;

            case SimpleConnectionType.SelectCiphersTls12:
                parameters.ProtocolVersion = ProtocolVersions.Tls12;
                break;

            case SimpleConnectionType.RequestClientCertificate:
                /*
                 * Request client certificate, but do not require it.
                 *
                 * FIXME:
                 * SslStream with Mono's old implementation fails here.
                 */
                parameters.ClientCertificate          = ResourceManager.MonkeyCertificate;
                parameters.ClientCertificateValidator = acceptSelfSigned;
                parameters.AskForClientCertificate    = true;
                parameters.ServerCertificateValidator = acceptFromCA;
                break;

            case SimpleConnectionType.RequireClientCertificateRSA:
                /*
                 * Require client certificate.
                 *
                 */
                parameters.ClientCertificate          = ResourceManager.MonkeyCertificate;
                parameters.ClientCertificateValidator = acceptSelfSigned;
                parameters.RequireClientCertificate   = true;
                parameters.ServerCertificateValidator = acceptFromCA;
                parameters.ServerCiphers = new CipherSuiteCode[] {
                    CipherSuiteCode.TLS_RSA_WITH_AES_128_CBC_SHA
                };
                break;

            case SimpleConnectionType.RequireClientCertificateDHE:
                /*
                 * Require client certificate.
                 *
                 */
                parameters.ClientCertificate          = ResourceManager.MonkeyCertificate;
                parameters.ClientCertificateValidator = acceptSelfSigned;
                parameters.RequireClientCertificate   = true;
                parameters.ServerCertificateValidator = acceptFromCA;
                parameters.ServerCiphers = new CipherSuiteCode[] {
                    CipherSuiteCode.TLS_DHE_RSA_WITH_AES_256_CBC_SHA
                };
                break;

            case SimpleConnectionType.CipherSelectionOrder:
                parameters.ProtocolVersion = ProtocolVersions.Tls12;
                parameters.ClientCiphers   = new CipherSuiteCode[] {
                    CipherSuiteCode.TLS_RSA_WITH_AES_128_CBC_SHA,
                    alternateCipher12
                };
                parameters.ExpectedServerCipher = CipherSuiteCode.TLS_RSA_WITH_AES_128_CBC_SHA;
                break;

            case SimpleConnectionType.CipherSelectionOrder2:
                parameters.ProtocolVersion = ProtocolVersions.Tls12;
                parameters.ClientCiphers   = new CipherSuiteCode[] {
                    alternateCipher12,
                    CipherSuiteCode.TLS_RSA_WITH_AES_128_CBC_SHA
                };
                parameters.ExpectedServerCipher = alternateCipher12;
                break;

            case SimpleConnectionType.MartinTest:
                parameters.ServerCertificate = ResourceManager.GetCertificateWithKey(CertificateResourceType.SelfSignedServerCertificate);
                break;

            default:
                ctx.AssertFail("Unsupported connection type: '{0}'.", type);
                break;
            }

            return(parameters);
        }
 public static IEnumerable <SimpleConnectionParameters> GetParameters(TestContext ctx, ClientAndServerProvider provider, MonoConnectionTestCategory category)
 {
     return(GetTestTypes(ctx, category).Select(t => Create(ctx, provider, category, t)));
 }
 public SimpleConnectionParameters(MonoConnectionTestCategory category, SimpleConnectionType type, string identifier, X509Certificate certificate)
     : base(category, identifier, certificate)
 {
     Type = type;
 }
Пример #9
0
 public MonoConnectionProviderFilter(MonoConnectionTestCategory category, ConnectionTestFlags flags)
     : base(flags)
 {
     Category = category;
 }
 public MonoConnectionTestProvider(ConnectionProvider client, ConnectionProvider server, MonoConnectionTestCategory category, MonoConnectionTestFlags flags)
     : base(client, server, string.Format("{0}:{1}:{2}{3}", client.Name, server.Name, category, GetFlagsName(flags)))
 {
     Category = category;
     Flags    = flags;
 }
 public MonoConnectionTestParameters(MonoConnectionTestCategory category, string identifier, X509Certificate certificate)
     : base(identifier, certificate)
 {
     Category = category;
 }