示例#1
0
        public void WildcardOld(int expectedBindings, int iisVersion)
        {
            var site = new MockSite()
            {
                Id       = piramidId,
                Bindings = new List <MockBinding> {
                    new MockBinding()
                    {
                        IP       = DefaultIP,
                        Port     = 80,
                        Host     = "*.b.c.com",
                        Protocol = "http"
                    }
                }
            };
            var iis = new MockIISClient(log, iisVersion)
            {
                MockSites = new[] { site }
            };

            var bindingOptions = new BindingOptions().
                                 WithSiteId(piramidId).
                                 WithIP(DefaultIP).
                                 WithPort(DefaultPort).
                                 WithStore(DefaultStore).
                                 WithThumbprint(newCert);

            iis.AddOrUpdateBindings(new[] { "*.b.c.com" }, bindingOptions, scopeCert);

            Assert.AreEqual(expectedBindings, site.Bindings.Count());
        }
示例#2
0
        public void SNITrap2()
        {
            var iis = new MockIISClient(log)
            {
                MockSites = new[] {
                    new MockSite()
                    {
                        Id       = sniTrap1,
                        Bindings = new List <MockBinding> {
                            new MockBinding()
                            {
                                IP                   = DefaultIP,
                                Port                 = DefaultPort,
                                Host                 = sniTrapHost,
                                Protocol             = "https",
                                CertificateHash      = oldCert1,
                                CertificateStoreName = DefaultStore,
                                SSLFlags             = SSLFlags.None
                            }
                        }
                    },
                    new MockSite()
                    {
                        Id       = sniTrap2,
                        Bindings = new List <MockBinding> {
                            new MockBinding()
                            {
                                IP                   = DefaultIP,
                                Port                 = DefaultPort,
                                Host                 = "",
                                Protocol             = "https",
                                CertificateHash      = oldCert1,
                                CertificateStoreName = DefaultStore,
                                SSLFlags             = SSLFlags.None
                            }
                        }
                    },
                }
            };

            var bindingOptions = new BindingOptions().
                                 WithSiteId(sniTrap2).
                                 WithIP(DefaultIP).
                                 WithPort(DefaultPort).
                                 WithStore(DefaultStore).
                                 WithThumbprint(newCert);

            var sniTrap1Site = iis.GetWebSite(sniTrap1);
            var sniTrap2Site = iis.GetWebSite(sniTrap2);

            iis.AddOrUpdateBindings(new[] { sniTrapHost }, bindingOptions, scopeCert);

            var updatedBinding = sniTrap2Site.Bindings[0];

            Assert.AreEqual(SSLFlags.None, updatedBinding.SSLFlags);
            Assert.AreEqual(oldCert1, updatedBinding.CertificateHash);
        }
示例#3
0
        public void UpdateOutOfScope()
        {
            var iis = new MockIISClient(log)
            {
                MockSites = new[] {
                    new MockSite()
                    {
                        Id       = inscopeId,
                        Bindings = new List <MockBinding> {
                            new MockBinding()
                            {
                                IP                   = DefaultIP,
                                Port                 = DefaultPort,
                                Host                 = inscopeHost,
                                Protocol             = "https",
                                CertificateHash      = scopeCert,
                                CertificateStoreName = DefaultStore,
                                SSLFlags             = SSLFlags.SNI
                            }
                        }
                    },
                    new MockSite()
                    {
                        Id       = outofscopeId,
                        Bindings = new List <MockBinding> {
                            new MockBinding()
                            {
                                IP                   = DefaultIP,
                                Port                 = DefaultPort,
                                Host                 = outofscopeHost,
                                Protocol             = "https",
                                CertificateHash      = scopeCert,
                                CertificateStoreName = DefaultStore,
                                SSLFlags             = SSLFlags.SNI
                            }
                        }
                    }
                }
            };

            var bindingOptions = new BindingOptions().
                                 WithSiteId(inscopeId).
                                 WithIP(DefaultIP).
                                 WithPort(DefaultPort).
                                 WithStore(DefaultStore).
                                 WithThumbprint(newCert);

            var outofScopeSite = iis.GetWebSite(outofscopeId);

            iis.AddOrUpdateBindings(new[] { regularHost }, bindingOptions, scopeCert);
            Assert.AreEqual(1, outofScopeSite.Bindings.Count);

            var updatedBinding = outofScopeSite.Bindings[0];

            Assert.AreEqual(DefaultStore, updatedBinding.CertificateStoreName);
            Assert.AreEqual(newCert, updatedBinding.CertificateHash);
        }
示例#4
0
        public void UpdateSimple(string storeName, string bindingIp, int bindingPort, SSLFlags inputFlags, SSLFlags expectedFlags)
        {
            var iis = new MockIISClient(log)
            {
                MockSites = new[] {
                    new MockSite()
                    {
                        Id       = regularId,
                        Bindings = new List <MockBinding> {
                            new MockBinding()
                            {
                                IP       = "*",
                                Port     = 80,
                                Host     = regularHost,
                                Protocol = "http"
                            },
                            new MockBinding()
                            {
                                IP                   = AltIP,
                                Port                 = AltPort,
                                Host                 = regularHost,
                                Protocol             = "https",
                                CertificateHash      = oldCert1,
                                CertificateStoreName = AltStore,
                                SSLFlags             = SSLFlags.None
                            }
                        }
                    }
                }
            };

            var bindingOptions = new BindingOptions().
                                 WithSiteId(regularId).
                                 WithIP(bindingIp).
                                 WithPort(bindingPort).
                                 WithStore(storeName).
                                 WithFlags(inputFlags).
                                 WithThumbprint(newCert);

            var regularSite = iis.GetWebSite(regularId);

            iis.AddOrUpdateBindings(new[] { regularHost }, bindingOptions, oldCert1);
            Assert.AreEqual(2, regularSite.Bindings.Count);

            var updatedBinding = regularSite.Bindings[1];

            Assert.AreEqual(regularHost, updatedBinding.Host);
            Assert.AreEqual("https", updatedBinding.Protocol);
            Assert.AreEqual(storeName, updatedBinding.CertificateStoreName);
            Assert.AreEqual(newCert, updatedBinding.CertificateHash);
            Assert.AreEqual(AltPort, updatedBinding.Port);
            Assert.AreEqual(AltIP, updatedBinding.IP);
            Assert.AreEqual(expectedFlags, updatedBinding.SSLFlags);
        }
示例#5
0
        public void DuplicateBinding()
        {
            var dup1 = new MockSite()
            {
                Id       = 1,
                Bindings = new List <MockBinding> {
                    new MockBinding()
                    {
                        IP                   = DefaultIP,
                        Port                 = DefaultPort,
                        Host                 = "exists.example.com",
                        Protocol             = "https",
                        CertificateHash      = oldCert1,
                        CertificateStoreName = DefaultStore,
                        SSLFlags             = SSLFlags.None
                    }
                }
            };

            var dup2 = new MockSite()
            {
                Id       = 2,
                Bindings = new List <MockBinding> {
                    new MockBinding()
                    {
                        IP       = DefaultIP,
                        Port     = 80,
                        Host     = "exists.example.com",
                        Protocol = "http"
                    }
                }
            };

            var iis = new MockIISClient(log)
            {
                MockSites = new[] { dup1, dup2 }
            };

            var bindingOptions = new BindingOptions().
                                 WithSiteId(2).
                                 WithIP(DefaultIP).
                                 WithPort(DefaultPort).
                                 WithStore(DefaultStore).
                                 WithThumbprint(newCert);

            iis.AddOrUpdateBindings(new[] { "exists.example.com" }, bindingOptions, scopeCert);
            Assert.AreEqual(1, dup2.Bindings.Count);
        }
示例#6
0
        public void AddNewMultiple(string storeName, string bindingIp, int bindingPort, SSLFlags inputFlags, SSLFlags expectedFlags)
        {
            var originalBindings = new List <MockBinding> {
                new MockBinding()
                {
                    IP       = "*",
                    Port     = 80,
                    Host     = "site1.example.com",
                    Protocol = "http"
                },
                new MockBinding()
                {
                    IP       = "*",
                    Port     = 80,
                    Host     = "site2.example.com",
                    Protocol = "http"
                }
            };
            var site = new MockSite()
            {
                Id       = httpOnlyId,
                Bindings = originalBindings.ToList()
            };
            var iis = new MockIISClient(log)
            {
                MockSites = new[] { site }
            };
            var bindingOptions = new BindingOptions().
                                 WithSiteId(httpOnlyId).
                                 WithIP(bindingIp).
                                 WithPort(bindingPort).
                                 WithStore(storeName).
                                 WithFlags(inputFlags).
                                 WithThumbprint(newCert);

            iis.AddOrUpdateBindings(new[] { "site1.example.com", "site2.example.com" }, bindingOptions, oldCert1);
            Assert.AreEqual(4, site.Bindings.Count);
            foreach (var newBinding in site.Bindings.Except(originalBindings))
            {
                Assert.AreEqual("https", newBinding.Protocol);
                Assert.AreEqual(storeName, newBinding.CertificateStoreName);
                Assert.AreEqual(newCert, newBinding.CertificateHash);
                Assert.AreEqual(bindingPort, newBinding.Port);
                Assert.AreEqual(bindingIp, newBinding.IP);
                Assert.AreEqual(expectedFlags, newBinding.SSLFlags);
            }
        }
示例#7
0
        public void AddNewSingle(string storeName, string bindingIp, int bindingPort, SSLFlags inputFlags, SSLFlags expectedFlags, int iisVersion)
        {
            var iis = new MockIISClient(log, iisVersion)
            {
                MockSites = new[] {
                    new MockSite()
                    {
                        Id       = httpOnlyId,
                        Bindings = new List <MockBinding> {
                            new MockBinding()
                            {
                                IP       = "*",
                                Port     = 80,
                                Host     = httpOnlyHost,
                                Protocol = "http"
                            }
                        }
                    }
                }
            };
            var testHost       = httpOnlyHost;
            var bindingOptions = new BindingOptions().
                                 WithSiteId(httpOnlyId).
                                 WithIP(bindingIp).
                                 WithPort(bindingPort).
                                 WithStore(storeName).
                                 WithFlags(inputFlags).
                                 WithThumbprint(newCert);

            var httpOnlySite = iis.GetWebSite(httpOnlyId);

            iis.AddOrUpdateBindings(new[] { testHost }, bindingOptions, oldCert1);
            Assert.AreEqual(2, httpOnlySite.Bindings.Count);

            var newBinding = httpOnlySite.Bindings[1];

            Assert.AreEqual(testHost, newBinding.Host);
            Assert.AreEqual("https", newBinding.Protocol);
            Assert.AreEqual(storeName, newBinding.CertificateStoreName);
            Assert.AreEqual(newCert, newBinding.CertificateHash);
            Assert.AreEqual(bindingPort, newBinding.Port);
            Assert.AreEqual(bindingIp, newBinding.IP);
            Assert.AreEqual(expectedFlags, newBinding.SSLFlags);
        }
示例#8
0
        public void UpdateWildcardFuzzy(string storeName, string bindingIp, int bindingPort, SSLFlags inputFlags, SSLFlags expectedFlags)
        {
            var originalBindings = new List <MockBinding> {
                new MockBinding()
                {
                    IP              = DefaultIP,
                    Port            = DefaultPort,
                    Host            = "site1.example.com",
                    Protocol        = "https",
                    CertificateHash = scopeCert
                }
            };
            var site = new MockSite()
            {
                Id       = httpOnlyId,
                Bindings = originalBindings.ToList()
            };
            var iis = new MockIISClient(log)
            {
                MockSites = new[] { site }
            };
            var bindingOptions = new BindingOptions().
                                 WithSiteId(httpOnlyId).
                                 WithIP(bindingIp).
                                 WithPort(bindingPort).
                                 WithStore(storeName).
                                 WithFlags(inputFlags).
                                 WithThumbprint(newCert);

            iis.AddOrUpdateBindings(new[] { "*.example.com" }, bindingOptions, oldCert1);

            var expectedBindings = inputFlags.HasFlag(SSLFlags.CentralSSL) ? 2 : 1;

            Assert.AreEqual(expectedBindings, site.Bindings.Count);
            foreach (var newBinding in site.Bindings.Except(originalBindings))
            {
                Assert.AreEqual("https", newBinding.Protocol);
                Assert.AreEqual(storeName, newBinding.CertificateStoreName);
                Assert.AreEqual(newCert, newBinding.CertificateHash);
                Assert.AreEqual(DefaultPort, newBinding.Port);
                Assert.AreEqual(DefaultIP, newBinding.IP);
                Assert.AreEqual(expectedFlags, newBinding.SSLFlags);
            }
        }
示例#9
0
        public void UpdatePiramid(string certificateHost, string[] ignoreBindings, string expectedBinding, SSLFlags flags)
        {
            var iis = new MockIISClient(log)
            {
                MockSites = new[] {
                    new MockSite()
                    {
                        Id       = piramidId,
                        Bindings = new List <MockBinding> {
                            new MockBinding()
                            {
                                IP       = DefaultIP,
                                Port     = 80,
                                Host     = "a.b.c.com",
                                Protocol = "http"
                            },
                            new MockBinding()
                            {
                                IP       = DefaultIP,
                                Port     = 80,
                                Host     = "*.b.c.com",
                                Protocol = "http"
                            },
                            new MockBinding()
                            {
                                IP       = DefaultIP,
                                Port     = 80,
                                Host     = "*.x.y.z.com",
                                Protocol = "http"
                            },
                            new MockBinding()
                            {
                                IP       = DefaultIP,
                                Port     = 80,
                                Host     = "*.c.com",
                                Protocol = "http"
                            },
                            new MockBinding()
                            {
                                IP       = DefaultIP,
                                Port     = 80,
                                Host     = "*.com",
                                Protocol = "http"
                            },
                            new MockBinding()
                            {
                                IP       = DefaultIP,
                                Port     = 80,
                                Host     = "",
                                Protocol = "http"
                            }
                        }
                    }
                }
            };

            var bindingOptions = new BindingOptions().
                                 WithSiteId(piramidId).
                                 WithIP(DefaultIP).
                                 WithPort(DefaultPort).
                                 WithStore(DefaultStore).
                                 WithThumbprint(newCert).
                                 WithFlags(flags);

            var piramidSite = iis.GetWebSite(piramidId);
            var originalSet = piramidSite.Bindings.Where(x => !ignoreBindings.Contains(x.Host)).ToList();

            piramidSite.Bindings = originalSet.ToList().OrderBy(x => Guid.NewGuid()).ToList();
            iis.AddOrUpdateBindings(new[] { certificateHost }, bindingOptions, scopeCert);

            var newBindings = piramidSite.Bindings.Except(originalSet);

            Assert.AreEqual(1, newBindings.Count());

            var newBinding = newBindings.First();

            Assert.AreEqual(expectedBinding, newBinding.Host);
        }