/// <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); }