Spec-Zone .ru
спецификации, руководства, описания, API
Содержание документации
Предыдущее Учебное руководство Учебное Введение и TOC Следующее Учебное руководство

Использование Утилиты Входа в систему JAAS и GSS-API Java для Безопасных Обменов сообщениями



Это учебное руководство представляет два примера приложения, чтобы демонстрировать использование GSS-API Java. Этот API разрешает безопасные обмены сообщениями между связывающимися приложениями. Вот демонстрационные приложения клиента и сервера, в которых Вы будете нуждаться для этого учебного руководства:


Отметьте: Это учебное руководство использует те же самые приложения клиента и сервера как Использование GSS-API Java для Безопасных Обменов сообщениями Без JAAS Программирование учебного руководства. В том учебном руководстве JAAS (Служба Аутентификации и авторизации Java) не требуется программирование. Вместо этого Вы позволяете базовому механизму решать, как получить учетные данные.
Это учебное руководство использует файлы политики и более сложный конфигурационный файл входа в систему. Программы выполняются с менеджером безопасности; в результате секретные операции безопасности не позволяются, если необходимые полномочия явно не предоставили. Это учебное руководство также демонстрирует, как авторизация JAAS добавляет центральное пользователем управление доступом, которое применяет управление, основанное на том, кто выполняет код - не только на том, что выполняет код.

Содержание:




Прежде, чем Вы Запустите: Рекомендуемое Чтение

В этом учебном руководстве GSS-API Java первый шаг является аутентификацией JAAS. Предыдущие учебные руководства, демонстрируемые использование JAAS для пользовательской аутентификации и авторизации, и представленные примеры файлов политики и конфигурационных файлов входа в систему (определение базовой технологии аутентификации, которая будет использоваться), что JAAS требует. Приложения во вводных учебных руководствах JAAS, Аутентификации JAAS и Авторизации JAAS, сделанной прямыми звонками в методы JAAS. Использование учебного руководства по Утилите Входа в систему JAAS показало использование утилиты, которая освобождает приложение от необходимости сделать это. Приложения клиента и сервера в текущем учебном руководстве также используют ту же самую утилиту, таким образом, мы рекомендуем, чтобы Вы считали учебное руководство по утилите входа в систему сначала.

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

Краткий обзор Приложений Клиента и сервера

Приложения для этого учебного руководства называют SampleClient и SampleServer.

Каждый вызывается, выполняя утилиту Login, предоставленную этим учебным руководством и передавая это как параметры имя приложения (SampleClient или SampleServer), сопровождаемый параметрами необходим приложению. Утилита Login использует LoginContext JAAS, чтобы аутентифицировать пользователя, использующего Kerberos. Наконец, утилита Login вызывает main метод класса приложений, в нашем случае также SampleClient или SampleServer, и передает приложение его параметры.

Вот сводка выполнения SampleClient и SampleServer приложения:

  1. Работайте SampleServer приложение, выполняя утилиту Login и передавая это как параметры имя"SampleServer"сопровождаемый параметрами за SampleServer программа. Утилита Login запрашивает Вас пароль для принципала это SampleServer должен работать как. (См. Имена Принципала Пользователя и Службы Kerberos.) После того, как аутентификация полна, SampleServer выполняется это:
    1. Читает его параметр, номер порта, что он должен слушать на для клиентских соединений.
    2. Создает ServerSocket для того, чтобы прислушаться к клиентским соединениям на том порту.
    3. Прислушивается к соединению.
  2. Работайте SampleClient приложение (возможно на различной машине), выполняя утилиту Login и передавая это как параметры имя"SampleClient"сопровождаемый параметрами за SampleClient программа. Утилита Login запрашивает Вас Ваше имя и пароль Kerberos. После того, как аутентификация полна, SampleClient выполняется. Это
    1. Читает его параметры: (1) имя принципала Kerberos, который представляет SampleServer. (См. Имена Принципала Пользователя и Службы Kerberos.) то, (2) имя узла (машина), на который SampleServer работает, и (3) номер порта на который SampleServer прислушивается к клиентским соединениям.
    2. Делает попытку сокетного соединения с SampleServer, использование узла и порта это передали как параметры.
  3. Сокетное соединение принимается SampleServer и оба приложения инициализируют DataInputStream и DataOutputStream от потоков входа и выхода сокета, чтобы использоваться для будущих обменов данными.
  4. SampleClient и SampleServer каждый инстанцирует GSSContext и устанавливает совместно используемый контекст, который включит последующим безопасным обменам данными.
  5. SampleClient и SampleServer может теперь надежно обмениваться сообщениями.
  6. Когда SampleClient и SampleServer делаются, обмениваясь сообщениями, они выполняют операции по зачистке местности.

Отметьте: Обратитесь к" SampleClient и SampleServer Код" раздел Использования GSS-API Java для Безопасных Обменов сообщениями Без JAAS Программирование учебного руководства для полного обсуждения кода используется в этом учебном руководстве.

Пользователь Kerberos и Имена Принципала Службы

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

Например, когда Вы работаете SampleClient Вас просят обеспечить Ваше имя пользователя. Ваше имя пользователя стиля Kerberos является просто именем пользователя, Вы были присвоены для аутентификации Kerberos. Это состоит из основного имени пользователя (как "mjones") сопровождаемый и Ваша область (как "mjones@KRBNT-OPERATIONS.EXAMPLE.COM").

Программа сервера как SampleServer как обычно полагают, предлагает "услугу" и выполняется от имени определенного "принципала службы." Имя принципала службы для SampleServer необходим в нескольких местах:

Всюду по этому документу, и в сопроводительном конфигурационном файле входа в систему и файлах политики,

service_principal@your_realm
используется в качестве заполнителя, который будет заменен подлинным именем, которое будет использоваться в Вашей среде. Любой принципал Kerberos может фактически использоваться для имени принципала службы. Так в целях испытать это учебное руководство, Вы могли использовать свое имя пользователя и в качестве клиентского имени пользователя и в качестве имени принципала службы.

В продуктивной среде системные администраторы обычно как серверы, которые будут выполнены, поскольку, определенные принципалы только и могут присвоить определенное имя, которое будет использоваться. Часто присвоенное имя принципала службы стиля Kerberos имеет форму

service_name/machine_name@realm; 

Например, у службы nfs, на которой работают машина, названная "вороном" в области под названием "KRBNT-OPERATIONS.EXAMPLE.COM", могло быть имя принципала службы

nfs/raven@KRBNT-OPERATIONS.EXAMPLE.COM

Такие многокомпонентные имена не требуются, как бы то ни было. Единственные имена компонентов, точно так же как таковые из пользовательских принципалов, могут использоваться. Например, установка могла бы использовать тот же самый принципал службы протокола передачи файлов ftp@realm для всех серверов протокола передачи файлов в той области, в то время как у другой установки могли бы быть различные принципалы протокола передачи файлов для различных серверов протокола передачи файлов, такой как ftp/host1@realm и ftp/host2@realm на машинах host1 и host2, соответственно.

Когда Область Требуется на Основные Имена

Если область пользователя или имени принципала службы является областью по умолчанию (см. Требования Kerberos), можно бросить область, когда Вы регистрируете в Kerberos (то есть, когда Вы запрашиваетесь Ваше имя пользователя). Таким образом, например, если Ваше имя пользователя "mjones@KRBNT-OPERATIONS.EXAMPLE.COM", и Вы работаете SampleClient, когда это запрашивает Ваше имя пользователя, Вы могли только определить "mjones", бросая область. Имя интерпретируется в контексте того, чтобы быть именем принципала Kerberos, и область по умолчанию добавляется, как необходимый.

Можно также бросить область, если основное имя будет преобразовано в GSSName GSSManager createName метод. Например, когда Вы работаете SampleClient, одним из параметров является имя принципала серверной службы. Можно определить имя без включения области, потому что SampleClient передает имя к такому createName метод, который добавляет область по умолчанию как необходимый.

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

Конфигурационный файл Входа в систему

Всякий раз, когда JAAS используется, конфигурация входа в систему обязана определять требуемую технологию аутентификации. (См. Конфигурационный файл Входа в систему JAAS для получения дополнительной информации о том, каков конфигурационный файл входа в систему.) Оба SampleClient и SampleServer может использовать тот же самый конфигурационный файл входа в систему, если тот файл содержит две записи, одну запись для клиентской стороны и один для серверной стороны.

Конфигурационный файл входа в систему csLogin.conf, используемый для этого учебного руководства, является следующим:

SampleClient {
  com.sun.security.auth.module.Krb5LoginModule required;
};

SampleServer {
  com.sun.security.auth.module.Krb5LoginModule required storeKey=true 
    principal="service_principal@your_realm";
};

Отметьте, что имя для каждой записи соответствует соответствующие имена классов для наших двух высокоуровневых приложений, SampleClient и SampleServer. Вспомните, что это - также имя, которое передают к утилите Login, которая выполняет операции JAAS для приложения. Та утилита ожидает, что имя записи будет искаться в Вашем конфигурационном файле входа в систему, чтобы быть тем же самым как именем, это передают.

Обе записи определяют, что Kerberos Sun V5 LoginModule должен использоваться, чтобы успешно аутентифицировать пользователя. Krb5LoginModule успешно выполняется, только если попытка войти в систему к Kerberos KDC как указанный объект успешна. В случае SampleClient, пользователь будет запрошен их имя и пароль. В случае SampleServer, имя уже предоставляется в этом конфигурационном файле входа в систему (указанный принципал, как описано ниже) и пользователь, работающий SampleServer только попросился относительно пароля для объекта, определенного тем именем. Они должны определить корректный пароль для аутентификации, чтобы успешно выполниться.

SampleServer запись storeKey=true указывает, что секретный ключ должен быть вычислен от пароля, обеспеченного во время входа в систему, и это должно быть сохранено в частных учетных данных Предмета, создаваемого в результате входа в систему. Этот ключ впоследствии используется во время взаимной аутентификации, устанавливая контекст защиты между SampleClient и SampleServer.

У Krb5LoginModule есть a principal опция, которая может использоваться, чтобы определить, что только указанный принципал (объект/пользователь) должен быть зарегистрирован для данной программы. Здесь, SampleClient запись не определяет принципал (хотя она могла, при желании), таким образом, пользователь запрашивается имя пользователя и пароль, и любой с допустимым именем пользователя и паролем может работать SampleClient. SampleServer, с другой стороны, указывает на определенный принципал потому что системные администраторы обычно как серверы, которые будут выполнены как определенные принципалы только. В этом случае, пользователь, работающий SampleServer запрашивается пароль того принципала и должен предоставить корректный для аутентификации, чтобы успешно выполниться.

Отметьте, что следует заменить "service_principal@your_realm" именем принципала службы, который представляет SampleServer. (См. Имена Принципала Пользователя и Службы Kerberos.)

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

Файлы Политики

Файл политики, используемый, работая SampleClient client.policy, и файл политики, используемый, работая SampleServer server.policy. Их содержание описывается ниже.

Клиентский Файл Политики

Полномочия, Необходимые Классами утилиты Login

Много полномочий требуются классами в Login.java (Вход в систему и MyAction). Как рекомендующийся в предыдущем учебном руководстве на использовании Входа в систему, мы создаем a Login.jar Файл JAR, содержащий Login.class и MyAction.class файлы и в client.policy файл политики мы предоставляем Login.jar AllPermission:

grant codebase "file:./Login.jar" {
   permission java.security.AllPermission;
};

Полномочия, Необходимые SampleClient

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

Разрешение, требуемое открыть сокетное соединение,

permission java.net.SocketPermission "*", "connect";

Можно заменить "*" именем хоста или IP-адресом машины это SampleServer будет работать.

Разрешение (я), требуемое инициировать установление контекста защиты, будет зависеть от базового механизма. Это учебное руководство использует Kerberos в качестве базового механизма, и для этого два javax.security.auth.kerberos.ServicePermissions требуются. ServicePermission содержит имя принципала службы и действие (или список действий). Чтобы инициировать установление контекста защиты, Вы нуждаетесь в двух ServicePermissions с действием "новичок", имена которого определяют:

Мы хотим предоставить полномочия определенному аутентифицируемому пользователю, выполняющемуся SampleClient, таким образом, мы определяем обоих SampleClient участок кода (в SampleClient.jar) и Основное обозначение, указывающее на имя пользователя и область для пользователя (Вы, человек, который будет работать SampleClient). (См., Как Вы Делаете Основанные на принципале Операторы Файла Политики? во втором учебном руководстве этого ряда для информации о файле политики grant операторы, которые включают Основные обозначения.)

Вот каноническая форма для grant оператор:

  grant CodeBase "file:./SampleClient.jar", 
    Principal javax.security.auth.kerberos.KerberosPrincipal 
        "your_user_name@your_realm" {

    permission java.net.SocketPermission "*", "connect";

    permission javax.security.auth.kerberos.ServicePermission
        "krbtgt/your_realm@your_realm", 
        "initiate";

    permission javax.security.auth.kerberos.ServicePermission
        "service_principal@your_realm", 
        "initiate";
};

Следует заменить своим именем пользователя Kerberos (полный с и область) для"your_user_name@your_realm". Например, если бы Ваше имя пользователя является "mjones", и Ваша область "KRBNT-OPERATIONS.EXAMPLE.COM", Вы использовали бы "mjones@KRBNT-OPERATIONS.EXAMPLE.COM" (полный с кавычками).

Следует также заменить своей областью в "krbtgt/your_realm@your_realm" и имени принципала службы для принципала службы представление сервера для"service_principal@your_realm". Предположите, что прежний "krbtgt/KRBNT-OPERATIONS.EXAMPLE.COM@KRBNT-OPERATIONS.EXAMPLE.COM", и последний "sample/raven.example.com@KRBNT-OPERATIONS.EXAMPLE.COM", и Ваше имя пользователя как определяется в предыдущем абзаце. Затем grant оператор был бы

grant CodeBase "file:./SampleClient.jar", 
    Principal javax.security.auth.kerberos.KerberosPrincipal 
        "mjones@KRBNT-OPERATIONS.EXAMPLE.COM" {

    permission java.net.SocketPermission "*", "connect";

    permission javax.security.auth.kerberos.ServicePermission
        "krbtgt/KRBNT-OPERATIONS.EXAMPLE.COM@KRBNT-OPERATIONS.EXAMPLE.COM", 
        "initiate";

    permission javax.security.auth.kerberos.ServicePermission
        "sample/raven.example.com@KRBNT-OPERATIONS.EXAMPLE.COM", 
        "initiate";
};

Файл Политики Сервера

Полномочия, Необходимые Классами Утилиты Входа в систему

grant оператор в файле политики сервера для классов Входа в систему является точно тем же самым как тем в клиентском файле политики, как описано в Полномочиях, Необходимых Классами Утилиты Входа в систему:

grant codebase "file:./Login.jar" {
   permission java.security.AllPermission;
};

Полномочия, Необходимые SampleServer

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

Разрешение, требуемое принять сокетные соединения,

permission java.net.SocketPermission "*", "accept";

Можно заменить "*" именем хоста или IP-адресом машины это SampleClient будет работать.

Разрешение, требуемое принять установление контекста защиты,

permission javax.security.auth.kerberos.ServicePermission
    "service_principal@your_realm", 
    "accept";
где "service_principal@your_realm" имя Kerberos принципала службы, который представляет SampleServer.

Мы хотим предоставить полномочия определенному аутентифицируемому пользователю, выполняющемуся SampleServer (принципал службы, который, как полагают, представлял SampleServer), таким образом, мы определяем обоих SampleServer участок кода (в SampleServer.jar) и Основное обозначение, указывающее на принципал службы. Предположите, что это имя "sample/raven.example.com@KRBNT-OPERATIONS.EXAMPLE.COM". Затем grant оператор был бы

  grant CodeBase "file:./SampleServer.jar" 
    Principal javax.security.auth.kerberos.KerberosPrincipal 
        "sample/raven.example.com@KRBNT-OPERATIONS.EXAMPLE.COM" {

    permission java.net.SocketPermission "*", "accept";

    permission javax.security.auth.kerberos.ServicePermission
        "sample/raven.example.com@KRBNT-OPERATIONS.EXAMPLE.COM", "accept";
};

Выполнение SampleClient и SampleServer Программы

Выполниться SampleClient и SampleServer программы, сделайте следующее:

Подготовиться SampleServer для Выполнения

Подготовиться SampleServer для выполнения сделайте следующее:

  1. Скопируйте следующие файлы в каталог, доступный машиной, на которой Вы будете работать SampleServer:
  2. Замена "service_principal@your_realm" в csLogin.conf с именем представления принципала службы SampleServer.
  3. В обоих местах это появляется, замена "service_principal@your_realm" в server.policy с именем Kerberos принципала службы, который представляет SampleServer. (То же самое имя как используемое в конфигурационном файле входа в систему.)
  4. Скомпилировать Login.java и SampleServer.java:
    javac Login.java SampleServer.java
    

    Отметьте это Login.java содержит два класса и таким образом компиляцию Login.java создает Login.class и MyAction.class.

  5. Создайте названный файл JAR Login.jar содержа Login.class and MyAction.class:
    jar -cvf Login.jar Login.class MyAction.class
    
  6. Создайте названный файл JAR SampleServer.jar содержа SampleServer.class:
    jar -cvf SampleServer.jar SampleServer.class
    

Подготовиться SampleClient для Выполнения

Подготовиться SampleClient для выполнения сделайте следующее:

  1. Скопируйте следующие файлы в каталог, доступный машиной, на которой Вы будете работать SampleClient:
  2. Части замены client.policy:
  3. Скомпилировать Login.java и SampleClient.java:
    javac Login.java SampleClient.java
    
  4. Создайте названный файл JAR Login.jar содержа Login.class and MyAction.class:
    jar -cvf Login.jar Login.class MyAction.class
    
  5. Создайте названный файл JAR SampleClient.jar содержа SampleClient.class:
    jar -cvf SampleClient.jar SampleClient.class
    

Выполниться SampleServer

Важно выполниться SampleServer прежде SampleClient потому что SampleClient попытается сделать сокетное соединение с SampleServer и это перестанет работать если SampleServer еще не выполняет и принимает сокетные соединения.

Выполниться SampleServer, убедитесь, что выполнили это на машине, на этом, как ожидают, будут работать. Это машинное имя (имя хоста) определяется как параметр SampleClient. Имя принципала службы появляется в нескольких местах, включая конфигурационный файл входа в систему и файлы политики.

Пойдите в каталог, в котором Вы подготовились SampleServer для выполнения. Выполнитесь Login класс, определяя

Вы передаете имя своего приложения (в этом случае,"SampleServer") как параметр Входу в систему. Вы тогда добавляете как параметры любые параметры, требуемые Вашим приложением, который в случае SampleServer единственный параметр, определяющий номер порта, который будет использоваться для того, чтобы прислушаться к клиентским соединениям. Выберите высокий номер порта вряд ли, чтобы использоваться для чего-либо еще. Пример был бы чем-то как 4444.

Ниже полные команды, чтобы использовать и для Microsoft Windows и для систем Unix. Единственная разница - то, что на системах Microsoft Windows Вы используете точки с запятой, чтобы разделить элементы пути к классу, в то время как Вы используете двоеточия с этой целью на системах Unix.

Важный: В этих командах следует заменить <port_number> с соответствующим номером порта, <your_realm> с Вашей областью Kerberos, и <your_kdc> с Вашим Kerberos KDC.

Вот команда для систем Microsoft Windows:

java -classpath Login.jar;SampleServer.jar 
 -Djava.security.manager 
 -Djava.security.krb5.realm=<your_realm> 
 -Djava.security.krb5.kdc=<your_kdc> 
 -Djava.security.policy=server.policy 
 -Djava.security.auth.login.config=csLogin.conf 
 Login SampleServer <port_number>

Вот команда для систем UNIX:

java -classpath Login.jar:SampleServer.jar 
 -Djava.security.manager 
 -Djava.security.krb5.realm=<your_realm> 
 -Djava.security.krb5.kdc=<your_kdc> 
 -Djava.security.policy=server.policy 
 -Djava.security.auth.login.config=csLogin.conf 
 Login SampleServer <port_number>

Введите полную команду на одной строке. Многократные строки используются здесь для четкости. Если команда является слишком длинной для Вашей системы, Вы, возможно, должны поместить это в.bat файл (для Microsoft Windows) или.sh файл (для UNIX) и затем петлять, чтобы выполнить команду.

Вы будете запрошены пароль Kerberos для принципала службы. Базовый механизм аутентификации Kerberos, определенный в конфигурационном файле входа в систему, зарегистрирует принципал службы в Kerberos. Как только аутентификация успешно завершается, SampleServer код будет выполняться от имени принципала службы. Это прислушается к сокетным соединениям на указанном порту.

Для предложений поиска и устранения неисправностей входа в систему см. Поиск и устранение неисправностей.

Выполниться SampleClient

Выполниться SampleClient, пойдите в каталог, в котором Вы подготовились SampleClient для выполнения. Затем выполнитесь Login класс, определяя

Передача во Вход в систему имя Вашего приложения ("SampleClient") сопровождаемый параметрами, требуемыми SampleClient. SampleClient параметры (1) имя Kerberos принципала службы, который представляет SampleServer, (2) то, имя узла (машина), на который SampleServer работает, и (3) номер порта на который SampleServer прислушивается к клиентским соединениям.

Ниже полные команды, чтобы использовать и для Microsoft Windows и для систем Unix.

Важный: В этих командах следует заменить <service_principal>, <host>, <port_number>, <your_realm>, и <your_kdc> с соответствующими значениями (и примечание, которому номер порта должен быть тем же самым как номером порта, который передают как параметр SampleServer). Эти значения не должны быть помещены в кавычки.

Вот команда для систем Microsoft Windows:

java -classpath Login.jar;SampleClient.jar 
 -Djava.security.manager 
 -Djava.security.krb5.realm=<your_realm> 
 -Djava.security.krb5.kdc=<your_kdc> 
 -Djava.security.policy=client.policy 
 -Djava.security.auth.login.config=csLogin.conf 
 Login SampleClient <service_principal> <host> <port_number>

Вот команда для систем UNIX:

java -classpath Login.jar:SampleClient.jar 
 -Djava.security.manager 
 -Djava.security.krb5.realm=<your_realm> 
 -Djava.security.krb5.kdc=<your_kdc> 
 -Djava.security.policy=client.policy 
 -Djava.security.auth.login.config=csLogin.conf 
 Login SampleClient <service_principal> <host> <port_number>

Введите полную команду на одной строке. Многократные строки используются здесь для четкости. Как с командой для того, чтобы выполниться SampleServer, если команда является слишком длинной, чтобы ввести непосредственно в Ваше окно команд, поместите это в.bat файл (Microsoft Windows) или.sh файл (UNIX) и затем выполните тот файл.

Когда запрошено, введите свое имя пользователя Kerberos и пароль. Базовый механизм аутентификации Kerberos, определенный в конфигурационном файле входа в систему, зарегистрирует Вас в Kerberos. Как только аутентификация успешно завершается, SampleClient код будет выполняться от имени Вас. Это запросит сокетное соединение с SampleServer. Однажды SampleServer принимает соединение, SampleClient и SampleServer установите совместно используемый контекст и затем обменивайтесь сообщениями как описано в этом учебном руководстве.

Для предложений поиска и устранения неисправностей входа в систему см. Поиск и устранение неисправностей.



Предыдущее Учебное руководство Учебное Введение и TOC Следующее Учебное руководство

Oracle и/или его филиалы Авторское право © 1993, 2011, Oracle и/или его филиалы. Все права защищены.
Свяжитесь с Нами