Подтвердить что ты не робот

Как использовать gssapi kerberos в кросс-платформенных программах клиентского сервера c/С++?

Мне пришлось "спорадически" работать с Heimdal/MIT Gssapi для аутентификации Kerberos за последние пару лет. Я должен был создать приложение, которое должно было использоваться как веб-сервис, работающий в ящике Linux, и обслуживать клиентские приложения, такие как браузеры, работающие на компьютерах Windows и/или Linux и рабочих станциях. Наверняка не самые простые звери, чтобы приручить. В конце концов, когда я обобщал свою работу, я мог записать, что трудности возникли из-за проблем в разных измерениях. Начало работы с программированием gssapi действительно является проблемой только из-за плохой документации и практически несуществующих учебников. Googling в основном приводит либо к теоретической дискуссии о том, что такое kerberos, либо приводит к содержанию, написанному с презумпцией того, что вы уже знаете все, кроме какой-то определенной семантической проблемы. Некоторые действительно хорошие хаки здесь способствовали мне, поэтому я полагаю, что было бы хорошей идеей обобщить материал с точки зрения разработчика и поделиться им здесь как с какой-то вики, чтобы вернуть что-то в этом фантастическом месте, и другие программисты.

На самом деле не делал вики, как раньше, и я, безусловно, не имею никаких полномочий в GSSAPI или Kerberos, поэтому, пожалуйста, будьте добрыми, но более того, пожалуйста, внесите свой вклад и исправьте мои ошибки. Редакторы сайтов, я рассчитываю, что вы сделаете свою магию;)

Успешное выполнение вашего проекта потребует трех конкретных действий:

  • Настройка тестовой среды
  • Настройка ваших библиотек
  • Ваш код

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

Ok Итак, начнем с начала.

Неизбежная теория для новичков GSSAPI помогает клиентскому приложению предоставлять учетные данные для того, чтобы сервер авторитетно идентифицировал пользователя. Крайне полезно, потому что серверные приложения могут модулировать свои отклик, если они пожелают, как пользователь. Естественно поэтому и то и другое - клиентское и серверное приложения должны быть защищены, или, как некоторые из них будут сообщать о знании kerberos.

Аутентификация на основе Kerberos требует как клиентских, так и серверных приложений быть членами Kerberos Realm. KDC (Kerberos Domain Controller) - это назначенный орган, который управляет сферой. Серверы Microsoft AD являются одним из наиболее популярных примеров KDC, хотя вы, конечно, можете использовать KDC * NIX. Но, безусловно, без KDC вообще не может быть бизнеса Kerberos. Настольные компьютеры, серверы и рабочие станции, подключенные к домену, идентифицируют друг друга, пока все они остаются присоединенными к домену.

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

Kerberos Authentication в основном работает через "билеты (или жетоны)". Когда член присоединяется к царству, KDC "предоставляет токены" каждому из них. Эти жетоны уникальны; время и полное доменное имя являются важными факторами для этих билетов.

Прежде чем вы начнете думать о самой первой строке своего кода, убедитесь, что у вас есть эти два права:

Pitfall # 1. Когда вы настраиваете среду разработки и тестирования, убедитесь, что все протестировано и адресовано как полное доменное имя. Например, если вы хотите проверить подключение, пинг с использованием полного доменного имени, а не IP. Излишне говорить, что они обязательно должны иметь такую ​​же конфигурацию службы DNS.

Pitfall # 2 Убедитесь, что все хост-системы, на которых запущен ваш KDC, клиентское программное обеспечение, серверное программное обеспечение, имеют одинаковый сервер времени. Синхронизация времени - это то, что забывается, и осознает, что он неспособен после много раскалывания волос и головокружительных!

Оба, клиентские и серверные приложения NEED kerberos keytabs. Поэтому, если ваше приложение будет запущено на хосте * NIX и будет частью домена Microsoft, вам нужно создать генерируемый ключ kerberos, прежде чем мы начнем смотреть на остальные подготовительные шаги для программирования gss.

Пошаговое руководство по Kerberos 5 (krb5 1.0) Взаимодействие at является абсолютным обязательным чтением.

Руководство по программированию GSS-APIотличная закладка.

В зависимости от вашего дистрибутива * NIX вы можете установить заголовки и библиотеки для создания своего кода. Однако мое предложение состоит в том, чтобы загрузить источник и построить его самостоятельно. Да, вы, возможно, не поймете это правильно, но это, безусловно, стоит того.

Pitfall # 3 Убедитесь, что ваше приложение запущено в среде, поддерживающей Kerberos. Я действительно усвоил это, но, может быть, потому, что я не настолько умный. На моих самых ранних этапах программирования программирования gssapi я обнаружил, что ключевые слова kerberos абсолютно необходимы для того, чтобы сделать приложение kerberos известным. Но я просто не мог найти ничего о том, как загрузить эти keytab в моем приложении. Ты знаешь почему?!! Потому что такой апи не существует!!! Потому что: приложение должно запускаться в среде, которая знает о keytabs. Хорошо, позвольте мне сделать это просто: ваше приложение, которое должно выполнять вещи GSSAPI/Kerberos, должно запускаться после того, как вы установили переменную среды KRB5_KTNAME на путь, в котором вы сохранили keytabs. Поэтому либо вы делаете что-то вроде:

export KRB5_KTNAME=<path/to/your/keytab>

или использовать setenv для установки KRB5_KTNAME в вашем приложении достаточно, прежде чем будет запущена первая строка вашего кода, использующая gssapi.

Теперь мы готовы делать необходимые вещи в коде приложения.

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

Может ли кто-нибудь пролить свет на это?

4b9b3361