Вопрос по java – Как включить аутентификацию Kerberos для удаленного вызова EJB в WebSphere?

14

Мое приложение представляет собой автономный клиент Swing, вызывающий EJB-компоненты без состояния, благодаря классическому поиску JNDI и вызовам методов RMI-IIOP. Он запускается как приложение Java WebStart. Моя цель - получить идентификационные данные пользователя клиента изEJBContext сgetCallerPrincipal метод благодаря единому входу Kerberos между рабочей станцией Windows, ActiveDirectory и сервером WebSphere, работающим в Linux.

Я уже успешно настроил свою ячейку WebSphere в режиме сетевого развертывания для поддержки аутентификации Kerberosблагодаря документации инфоцентра.

И то и другоеkrb5.conf а такжеkrb5.keytab файлы в порядке и проверены с обоими Linuxkinit, klist а такжеwsadmin, $AdminTask validateKrbConfig ответыtrue.

настройка клиента относится только к JAASlogin.config файл для включения с помощью свойства системы команд. Моя интуиция подсказывает мне, что этого недостаточно.

Но теперь я не нахожу больше информации для завершения тестового примера:

how the JNDI initial context environment must be setup to trigger Kerberos negotiation ? if there are other requirements on server-side like protect my EJB with a role (JBoss does not require it for instance) ?

Update

Как не работает клиентский контейнер JavaEE с./launchClientЯ установил в моем JNLP необходимые свойства для чтенияsas.client.props и конфигурация входа в систему JAAS:

<property name="java.security.auth.login.config" value="C:\temp\wsjaas_client.config"/>
<property name="com.ibm.CORBA.ConfigURL" value="C:\temp\sas.client.props"/>

мойwsjaas_client.config для Oracle Java, поэтому он содержит:

WSKRB5Login{
    com.sun.security.auth.module.Krb5LoginModule required
       debug=true useTicketCache=true doNotPrompt=true;
};

мойsas.client.props содержит:

com.ibm.CORBA.securityEnabled=true
com.ibm.CORBA.authenticationTarget=KRB5
com.ibm.CORBA.loginSource=krb5Ccache
com.ibm.CORBA.loginUserid=
com.ibm.CORBA.loginPassword=
com.ibm.CORBA.krb5CcacheFile=
com.ibm.CORBA.krb5ConfigFile=C:\\temp\\krb5.conf

На данный момент аутентификация Kerberos не запускается: для SPN нет TGSWAS/myserver.mydomain.com в моем кеше Kerberos (с рабочих станций Windows или Linux) и JNDI-соединение все еще устанавливается анонимно.

Нет сообщения об ошибке, нет предупреждения и, наконец, нет принципала. Как мне диагностировать то, что неправильно или не хватает?

Update 2012/06/20

Вот несколько шагов вперед. В моем приложении JNLP, работающем с Oracle Java, я установил следующие свойства, чтобы использовать IBM ORB и включить полную информацию трассировки и отладки:

<property name="org.omg.CORBA.ORBSingletonClass" value="com.ibm.rmi.corba.ORBSingleton"/>
<property name="org.omg.CORBA.ORBClass" value="com.ibm.CORBA.iiop.ORB"/>
<property name="traceSettingsFile" value="C:\temp\TraceSettings.properties"/>

ФайлTraceSettings.properties содержит

traceFileName=c:\\temp\\traces.log
ORBRas=all=enabled
SASRas=all=enabled
com.ibm.*=all=enabled

Даже после прочтения больших частейБезопасность WebSphere 7 IBM RedBook Я все еще не могу получить аутентификацию Kerberos триггера CSIv2 со стороны клиента.

Ваш Ответ

3   ответа
4

которые вы выполнили, вы сконфигурировали свой sas.client.props так, как вы указали в ссылке на установку клиента?

Вы можете проверить RedBookРеализация Kerberos в среде сервера приложений WebSphere примеры того, как сделать эту конфигурацию, а также оставшуюся конфигурацию для Application Client.

В разделе 13.5 (13.5 Настройка клиента приложения Java EE) приводятся примеры настройки среды выполнения толстого клиента, включая файл sas.client.props.

Error: User Rate Limit Exceeded Yves Martin
Error: User Rate Limit Exceeded Yves Martin
Error: User Rate Limit Exceeded Yves Martin
6

GSS-API / аутентификация Kerberos v5 руководство, вы должны пройти аутентификацию в Kerberos, прежде чем сделать свой вызов контексту JNDI. Выполнив настройку Kerberos, вы настраиваете начальный контекст следующим образом:

When creating the initial context, set the Context.SECURITY_AUTHENTICATION(in the API reference documentation) environment property to the string "GSSAPI".

Я имел дело с получением Java-клиента для использования Kerberos в прошлом (хотя не с JNDI). Вот мой подход к устранению необходимости в опциях JVM и локальных файлах конфигурации на стороне клиента (вызовите этот код до того, как клиент попытается аутентифицироваться):

public static void initKerberosConfig() 
{                 
        System.setProperty("javax.security.auth.useSubjectCredsOnly", "false"); 
        System.setProperty("java.security.krb5.kdc", "host.name:88"); 
        System.setProperty("java.security.krb5.realm", "REALM"); 
        System.setProperty("sun.security.krb5.debug", "false");                                 
        Configuration progConfig = getProgramaticLoginConfig(); 
        Configuration.setConfiguration(progConfig); 
} 

private static Configuration getProgramaticLoginConfig() 
{ 
        HashMap<String, String> options = new HashMap<String, String>(); 
        options.put("useTicketCache", "true"); 
        options.put("doNotPrompt", "true");                                                 
        AppConfigurationEntry krb5LoginModule = new AppConfigurationEntry("com.sun.security.auth.module.Krb5LoginModule", LoginModuleControlFlag.REQUIRED, options); 
        final AppConfigurationEntry[] aces = new AppConfigurationEntry[]{krb5LoginModule}; 
        Configuration progConfig = new Configuration() 
        { 
                @Override 
                public AppConfigurationEntry[] getAppConfigurationEntry(String arg0) 
                {                                 
                        return aces; 
                } 

        }; 
        return progConfig; 
} 

Возможно, вам придется настроить это для вашего контекста (java.security.krb5.kdc а такжеjava.security.krb5.realm не будет правильно) - но надеюсь это поможет. Очередьsun.security.krb5.debug true для больших объемов заготовки.

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded Yves Martin
Error: User Rate Limit Exceeded Yves Martin
Error: User Rate Limit Exceeded Yves Martin
Error: User Rate Limit Exceeded
3

можно сказать, что наше развертывание уже много лет работает, и IBM WebSphere работает на Linux, а приложение развернуто благодаря Java WebStart на Sun JavaSE 6 с включенным IBM ORB и настроенным для подключения без какой-либо аутентификации. Теперь мы хотим включить аутентификацию Kerberos и единый вход через RMI-IIOP, поддерживаемые начиная с WebSphere 6 (я думаю).

Вот теперь части ответа.

Начиная с WebSphere 7, была введена новая концепция для настройки аспектов безопасности для каждого сервера:security domain, Теоретически любой параметр, который не был изменен в домене безопасности, наследуется отglobal security раздел.

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

BUT даже если Kerberos включен вglobal security, он не наследуется / не включен для сервера, настроенного с его собственнымsecurity domain.

Как только мы запустим наш тестовый сервер по умолчаниюglobal security где параметры Kerberos видны и включены, затем проверка подлинности Kerberos начал работать сIBM JavaSE 6 выполнен изcmd bat script с обычным ClassPath и всеми свойствами, заявленными в документации.

Для заметки: JNDIContext.SECURITY_AUTHENTICATION опция никогда не устанавливается. После декомпиляции единственными доступными значениями для IBM ORB являютсяnone, simple а такжеstrong ноstrong еще не имеет реализации.

Еще один момент: согласно сгенерированному журналу IBM ORB не может работать сfile:/C:/temp/sas.client.config как значение дляcom.ibm.CORBA.ConfigURL, ЭтоMUST быть URI, а не путь к файлу. Мы даже не смогли разрешить поиск DNSC имя хоста! ARFF. Все примеры документации на Unix основаны наfile:/path/to/sas.client.config поэтому мы сделали много испытаний, прежде чем доставить этот файл с HTTP-сервера.

ТеперьJava WebStart part развертывания:

the same original JNLP without any security and no Kerberos settings works perfectly with both Oracle JavaSE 6 and IBM Java 6

with WebSphere security enabled and Kerberos in JNLP (and only that change set), IBM ORB running on IBM Java 6 complains with NoClassDefFoundError about ffdc log manager implementation that is (still/always) available in ClassPath. It really sounds like a code incompatibility with Java WebStart secured ClassLoader hierarchy.

with Kerberos JNLP, IBM ORB running on Oracle JavaSE 6 seems to simply ignore security settings and connects anonymously as usual.

Итак, первый шаг сейчас работает: IBM Java 6 запускалась из командной строки, но исследования еще не завершены, чтобы достичь нашей цели: Kerberos с Oracle JavaSE 6 в контексте Java WebStart.

Похожие вопросы