/// <summary> /// Returns the domain names which the server is configured to use. /// </summary> /// <returns>A list of domain names.</returns> public IList <string> GetServerDomainNames() { StringCollection baseAddresses = new StringCollection(); if (this.ServerConfiguration != null) { if (this.ServerConfiguration.BaseAddresses != null) { baseAddresses.AddRange(this.ServerConfiguration.BaseAddresses); } if (this.ServerConfiguration.AlternateBaseAddresses != null) { baseAddresses.AddRange(this.ServerConfiguration.AlternateBaseAddresses); } } if (this.DiscoveryServerConfiguration != null) { if (this.DiscoveryServerConfiguration.BaseAddresses != null) { baseAddresses.AddRange(this.DiscoveryServerConfiguration.BaseAddresses); } if (this.DiscoveryServerConfiguration.AlternateBaseAddresses != null) { baseAddresses.AddRange(this.DiscoveryServerConfiguration.AlternateBaseAddresses); } } var domainNames = new List <string>(); for (int ii = 0; ii < baseAddresses.Count; ii++) { Uri url = Utils.ParseUri(baseAddresses[ii]); if (url == null) { continue; } string domainName = url.DnsSafeHost; if (url.HostNameType == UriHostNameType.Dns) { domainName = Utils.ReplaceLocalhost(domainName); } else // IPv4/IPv6 address { domainName = Utils.NormalizedIPAddress(domainName); } if (!Utils.FindStringIgnoreCase(domainNames, domainName)) { domainNames.Add(domainName); } } return(domainNames); }
/// <summary> /// Find the domain in a certificate in the /// endpoint that was used to connect a session. /// </summary> /// <param name="serverCertificate">The server certificate which is tested for domain names.</param> /// <param name="endpoint">The endpoint which was used to connect.</param> /// <returns>True if domain was found.</returns> private bool FindDomain(X509Certificate2 serverCertificate, ConfiguredEndpoint endpoint) { bool domainFound = false; // check the certificate domains. IList <string> domains = X509Utils.GetDomainsFromCertficate(serverCertificate); if (domains != null && domains.Count > 0) { string hostname; string dnsHostName = hostname = endpoint.EndpointUrl.DnsSafeHost; bool isLocalHost = false; if (endpoint.EndpointUrl.HostNameType == UriHostNameType.Dns) { if (String.Equals(dnsHostName, "localhost", StringComparison.InvariantCultureIgnoreCase)) { isLocalHost = true; } else { // strip domain names from hostname hostname = dnsHostName.Split('.')[0]; } } else { // dnsHostname is a IPv4 or IPv6 address // normalize ip addresses, cert parser returns normalized addresses hostname = Utils.NormalizedIPAddress(dnsHostName); if (hostname == "127.0.0.1" || hostname == "::1") { isLocalHost = true; } } if (isLocalHost) { dnsHostName = Utils.GetFullQualifiedDomainName(); hostname = Utils.GetHostName(); } for (int ii = 0; ii < domains.Count; ii++) { if (String.Equals(hostname, domains[ii], StringComparison.OrdinalIgnoreCase) || String.Equals(dnsHostName, domains[ii], StringComparison.OrdinalIgnoreCase)) { domainFound = true; break; } } } return(domainFound); }