Требуется ли SPN при использовании Kerberos с DCOM? - PullRequest
2 голосов
/ 02 февраля 2009

Я использую DCOM для предоставления различных сервисов приложений в сети Windows, используя Kerberos для обработки аутентификации. Система нормально работает нормально, но у меня возникают проблемы с доступом к сервису из отдельного (доверенного) домена. В частности, служба не может выполнить обратные вызовы клиентскому приложению, получая ошибку «Произошла ошибка, связанная с пакетом безопасности». Кроме того, если я настрою службу для особой проверки подлинности Kerberos (вместо использования SNEGO /gotiate), клиент не сможет даже вызвать сервер (снова получая сообщение «Произошла ошибка, специфичная для пакета безопасности»).

Смущает то, что все годы работали без проблем. Тем не менее, некоторые вещи здесь отличаются от того, что мы делали раньше. Во-первых, задействованные серверы работают под управлением Windows 2008, которую я ранее не использовал. Кроме того, как отмечалось выше, ошибки возникают только тогда, когда к службе обращаются из учетной записи из отдельного домена, и предыдущее использование никогда не пыталось это сделать.

Теперь к вопросу: я не использую SPN (имя участника службы) для этой службы DCOM, но некоторые ошибки и журналы событий заставляют меня думать, что это может быть проблемой. Однако все документы, которые я нашел, неясно, правильно ли это, или как я бы настроил SPN, если мне это нужно. Кто-нибудь знает наверняка, является ли SPN тем, чего мне не хватает здесь? Если так, можете ли вы указать мне, как это должно быть сделано?

Дополнительные сведения:

Для сценария, в котором сервер настроен на принудительную аутентификацию Kerberos, включение Расширенная отладка RPC дает некоторые дополнительные подсказки. Клиент может успешно подключиться с помощью CoCreateInstanceEx, но вызовы интерфейса службы завершаются неудачно, как указано выше. Записи ошибок RPC показывают ошибку в местоположении 140, и код ошибки - 0x80090303 («Указанная цель неизвестна или недоступна»), а третий параметр для этой записи - пустая строка. Это указывает на отсутствующий SPN как на виновника.

Ответы [ 3 ]

1 голос
/ 18 марта 2009

Для чего стоит Kerberos по определению требует SPN. Возможно, вы сможете использовать встроенный SPNS (host /) и различные варианты, которые подразумевает хост (этот перевод псевдонимов хранится в AD, но, судя по всему, я не могу найти список статей, где это найдено).

Начну с рассмотрения междоменной аутентификации. С Kerberos это может быть сложно. Сначала я включил бы полное протоколирование Kerberos как на клиенте, так и на сервере, и посмотрел, получилось ли что-нибудь.

1 голос
/ 07 июля 2015

Я сталкивался с этой ошибкой при попытке создать экземпляр удаленного COM-объекта. Мы можем столкнуться с этой ошибкой, если во время вызова CoInitializeSecurity () клиент использует уровень олицетворения «Делегат», а служба COM + работает под учетной записью пользователя, у которой нет разрешения «делегирование» на уровне домена. *

1 голос
/ 05 февраля 2009

Редактировать : Похоже, я могу ошибаться по этому поводу. По крайней мере, один веб-сайт, который я обнаружил, утверждает, что DCOM автоматически обрабатывает имена SPN для вас (см. Внизу страницы), и я подтвердил, что клиенты могут успешно подключиться, если они требуют аутентификацию Kerberos и используют "host / [computername] "как SPN.


Похоже, что SPN требуется для службы, если вам явно требуется проверка подлинности Kerberos при вызове CoInitializeSecurity в процессе сервера DCOM. Для меня звонок выглядел так:

Предупреждение. Не копируйте этот код напрямую, не убедившись, что значения соответствуют вашим требованиям безопасности.

SOLE_AUTHENTICATION_SERVICE sas;
sas.dwAuthnSvc = RPC_C_AUTHN_GSS_KERBEROS;
sas.dwAuthzSvc = RPC_C_AUTHZ_NONE;
sas.pPrincipalName = L"myservice/mymachine";
sas.hr = S_OK;
CoInitializeSecurity( 0, 1, &sas, 0, RPC_C_AUTHN_LEVEL_DEFAULT,
    RPC_C_IMP_LEVEL_DEFAULT, 0, EOAC_NONE, 0 );

SPN можно настроить с помощью setspn, как показано ниже:

setspn -A myservice/mymachine serviceusername

(подробности см. В документации setspn).

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

...