Имена субъектов

Чтобы клиент создавал сеанс с взаимной проверкой подлинности с помощью серверной программы, он должен указать ожидаемое имя участника сервера. Для некоторых протоколов, таких как Kerberos, требуется правильное имя субъекта-сервера для любого сеанса, прошедшего проверку подлинности. Субъект — это сущность, распознаемая системой безопасности. Сюда входят пользователи-люди, а также системные службы. Все имена субъектов имеют одинаковый формат для заданного поставщика поддержки безопасности (SSP). Поставщик общих служб — это программный модуль, который выполняет проверку безопасности. Дополнительные сведения см. в статье Общие сведения об архитектуре SSPI. Для обеспечения единообразия поставщик безопасности обычно присваивает системным службам имена, аналогичные именам пользователей. В некоторых поставщиках безопасности системные службы могут не иметь имени участника.

Сервер регистрирует свое имя участника для поставщика безопасности с помощью функции RpcServerRegisterAuthInfo . Для каждого поставщика безопасности можно использовать только одно имя субъекта-сервера. Если зарегистрировано несколько имен, одно из них выбирается и используется случайным образом. Поставщик общих служб определяет формат имени субъекта. Например, поставщики SSP Kerberos/Negotiate для системной службы выглядят примерно так: machine_name$@childdomain.parentdomain1.parentdomain2.COM.

Рекомендуемая процедура создания имен субъектов — использовать задокументированные API (например, функцию DsMakeSpn ), а не объединять имя субъекта из строк. Использование задокументированных API повышает переносимость между разными средами развертывания и исключает возможность возникновения ошибок.

Указание неправильного имени участника может помешать клиенту и серверу установить сеанс, прошедший проверку подлинности. SCHANNEL SSP принимает имена субъектов в двух формах:

  • Первая форма имени участника SCHANNEL — это форма msstd . Имена в форме msstd обычно следуют шаблону msstd:servername@serverdomain.com. Это свойство называется именем электронной почты. Если сертификат содержит свойство имя электронной почты и знак @, имя участника — msstd:email name. В противном случае он должен содержать свойство общего имени. Внутренние обратные косые черти удвояются, как и в привязках строк.
  • Вторая форма имени участника SCHANNEL — это полная форма. Это серия имен, совместимых с RFC1779, ограниченных угловыми скобками и разделенных обратными косыми чертами. Обычно он следует шаблону fullsic:\<\Authority\SubAuthority\.....\Person> или fullsic:\<Authority\SubAuthority\.....\ServerProgram>.

Если имя не соответствует сертификату, возвращается ERROR_ACCESS_DENIED. Если формат имени недопустим, SCHANNEL SSP возвращает код ERROR_INVALID_PARAMETER.

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

Запрос имени сервера таким образом не является безопасным и его следует избегать. Для проверки подлинности сервера клиентская программа должна знать, к какому серверу она подключается, и создать имя участника сервера с нуля.