Выбор параметров QOS безопасности
Параметры QOS безопасности передаются как часть параметра SecurityQOS , заданного функции RpcBindingSetAuthInfoEx . Используйте следующие рекомендации.
Использование взаимной проверки подлинности
Истинная взаимная проверка подлинности доступна только для определенных поставщиков безопасности: Negotiate (при согласовании Kerberos), Kerberos и Schannel. NTLM не поддерживает взаимную проверку подлинности. Для использования взаимной проверки подлинности требуется указать правильно сформированное имя участника-сервера. Многие разработчики используют следующую неисправную методику обеспечения безопасности: сервер вызывается для того, чтобы запросить имя участника (RpcMgmtInqServerPrincName), а затем они слепо запрашивают взаимную проверку подлинности с использованием этого имени участника. Такой подход нарушает всю идею взаимной проверки подлинности; Идея взаимной проверки подлинности заключается в том, что вызываются только определенные серверы, так как они являются доверенными для анализа и обработки данных. Используя описанную выше неправовую методику безопасности, разработчики предоставляют свои данные любому достаточно умному, чтобы вернуть свое имя.
Например, если клиентское программное обеспечение должно вызывать только сервер, работающий под учетными записями Joe, Pete или Alice, необходимо вызвать функцию RpcMgmtInqServerPrincName и проверить имя, отправленное обратно. Если это Джо, Пит или Алиса, следует запросить взаимную проверку подлинности с использованием имени субъекта-сервера. Это гарантирует, что обе части беседы переходят к одному и тому же субъекту.
Если клиентское программное обеспечение должно вызывать службу, запущенную только под учетной записью Joe, непосредственно создайте имя субъекта сервера Joe и выполните вызов. Если сервер — не Joe, вызов просто завершится ошибкой.
Во многих случаях службы выполняются как системные службы Windows, что означает, что они выполняются под учетной записью компьютера. По-прежнему рекомендуется использовать взаимную проверку подлинности и создание имени субъекта-сервера.
Используйте самый низкий тип олицетворения, который позволяет вызову пройти
Эта рекомендация достаточно объяснима. Даже если используется взаимная проверка подлинности, не предоставляйте серверу больше прав, чем необходимо; допустимый сервер может быть скомпрометирован, и даже если отправляемые вами данные в таких случаях попадают в чужие руки, по крайней мере сервер не сможет получить доступ к другим данным в сети от вашего имени. Некоторые серверы отклоняют вызов, который не имеет достаточных сведений для определения и, возможно, олицетворения вызывающего абонента. Кроме того, имейте в виду, что некоторые последовательности протоколов поддерживают безопасность на уровне транспорта (ncacn_np и ncalrpc). В таких случаях сервер всегда может олицетворить вас, если при создании дескриптора привязки вы укажете достаточно высокий уровень олицетворения с помощью параметра NetworkOptions .
Наконец, некоторые поставщики безопасности или транспорты могут прозрачно повысить уровень ImpersonationType до более высокого уровня, чем указанный. При разработке программы убедитесь, что вы пытаетесь выполнить вызовы с предполагаемым типом impersonationType и проверка, получается ли на сервере более высокий уровень ImpersonationType.