Beispiel #1
0
        internal static Dictionary <AllowedServices, LocalizedString> EnableForServices(X509Certificate2 cert, AllowedServices services, string websiteName, bool requireSsl, ITopologyConfigurationSession dataSession, Server server, List <LocalizedString> warningList, bool allowConfirmation, bool forceNetworkService)
        {
            Dictionary <AllowedServices, LocalizedString> dictionary = new Dictionary <AllowedServices, LocalizedString>(3);

            if (dataSession == null)
            {
                throw new ArgumentNullException("dataSession");
            }
            if (server == null)
            {
                throw new ArgumentNullException("server");
            }
            if ((services & AllowedServices.IIS) != AllowedServices.None)
            {
                if (allowConfirmation && !IisUtility.SslRequiredOnTheRoot(null) && requireSsl)
                {
                    dictionary[AllowedServices.IIS] = Strings.ConfirmEnforceRequireSslOnRoot;
                }
                else
                {
                    IisUtility.SetSslCertificateByName(websiteName, cert, requireSsl);
                }
            }
            if ((services & AllowedServices.POP) != AllowedServices.None || (services & AllowedServices.IMAP) != AllowedServices.None || (services & AllowedServices.SMTP) != AllowedServices.None || forceNetworkService)
            {
                AccessRule rule = new CryptoKeyAccessRule(new SecurityIdentifier(WellKnownSidType.NetworkServiceSid, null), CryptoKeyRights.GenericRead, AccessControlType.Allow);
                try
                {
                    TlsCertificateInfo.AddAccessRule(cert, rule);
                }
                catch (CryptographicException innerException)
                {
                    throw new AddAccessRuleCryptographicException(cert.Thumbprint, innerException);
                }
                catch (ArgumentException innerException2)
                {
                    throw new AddAccessRuleArgumentException(cert.Thumbprint, innerException2);
                }
                catch (UnauthorizedAccessException innerException3)
                {
                    throw new AddAccessRuleUnauthorizedAccessException(cert.Thumbprint, innerException3);
                }
                catch (COMException innerException4)
                {
                    throw new AddAccessRuleCOMException(cert.Thumbprint, innerException4);
                }
            }
            if ((services & AllowedServices.SMTP) != AllowedServices.None)
            {
                ManageExchangeCertificate.WarnIfNotBestMatch(new ExchangeCertificate(cert), dataSession, server, warningList);
                LocalizedString localizedString = ManageExchangeCertificate.UpdateActiveDirectory(cert, dataSession, server, warningList, allowConfirmation);
                if (localizedString != LocalizedString.Empty)
                {
                    dictionary[AllowedServices.SMTP] = localizedString;
                }
            }
            if ((services & AllowedServices.POP) != AllowedServices.None)
            {
                ManageExchangeCertificate.SetPop3Certificate(cert, dataSession, warningList);
            }
            if ((services & AllowedServices.IMAP) != AllowedServices.None)
            {
                ManageExchangeCertificate.SetImap4Certificate(cert, dataSession, warningList);
            }
            if ((services & AllowedServices.UM) != AllowedServices.None)
            {
                ManageExchangeCertificate.SetUMCertificate(cert, server, dataSession, allowConfirmation, dictionary, warningList);
            }
            if ((services & AllowedServices.UMCallRouter) != AllowedServices.None)
            {
                ManageExchangeCertificate.SetUMCallRouterCertificate(cert, server, dataSession, allowConfirmation, dictionary, warningList);
            }
            if (dictionary.Count <= 0)
            {
                return(null);
            }
            return(dictionary);
        }