Spec-Zone .ru
спецификации, руководства, описания, API
|
Это учебное руководство представляет два примера приложения, чтобы демонстрировать использование GSS-API Java. Этот API разрешает безопасные обмены сообщениями между связывающимися приложениями. Вот демонстрационные приложения клиента и сервера, в которых Вы будете нуждаться для этого учебного руководства:
Содержание:
SampleServer
ПрограммыКак со всеми учебными руководствами в этом ряду, базовая технология, используемая, чтобы поддерживать аутентификацию и безопасную передачу для приложений в этом учебном руководстве, Kerberos. См. Требования Kerberos.
Приложения для этого учебного руководства называют SampleClient
и SampleServer
.
Каждый вызывается, выполняя утилиту Login, предоставленную этим учебным руководством и передавая это как параметры имя приложения (SampleClient
или SampleServer
), сопровождаемый параметрами необходим приложению. Утилита Login использует LoginContext JAAS, чтобы аутентифицировать пользователя, использующего Kerberos. Наконец, утилита Login вызывает main
метод класса приложений, в нашем случае также SampleClient
или SampleServer
, и передает приложение его параметры.
Вот сводка выполнения SampleClient
и SampleServer
приложения:
SampleServer
приложение, выполняя утилиту Login и передавая это как параметры имя"SampleServer
"сопровождаемый параметрами за SampleServer
программа. Утилита Login запрашивает Вас пароль для принципала это SampleServer
должен работать как. (См. Имена Принципала Пользователя и Службы Kerberos.) После того, как аутентификация полна, SampleServer
выполняется это: SampleClient
приложение (возможно на различной машине), выполняя утилиту Login и передавая это как параметры имя"SampleClient
"сопровождаемый параметрами за SampleClient
программа. Утилита Login запрашивает Вас Ваше имя и пароль Kerberos. После того, как аутентификация полна, SampleClient
выполняется. Это SampleServer
. (См. Имена Принципала Пользователя и Службы Kerberos.) то, (2) имя узла (машина), на который SampleServer
работает, и (3) номер порта на который SampleServer
прислушивается к клиентским соединениям.SampleServer
, использование узла и порта это передали как параметры.SampleServer
и оба приложения инициализируют DataInputStream и DataOutputStream от потоков входа и выхода сокета, чтобы использоваться для будущих обменов данными.SampleClient
и SampleServer
каждый инстанцирует GSSContext и устанавливает совместно используемый контекст, который включит последующим безопасным обменам данными.SampleClient
и SampleServer
может теперь надежно обмениваться сообщениями.SampleClient
и SampleServer
делаются, обмениваясь сообщениями, они выполняют операции по зачистке местности.SampleClient
и SampleServer
Код" раздел Использования GSS-API Java для Безопасных Обменов сообщениями Без JAAS Программирование учебного руководства для полного обсуждения кода используется в этом учебном руководстве. Начиная с базовой аутентификации и безопасной коммуникационной технологии, используемой этим учебным руководством, Kerberos V5, мы используем имена принципала стиля Kerberos везде, где пользователь или служба вызываются.
Например, когда Вы работаете SampleClient
Вас просят обеспечить Ваше имя пользователя. Ваше имя пользователя стиля Kerberos является просто именем пользователя, Вы были присвоены для аутентификации Kerberos. Это состоит из основного имени пользователя (как "mjones") сопровождаемый и Ваша область (как "mjones@KRBNT-OPERATIONS.EXAMPLE.COM").
Программа сервера как SampleServer
как обычно полагают, предлагает "услугу" и выполняется от имени определенного "принципала службы." Имя принципала службы для SampleServer
необходим в нескольких местах:
SampleServer
следует войти в систему как соответствующий принципал службы. Конфигурационный файл входа в систему для этого учебного руководства фактически определяет имя принципала службы (как опция к Krb5LoginModule), таким образом, аутентификация JAAS (сделанный утилитой Login) только просит, чтобы Вы определили пароль для того принципала службы. Если Вы определяете корректный пароль, аутентификация успешна, Предмет создается содержащий Принципал с именем принципала службы, и что Предмет связывается с новым контекстом управления доступом. Впоследствии выполняемый код ( SampleServer
код), как, полагают, выполняется от имени указанного принципала.SampleClient
, одним из параметров является имя принципала службы. Это необходимо так SampleClient
может инициировать установление контекста защиты с соответствующей службой.Всюду по этому документу, и в сопроводительном конфигурационном файле входа в систему и файлах политики,
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.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
код делает два типа операций, для которых требуются полномочия. Это
SampleServer
приложение.SampleServer
.Разрешение, требуемое открыть сокетное соединение,
permission java.net.SocketPermission "*", "connect";
Можно заменить "*" именем хоста или IP-адресом машины это SampleServer
будет работать.
Разрешение (я), требуемое инициировать установление контекста защиты, будет зависеть от базового механизма. Это учебное руководство использует Kerberos в качестве базового механизма, и для этого два javax.security.auth.kerberos.ServicePermission
s требуются. ServicePermission содержит имя принципала службы и действие (или список действий). Чтобы инициировать установление контекста защиты, Вы нуждаетесь в двух ServicePermissions с действием "новичок", имена которого определяют:
SampleServer
. (См. Имена Принципала Пользователя и Службы Kerberos.) Предоставление этого разрешения позволяет Вам взаимодействовать со службой, SampleServer
, использование Kerberos.Мы хотим предоставить полномочия определенному аутентифицируемому пользователю, выполняющемуся 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
для ВыполненияSampleClient
для ВыполненияSampleServer
SampleClient
SampleServer
для ВыполненияПодготовиться SampleServer
для выполнения сделайте следующее:
SampleServer
: csLogin.conf
с именем представления принципала службы SampleServer
.server.policy
с именем Kerberos принципала службы, который представляет SampleServer
. (То же самое имя как используемое в конфигурационном файле входа в систему.)Login.java
и SampleServer.java
: javac Login.java SampleServer.java
Отметьте это Login.java
содержит два класса и таким образом компиляцию Login.java
создает Login.class
и MyAction.class
.
Login.jar
содержа Login.class and MyAction.class
: jar -cvf Login.jar Login.class MyAction.class
SampleServer.jar
содержа SampleServer.class
: jar -cvf SampleServer.jar SampleServer.class
SampleClient
для ВыполненияПодготовиться SampleClient
для выполнения сделайте следующее:
SampleClient
: client.policy
: your_realm
в "krbtgt/your_realm@your_realm" с Вашей областью.SampleServer
.Login.java
и SampleClient.java
: javac Login.java SampleClient.java
Login.jar
содержа Login.class and MyAction.class
: jar -cvf Login.jar Login.class MyAction.class
SampleClient.jar
содержа SampleClient.class
: jar -cvf SampleClient.jar SampleClient.class
SampleServer
Важно выполниться SampleServer
прежде SampleClient
потому что SampleClient
попытается сделать сокетное соединение с SampleServer
и это перестанет работать если SampleServer
еще не выполняет и принимает сокетные соединения.
Выполниться SampleServer
, убедитесь, что выполнили это на машине, на этом, как ожидают, будут работать. Это машинное имя (имя хоста) определяется как параметр SampleClient
. Имя принципала службы появляется в нескольких местах, включая конфигурационный файл входа в систему и файлы политики.
Пойдите в каталог, в котором Вы подготовились SampleServer
для выполнения. Выполнитесь Login
класс, определяя
-classpath
пункт, что классы должны разыскиваться в Login.jar
и SampleServer.jar
Файлы JAR,-Djava.security.manager
то, что менеджер безопасности должен быть установлен,-Djava.security.krb5.realm=<your_realm>
то, что Ваша область Kerberos является определенной той. Например, если Ваша область "KRBNT-OPERATIONS.EXAMPLE.COM", Вы поместили -Djava.security.krb5.realm=KRBNT-OPERATIONS.EXAMPLE.COM
.-Djava.security.krb5.kdc=<your_kdc>
то, что Ваш Kerberos KDC является определенным тем. Например, если Ваш KDC "samplekdc.example.com", Вы поместили -Djava.security.krb5.kdc=samplekdc.example.com
.-Djava.security.policy=server.policy
то, что файл политики, который будет использоваться, server.policy
, и-Djava.security.auth.login.config=csLogin.conf
то, что конфигурационный файл входа в систему, который будет использоваться, csLogin.conf
.Вы передаете имя своего приложения (в этом случае,"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
класс, определяя
-classpath
пункт, что классы должны разыскиваться в Login.jar
и SampleClient.jar
Файлы JAR,-Djava.security.manager
то, что менеджер безопасности должен быть установлен,-Djava.security.krb5.realm=<your_realm>
то, что Ваша область Kerberos является определенной той.-Djava.security.krb5.kdc=<your_kdc>
то, что Ваш Kerberos KDC является определенным тем.-Djava.security.policy=client.policy
то, что файл политики, который будет использоваться, client.policy
, и-Djava.security.auth.login.config=csLogin.conf
то, что конфигурационный файл входа в систему, который будет использоваться, csLogin.conf
.Передача во Вход в систему имя Вашего приложения ("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
установите совместно используемый контекст и затем обменивайтесь сообщениями как описано в этом учебном руководстве.
Для предложений поиска и устранения неисправностей входа в систему см. Поиск и устранение неисправностей.