Поделиться через


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

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

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

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

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

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

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

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

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