Настройка проверки подлинности Kerberos для служб клиентского доступа с балансировкой нагрузки

Чтобы использовать проверку подлинности Kerberos с серверами почтовых ящиков с балансировкой нагрузки, на которых выполняются службы клиентского доступа, необходимо выполнить действия по настройке, описанные в этой статье.

Создание учетных данных альтернативной учетной записи службы в доменных службах Active Directory

Все серверы Exchange, на которые запущены службы клиентского доступа с одинаковыми пространствами имен и URL-адресами, должны использовать одни и те же учетные данные альтернативной учетной записи службы или (учетные данные ASA). Как правило, достаточно иметь одну учетную запись для леса для каждой версии Exchange.

Важно!

Exchange 2010 и Exchange 2016 не могут использовать одинаковые учетные данные ASA. Если учетные данные ASA были созданы для Exchange 2010, необходимо создать новую для Exchange 2016.

Хотя для общих пространств имен поддерживаются записи CNAME, Майкрософт рекомендует использовать записи A. Так клиент будет правильно отправлять запрос билета Kerberos (по общему имени, а не полному доменному имени сервера).

Примечание.

Групповые управляемые учетные записи служб (gMSA) не поддерживаются в локальных Exchange Server средах и поэтому не могут использоваться в этом сценарии.

При настройке учетных данных ASA помните о следующем.

  • Тип учетной записи. Рекомендуется создать учетную запись компьютера вместо учетной записи пользователя. Ученая запись компьютера не поддерживает интерактивный вход и может использовать более простые политики безопасности, чем учетная запись пользователя. При создании учетной записи компьютера срок действия пароля не истекает, но мы все равно рекомендуем периодически обновлять пароль. Локальная групповая политика может определять максимальный срок хранения учетных записей компьютера и использовать скрипты для периодического удаления учетных записей компьютера, не соответствующих текущим политикам. Локальная политика безопасности также определяет, когда необходимо изменить пароль. Хотя мы рекомендуем использовать учетную запись компьютера, вы можете создать учетную запись пользователя.

  • Имя учетной записи. Нет никаких требований к имени учетной записи. Можно использовать любое имя, соответствующее схеме именования.

  • Группа учетных записей. Учетной записи, используемой для учетных данных ASA, не требуются специальные привилегии безопасности. Если вы используете учетную запись компьютера, она должна быть только членом группы безопасности "Компьютеры домена". Если вы используете учетную запись пользователя, она должна быть только членом группы безопасности "Пользователи домена".

  • Пароль учетной записи. Пароль, указанный при создании учетной записи, будет использоваться. Поэтому следует указать сложный пароль и, соответствующий требованиям к паролю в организации.

Создание учетных данных ASA как учетной записи компьютера

  1. На присоединенном к домену компьютере выполните команду Оболочка Windows PowerShell или Командная консоль Exchange.

    Импортируйте модуль Active Directory с помощью командлета Import-Module.

    Import-Module ActiveDirectory
    
  2. Выполните командлет New-ADComputer, чтобы создать учетную запись компьютера Active Directory, используя следующий синтаксис:

    New-ADComputer [-Name] <string> [-AccountPassword <SecureString>] [-AllowReversiblePasswordEncryption <System.Nullable[boolean]>] [-Description <string>] [-Enabled <System.Nullable[bool]>]
    

    Пример:

    New-ADComputer -Name EXCH2016ASA -AccountPassword (Read-Host 'Enter password' -AsSecureString) -Description 'Alternate Service Account credentials for Exchange' -Enabled:$True -SamAccountName EXCH2016ASA
    

    Где EXCH2016ASA — это имя учетной записи, описание учетных данных альтернативной учетной записи службы для Exchange — это все, что вы хотите, а значение параметра SamAccountName , в данном случае EXCH2016ASA, должно быть уникальным в вашем каталоге.

  3. С помощью командлета Set-ADComputer можно включить поддержку шифра AES 256, используемого в Kerberos, используя следующий синтаксис:

    Set-ADComputer [-Name] <string> [-add @{<attributename>="<value>"]
    

    Пример:

    Set-ADComputer EXCH2016ASA -add @{"msDS-SupportedEncryptionTypes"="28"}
    

    Где EXCH2016ASA — это имя учетной записи, а атрибут для изменения — msDS-SupportedEncryptionTypes с десятичным значением 28, что позволяет использовать следующие шифры: RC4-HMAC, AES128-CTS-HMAC-HMAC-SHA1-96, AES256-CTS-HMAC-SHA1-96.

Дополнительные сведения об этих командлетах см. в статьях Import-Module и New-ADComputer.

Сценарии с несколькими лесами

Если у вас есть развертывание между лесами или лесом ресурсов и у вас есть пользователи, которые находятся за пределами леса Active Directory, содержащего Exchange, необходимо настроить отношения доверия между лесами. Кроме того, для каждого леса в развертывании необходимо настроить правило маршрутизации, которое обеспечивает доверие между всеми суффиксами имен в лесу и между лесами. Дополнительные сведения об управлении отношениями доверия между лесами см. в разделе Настройка партнерских организаций.

Определение имен участников-служб для связи с учетными данными ASA

После создания учетных данных ASA необходимо связать имена субъектов-служб Exchange с учетными данными ASA. Список имен субъектов-служб Exchange зависит от текущей конфигурации, но должен содержать следующие имена:

  • http/: используйте это имя субъекта-службы для Outlook Anywhere, MAPI через HTTP, веб-служб Exchange, автообнаружения и автономной адресной книги.

Значения имени субъекта-службы должны соответствовать имени службы в подсистеме балансировки сетевой нагрузки, а не на отдельных серверах. Чтобы лучше определить используемые значения SPN, рассмотрите следующие сценарии:

В каждом из этих сценариев предполагается, что полные доменные имена с балансировкой нагрузки были развернуты для внутренних URL-адресов, внешних URL-адресов и внутренних URI-кодов автообнаружения, используемых серверами со службами клиентского доступа.

Одиночный сайт Active Directory

Если вы используете один сайт Active Directory, ваша среда может походить на изображенную на следующем рисунке:

несколько сайтов AD.

На основе полных доменных имен, используемых внутренними клиентами Outlook на предыдущем рисунке, необходимо связать следующие имена субъектов-служб с учетными данными ASA:

  • http/mail.corp.tailspintoys.com
  • http/autodiscover.corp.tailspintoys.com

Несколько сайтов Active Directory

Если вы используете несколько сайт Active Directory, ваша среда может походить на изображенную на следующем рисунке:

несколько сайтов AD.

На основе полных доменных имен, используемых клиентами Outlook на предыдущем рисунке, необходимо связать следующие имена субъектов-служб с учетными данными ASA, которые используются серверами почтовых ящиков, на которых запущены службы клиентского доступа в ADSite 1:

  • http/mail.corp.tailspintoys.com
  • http/autodiscover.corp.tailspintoys.com

Кроме того, необходимо связать следующие имена субъектов-служб с учетными данными ASA, которые используются серверами почтовых ящиков, на которых запущены службы клиентского доступа в ADSite 2:

  • http/mailsdc.corp.tailspintoys.com
  • http/autodiscoversdc.corp.tailspintoys.com

Настройка и проверка конфигурации учетных данных ASA на всех серверах со службами клиентского доступа

После создания учетной записи необходимо убедиться, что учетная запись реплицирована на все контроллеры домена AD DS. В частности, учетная запись должна присутствовать на каждом сервере со службами клиентского доступа, которые будут использовать учетные данные ASA. Затем настройте учетную запись как учетные данные ASA на всех серверах со службами клиентского доступа в развертывании.

Для этого используйте командную консоль Exchange, как описано в одной из следующих процедур:

  • Развертывание учетных данных ASA на первом сервере Exchange Server, на котором выполняются службы клиентского доступа
  • Развертывание учетных данных ASA на последующих серверах Exchange, на которых запущены службы клиентского доступа

Единственный поддерживаемый метод развертывания учетных данных ASA — использовать сценарий RollAlternateServiceAcountPassword.ps1. Дополнительные сведения и необходимые разрешения для запуска скрипта см. в статье Использование скрипта RollAlternateserviceAccountCredential.ps1 в оболочке. После выполнения этого сценария рекомендуем убедиться, что все целевые серверы правильно обновлены.

Развертывание учетных данных ASA на первом сервере Exchange Server, на котором запущены службы клиентского доступа.

  1. Откройте командную консоль Exchange на сервере Exchange 2016 или Exchange 2019.

  2. Измените каталоги на <Каталог> установки Exchange 2016\V15\Scripts.

  3. Выполните следующую команду, чтобы развернуть учетные данные ASA на первом сервере Exchange 2016 или Exchange 2019 со службами клиентского доступа:

    .\RollAlternateServiceAccountPassword.ps1 -ToSpecificServer cas-1.corp.tailspintoys.com -GenerateNewPasswordFor tailspin\EXCH2016ASA$
    
  4. На вопрос, изменять ли пароль для учетной записи альтернативной службы, выберите Да.

Ниже представлен пример выходных данных после запуска сценария RollAlternateServiceAccountPassword.ps1.

========== Starting at 01/12/2016 10:17:47 ==========
Creating a new session for implicit remoting of "Get-ExchangeServer" command...
Destination servers that will be updated:
Name                                                        PSComputerName
----                                                        --------------
cas-1                                                   cas-1.corp.tailspintoys.com
Credentials that will be pushed to every server in the specified scope (recent first):
UserName
Password
--------
--------
tailspin\EXCH2016ASA$
System.Security.SecureString
Prior to pushing new credentials, all existing credentials that are invalid or no longer work will be removed from  the destination servers.
Pushing credentials to server mbx-1
Setting a new password on Alternate Service Account in Active Directory
Password change
Do you want to change password for tailspin\EXCH2016ASA$ in Active Directory at this time?
[Y] Yes  [N] No  [S] Suspend  [?] Help (default is "Y"): y
Preparing to update Active Directory with a new password for tailspin\EXCH2016ASA$ ...
Resetting a password in the Active Directory for tailspin\EXCH2016ASA$ ...
New password was successfully set to Active Directory.
Retrieving the current Alternate Service Account configuration from servers in scope
Alternate Service Account properties:
StructuralObjectClass QualifiedUserName Last Pwd Update       SPNs
--------------------- ----------------- ---------------       ----
computer              tailspin\EXCH2016ASA$   1/12/2016 10:19:53 AM
Per-server Alternate Service Account configuration as of the time of script completion:
   Array: {mail.corp.tailspintoys.com}
Identity  AlternateServiceAccountConfiguration
--------  ------------------------------------
cas-1 Latest: 1/12/2016 10:19:22 AM, tailspin\EXCH2016ASA$
          ...
========== Finished at 01/12/2016 10:20:00 ==========
        THE SCRIPT HAS SUCCEEDED

Развертывание учетных данных ASA на другом сервере Exchange, на котором выполняются службы клиентского доступа

  1. Откройте командную консоль Exchange на сервере Exchange 2016 или Exchange 2019.

  2. Измените каталоги на <Каталог> установки Exchange 2016\V15\Scripts.

  3. Выполните следующую команду, чтобы развернуть учетные данные ASA на другом сервере Exchange 2016 или Exchange 2019 со службами клиентского доступа:

    .\RollAlternateServiceAccountPassword.ps1 -ToSpecificServer cas-2.corp.tailspintoys.com -CopyFrom cas-1.corp.tailspintoys.com
    
  4. Повторите шаг 3 для всех серверов со службами клиентского доступа, на которых нужно развернуть учетные данные ASA.

Ниже представлен пример выходных данных после запуска сценария RollAlternateServiceAccountPassword.ps1.

========== Starting at 01/12/2016 10:34:35 ==========
Destination servers that will be updated:
Name                                                        PSComputerName
----                                                        --------------
cas-2                                                   cas-2.corp.tailspintoys.com
Credentials that will be pushed to every server in the specified scope (recent first):
UserName
Password
--------
--------
tailspin\EXCH2016ASA$
System.Security.SecureString
Prior to pushing new credentials, all existing credentials will be removed from the destination servers.
Pushing credentials to server mbx-2
Retrieving the current Alternate Service Account configuration from servers in scope
Alternate Service Account properties:
StructuralObjectClass QualifiedUserName Last Pwd Update       SPNs
--------------------- ----------------- ---------------       ----
computer              tailspin\EXCH2016ASA$   1/12/2016 10:19:53 AM
Per-server Alternate Service Account configuration as of the time of script completion:
   Array: cas-2.corp.tailspintoys.com
Identity  AlternateServiceAccountConfiguration
--------  ------------------------------------
cas-2 Latest: 1/12/2016 10:37:59 AM, tailspin\EXCH2016ASA$
          ...
========== Finished at 01/12/2016 10:38:13 ==========
        THE SCRIPT HAS SUCCEEDED

Проверка развертывания учетных данных ASA

  • Откройте командную консоль Exchange на сервере Exchange 2016 или Exchange 2019.

  • Выполните следующую команду, чтобы проверить настройки на сервере со службами клиентского доступа:

    Get-ClientAccessServer CAS-3 -IncludeAlternateServiceAccountCredentialStatus | Format-List Name, AlternateServiceAccountConfiguration
    
  • Повторите шаг 2 на всех серверах со службами клиентского доступа, на которых нужно проверить развертывание учетных данных ASA.

Ниже приводится пример выходных данных после запуска команды Get-ClientAccessServer, если учетные данные ASA еще не были заданы.

Name                                 : CAS-1
AlternateServiceAccountConfiguration : Latest: 1/12/2016 10:19:22 AM, tailspin\EXCH2016ASA$
                                       Previous: <Not set>
                                          ...

Ниже приводится пример выходных данных после запуска команды Get-ClientAccessServer, если учетные данные ASA уже были заданы. Возвращаются учетные данные ASA, а также дата и время их установки.

Name                                 : CAS-3
AlternateServiceAccountConfiguration : Latest: 1/12/2016 10:19:22 AM, tailspin\EXCH2016ASA$
                                       Previous: 7/15/2015 12:58:35 PM, tailspin\oldSharedServiceAccountName$
                                          ...

Связывание имен участников-служб (SPN) с учетными данными ASA

Важно!

Не связывайте имена субъектов-служб с учетными данными ASA, пока не развернете эти учетные данные по крайней мере в одном Exchange Server, как описано выше в статье Развертывание учетных данных ASA на первом сервере Exchange Server, на котором запущены службы клиентского доступа. В противном случае выполнить проверку подлинности Kerberos не удастся.

Прежде чем связать имена субъектов-служб с учетными данными ASA, необходимо убедиться, что целевые имена субъектов-служб еще не связаны с другой учетной записью в лесу. Учетные данные ASA должны быть единственной учетной записью в лесу, с которой связаны эти имена субъектов-служб. Чтобы убедиться, что имена участников-служб не назначены другим учетным записям в лесу, выполните команду setspn в командной строке.

Проверка связи имени участника-службы с учетной записи в лесу с помощью команды setspn

  1. Нажмите кнопку Пуск. В поле Поиск введите командная строка, а затем в списке результатов выберите Командная строка.

  2. Введите следующую команду:

    setspn -F -Q <SPN>
    

    Где <SPN> — это имя участника-службы, которое требуется связать с учетными данными ASA. Например:

    setspn -F -Q http/mail.corp.tailspintoys.com
    

    Команда должна не возвратить никаких данных. Если она возвратит данные, значит, это имя участника службы уже сопоставлено с другой учетной записью. Повторите этот шаг один раз для каждого имени субъекта-службы, которое необходимо связать с учетными данными ASA.

Сопоставление имени участника-службы с учетными данными ASA с помощью команды setspn

  1. Нажмите кнопку Пуск. В поле Поиска введите Командная строка, а затем выберите Командная строка в списке результатов.

  2. Введите следующую команду:

    setspn -S <SPN> <Account>$
    

    Где <SPN> — это имя участника-службы, которое требуется связать с учетными данными ASA, а <Account> — это учетная запись, связанная с учетными данными ASA. Например:

    setspn -S http/mail.corp.tailspintoys.com tailspin\EXCH2016ASA$
    

    Выполните эту команду один раз для каждого имени субъекта-службы, которое нужно связать с учетными данными ASA.

Проверка связи имен участников-служб с учетными данными ASA с помощью команды setspn

  1. Нажмите кнопку Пуск. В поле Поиска введите Командная строка, а затем выберите Командная строка в списке результатов.

  2. Введите следующую команду:

    setspn -L <Account>$
    

    Где <Account> — это учетная запись, связанная с учетными данными ASA. Например:

    setspn -L tailspin\EXCH2016ASA$
    

    Эту команду необходимо выполнить только один раз.

Включение проверки подлинности Kerberos для клиентов Outlook

  1. Откройте командную консоль Exchange на сервере Exchange 2016 или Exchange 2019.

  2. Чтобы включить проверку подлинности Kerberos для клиентов Outlook Anywhere, выполните следующую команду на сервере Exchange 2016 или Exchange 2019, на котором выполняются службы клиентского доступа:

    Get-OutlookAnywhere -Server CAS-1 | Set-OutlookAnywhere -InternalClientAuthenticationMethod  Negotiate
    
  3. Чтобы включить проверку подлинности Kerberos для MAPI через HTTP-клиенты, выполните следующую команду на сервере Exchange 2016 или Exchange 2019 со службами клиентского доступа:

    Get-MapiVirtualDirectory -Server CAS-1 | Set-MapiVirtualDirectory -IISAuthenticationMethods Ntlm,Negotiate
    

    В гибридных средах с Exchange Online или при внутреннем использовании OAuth выполните следующие команды на сервере Exchange 2016 или Exchange 2019 со службами клиентского доступа:

    $mapidir = Get-MapiVirtualDirectory -Server CAS-1
    $mapidir | Set-MapiVirtualDirectory -IISAuthenticationMethods ($mapidir.IISAuthenticationMethods +='Negotiate')
    
  4. Повторите шаги 2 и 3 для каждого сервера Exchange 2016 или Exchange 2019 со службами клиентского доступа, для которых требуется включить проверку подлинности Kerberos.

Проверка проверки подлинности Kerberos клиента Exchange

После успешной настройки Kerberos и учетных данных ASA убедитесь, что клиенты могут успешно пройти проверку подлинности, как описано в этих задачах.

Проверка работы службы Microsoft Exchange Service Host

Служба узла службы Microsoft Exchange (MSExchangeServiceHost) на сервере, на котором выполняются службы клиентского доступа, отвечает за управление учетными данными ASA. Если эта служба не запущена, проверка подлинности Kerberos невозможна. По умолчанию служба запускается автоматически при включении компьютера.

Чтобы убедиться, что служба Microsoft Exchange Service Host запущена:

  1. Нажмите кнопку Пуск, введите services.msc и выберите services.msc из списка.

  2. В окне Службы найдите службу Microsoft Exchange Service Host.

  3. Состояние службы должно быть указано как Работает. Если состояние отличается от Работает, щелкните службу правой кнопкой мыши и выберите команду Пуск.

Проверка Kerberos на сервере, на котором запущены службы клиентского доступа

При настройке учетных данных ASA на каждом сервере, на котором выполняются службы клиентского доступа, вы выполнили командлет Set-ClientAccessServer . После выполнения этого командлета можно использовать журналы для проверки успешного подключения Kerberos.

Проверка правильности работы Kerberos с помощью файла журнала HttpProxy

  1. В текстовом редакторе перейдите к папке, где хранится журнал HttpProxy. По умолчанию этот файл находится в следующей папке:

    %ExchangeInstallPath%\Logging\HttpProxy\RpcHttp

  2. Откройте последний файл журнала и найдите слово Negotiate. Строка в файле журнала должна выглядеть примерно следующим образом:

    2014-02-19T13:30:49.219Z,e19d08f4-e04c-42da-a6be-b7484b396db0,15,0,775,22,,RpcHttp,mail.corp.tailspintoys.com,/rpc/rpcproxy.dll,,Negotiate,True,tailspin\Wendy,tailspintoys.com,MailboxGuid~ad44b1e0-e44f-4a16-9396-3a437f594f88,MSRPC,192.168.1.77,EXCH1,200,200,,RPC_OUT_DATA,Proxy,exch2.tailspintoys.com,15.00.0775.000,IntraForest,MailboxGuidWithDomain,,,,76,462,1,,1,1,,0,,0,,0,0,16272.3359,0,0,3,0,23,0,25,0,16280,1,16274,16230,16233,16234,16282,?ad44b1e0-e44f-4a16-9396-3a437f594f88@tailspintoys.com:6001,,BeginRequest=2014-02-19T13:30:32.946Z;BeginGetRequestStream=2014-02-19T13:30:32.946Z;OnRequestStreamReady=2014-02-19T13:30:32.946Z;BeginGetResponse=2014-02-19T13:30:32.946Z;OnResponseReady=2014-02-19T13:30:32.977Z;EndGetResponse=2014-02-19T13:30:32.977Z;,PossibleException=IOException;
    

    Если вы видите, что значение AuthenticationType равно Negotiate, сервер успешно создает подключения с проверкой подлинности Kerberos.

Обслуживание учетных данных ASA

Если необходимо периодически обновлять пароль для учетных данных ASA, выполните действия по настройке учетных данных ASA, описанные в этой статье. Также для регулярного обновления пароля можно настроить запланированную задачу. Отслеживайте выполнение этой запланированной задачи для проверки своевременного переключения паролей и предотвращения возможных простоев проверки подлинности.

Отключение проверки подлинности Kerberos

Чтобы настроить прекращение использования Kerberos на серверах со службами клиентского доступа, отключите или удалите имена субъектов-служб из учетных данных ASA. Если имена субъектов-служб удалены, проверка подлинности Kerberos не будет выполняться вашими клиентами, а клиенты, настроенные на использование проверки подлинности Negotiate, будут использовать NTLM. Клиенты, настроенные для использования только Kerberos, не смогут подключиться. После удаления имен субъектов-служб также следует удалить учетную запись.

Удаление учетных данных ASA

  1. Откройте командную консоль Exchange на сервере Exchange 2016 или Exchange 2019 и выполните следующую команду:

    Set-ClientAccessServer CAS-1 -RemoveAlternateServiceAccountCredentials
    
  2. Хотя и не сразу, но вам потребуется перезапустить все клиентские компьютеры, чтобы удалить кэш билетов Kerberos с компьютера.