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