Bazaprogram.ru

Новости из мира ПК
3 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Java security krb5 conf

Прозрачная авторизация для приложения на Oracle Weblogic Server

В данной статье расскажу, как мы перешли с NTLM на Kerberos авторизацию для приложений на Oracle Weblogic Server, тем самым упростив пользователям вход, убрав необходимость вводить пароль. Все пользователи, а также сервер приложения находятся в одном домене, так же ранее была настроена доменная авторизация для приложений Weblogic сервера. Все конфигурации были проверены на WLS 12.1.2.

Для начала немного теории, очень кратко для дальнейшего понимания процесса взаимодействия.

Что такое Single Sign-On?

Единый вход (SSO) — это механизм, посредством которого одно действие аутентификации пользователя, позволяет пользователю получить доступ ко всем компьютерам и системам, где у него есть разрешение на доступ, без необходимости вводить несколько паролей. Ранее введенные учетные данные будут прозрачно повторно использоваться различными компонентами.

Что такое Kerberos?

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

Что такое SPNEGO?

SPNEGO — это простой и защищенный механизм переговоров GSSAPI. Это стандартизованный интерфейс для аутентификации (например, JNDI для поиска в каталогах), реализация по умолчанию для SPNEGO под Windows — это Kerberos (например, LDAP для JNDI). В терминологии Microsoft в качестве синонима SPNEGO используется «Интегрированная аутентификация Windows». В Windows Integrated Authentication могут быть согласованы протоколы Kerberos или NTLM.

Когда сервер получает запрос от браузера Internet Explorer (IE 6.1 или выше), он может запросить, чтобы браузер использовал протокол SPNEGO для аутентификации. Этот протокол выполняет аутентификацию Kerberos через HTTP и позволяет Internet Explorer передавать делегированные полномочия, чтобы веб-приложение могло выполнять вход в последующие Kerberized службы от имени пользователя.

Когда HTTP-сервер хочет выполнить SPNEGO, он возвращает ответ «401 Unauthorized» на HTTP-запрос с заголовком «WWW-Authorization: Negotiate». Затем Internet Explorer связывается с службой выдачи билетов (TGS) для получения билета. Он выбирает специальное имя участника услуги для запроса билета, например:

Возвращенный билет затем завернут в токен SPNEGO, который закодирован и отправляется обратно на сервер с использованием HTTP-запроса. Маркер разворачивается, и билет аутентифицируется.

Преимущества Kerberos

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

Настройка SSO на основе Kerberos в среде сервера приложений Weblogic

  1. Когда зарегистрированный пользователь (РС) запрашивает ресурс из Oracle WebLogic Server (WLS), он отправляет исходный HTTP GET-запрос.
  2. Сервер Oracle WebLogic Server (WLS), выполняющий код обработчика токенов SPNEGO, требует аутентификации и выдает ответ 401 Access Denied, WWWAuthenticate: Negotiate.
  3. Клиент (Браузер на PC) запрашивает билет сессии из TGS / KDC (AD).
  4. TGS / KDC (AD) предоставляет клиенту необходимый билет Kerberos (при условии, что клиент авторизован), завернутый в токен SPNEGO.
  5. Клиент повторно отправляет запрос HTTP GET + токен Negotiate SPNEGO в заголовке авторизации: Negotiate base64 (token).
  6. Проверка веб-аутентификации SPNEGO на сервере Weblogic видит заголовок HTTP с токеном SPNEGO. SPNEGO проверяет токен SPNEGO и получает информацию о пользователе.
  7. После того, как Weblogic получит информацию о пользователе, он проверяет пользователя в Microsoft Active Directory / KDC. Когда процесс идентификации выполняется, Weblogic выполняет соответствующий Java-код (сервлеты, JSP, EJB и т.д.) И проверяет авторизацию.
  8. Код обработчика Token Handler сервера Oracle WebLogic Server принимает и обрабатывает токен через API GSS, аутентифицирует пользователя и отвечает запрошенным URL-адресом.

Теперь перейдем к практике

1. Выполняем настройки на стороне сервера домен контролера, на котором настроены службы TGS / KDC.

  • Создаем пользователя в Active Directory (срок действия пароля должен быть не ограничен)
  • Устанавливаем соответствующий SPN для имени сервера WLS
Читать еще:  Java bigdecimal compareto

Выполняем проверку, установленного SPN

должно вернуть две записи
Сгенерировать Keytab файл

Скопировать данный файл на сервер WLS

2. Настройка сервера WLS

  • Нужно создать файл krb5.ini в папке %windir%: C:Windows. Этот файл содержит параметры конфигурации для клиентов, например, где находится KDC. Файл будет выглядеть так:
  • Создать конфигурационный файл krb5Login.conf:

Обратите внимание, что имя домена должно быть указано в верхнем регистре. Для более ранних версий, используйте com.sun.security.jgss.initiate в предыдущем конфиге вместо com.sun.security.jgss.krb5.initiate.

  • Оба файла krb5Login.conf и krb5.keytab должны быть размещены в корне директории домена WLS сервера.

  • Редактируем файл setDomainEnv

Находим строку set JAVA_OPTIONS=%JAVA_OPTIONS% и в конце добавляем

  • В данном случае не рассматриваем настройку авторизации WLS в AD считаем, что она работает, если нужно расписать этот пункт пишите в комментариях.
  • Настраиваем SPNEGO в WLS
    Для этого необходимо перейти в WebLogic Server Administration Console
    Переходим в раздел Security Realms >myrealm >Providers и нажимаем кнопку Add
    Выбираем тип “WebLogic Negotiate Identity Assertion provider”
    Проверяем, что бы было выбрано оба параметра.

Нажимаем кнопку Reorder и управляя стрелками выставляем последовательности типов авторизации. На первом месте должно быть установлено WebLogic Negotiate Identity Assertion provider на втором месте Provider that performs LDAP authentication (доменная авторизация)

  • Перезагружаем сервер

  • Далее необходимо указать приложению способ авторизации CLIENT-CERT, данные изменения применяются в файле web.xml приложения

Роль должна быть предустановлена в системе. В нашем случае используется встроенная роль для ADF (valid-users), а уже далее на основании доменных групп раздаются полномочия.

  • Debug

Для выявления проблем с авторизацией необходимо включить дебаг. Для этого переходим в раздел.

Environment -> Servers выбираем наш сервер -> Debug -> weblogic (развернуть) -> Security -> atn, установить галочки и включить.

Для включения и отключения дебага, перезагрузка не требуется.

  • Перезагружаем сервер, для применения изменений в конфигурации.
  • Деплоим приложение с измененным способом авторизации (новым web.xml)
  • Чтобы отключить данный вид авторизации для административной консоли необходимо внести следующие изменения %Ora_Home%wlserverserverlibconsoleappwebappWEB-INFweb.xml.

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

Прозрачная авторизация для приложения на Oracle Weblogic Server

В данной статье расскажу, как мы перешли с NTLM на Kerberos авторизацию для приложений на Oracle Weblogic Server, тем самым упростив пользователям вход, убрав необходимость вводить пароль. Все пользователи, а также сервер приложения находятся в одном домене, так же ранее была настроена доменная авторизация для приложений Weblogic сервера. Все конфигурации были проверены на WLS 12.1.2.

Для начала немного теории, очень кратко для дальнейшего понимания процесса взаимодействия.

Что такое Single Sign-On?

Единый вход (SSO) — это механизм, посредством которого одно действие аутентификации пользователя, позволяет пользователю получить доступ ко всем компьютерам и системам, где у него есть разрешение на доступ, без необходимости вводить несколько паролей. Ранее введенные учетные данные будут прозрачно повторно использоваться различными компонентами.

Что такое Kerberos?

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

Что такое SPNEGO?

SPNEGO — это простой и защищенный механизм переговоров GSSAPI. Это стандартизованный интерфейс для аутентификации (например, JNDI для поиска в каталогах), реализация по умолчанию для SPNEGO под Windows — это Kerberos (например, LDAP для JNDI). В терминологии Microsoft в качестве синонима SPNEGO используется «Интегрированная аутентификация Windows». В Windows Integrated Authentication могут быть согласованы протоколы Kerberos или NTLM.

Когда сервер получает запрос от браузера Internet Explorer (IE 6.1 или выше), он может запросить, чтобы браузер использовал протокол SPNEGO для аутентификации. Этот протокол выполняет аутентификацию Kerberos через HTTP и позволяет Internet Explorer передавать делегированные полномочия, чтобы веб-приложение могло выполнять вход в последующие Kerberized службы от имени пользователя.

Когда HTTP-сервер хочет выполнить SPNEGO, он возвращает ответ «401 Unauthorized» на HTTP-запрос с заголовком «WWW-Authorization: Negotiate». Затем Internet Explorer связывается с службой выдачи билетов (TGS) для получения билета. Он выбирает специальное имя участника услуги для запроса билета, например:

Возвращенный билет затем завернут в токен SPNEGO, который закодирован и отправляется обратно на сервер с использованием HTTP-запроса. Маркер разворачивается, и билет аутентифицируется.

Преимущества Kerberos

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

Настройка SSO на основе Kerberos в среде сервера приложений Weblogic

  1. Когда зарегистрированный пользователь (РС) запрашивает ресурс из Oracle WebLogic Server (WLS), он отправляет исходный HTTP GET-запрос.
  2. Сервер Oracle WebLogic Server (WLS), выполняющий код обработчика токенов SPNEGO, требует аутентификации и выдает ответ 401 Access Denied, WWWAuthenticate: Negotiate.
  3. Клиент (Браузер на PC) запрашивает билет сессии из TGS / KDC (AD).
  4. TGS / KDC (AD) предоставляет клиенту необходимый билет Kerberos (при условии, что клиент авторизован), завернутый в токен SPNEGO.
  5. Клиент повторно отправляет запрос HTTP GET + токен Negotiate SPNEGO в заголовке авторизации: Negotiate base64 (token).
  6. Проверка веб-аутентификации SPNEGO на сервере Weblogic видит заголовок HTTP с токеном SPNEGO. SPNEGO проверяет токен SPNEGO и получает информацию о пользователе.
  7. После того, как Weblogic получит информацию о пользователе, он проверяет пользователя в Microsoft Active Directory / KDC. Когда процесс идентификации выполняется, Weblogic выполняет соответствующий Java-код (сервлеты, JSP, EJB и т.д.) И проверяет авторизацию.
  8. Код обработчика Token Handler сервера Oracle WebLogic Server принимает и обрабатывает токен через API GSS, аутентифицирует пользователя и отвечает запрошенным URL-адресом.

Теперь перейдем к практике

1. Выполняем настройки на стороне сервера домен контролера, на котором настроены службы TGS / KDC.

  • Создаем пользователя в Active Directory (срок действия пароля должен быть не ограничен)
  • Устанавливаем соответствующий SPN для имени сервера WLS

Выполняем проверку, установленного SPN

должно вернуть две записи
Сгенерировать Keytab файл

Скопировать данный файл на сервер WLS

2. Настройка сервера WLS

  • Нужно создать файл krb5.ini в папке %windir%: C:Windows. Этот файл содержит параметры конфигурации для клиентов, например, где находится KDC. Файл будет выглядеть так:
  • Создать конфигурационный файл krb5Login.conf:

Обратите внимание, что имя домена должно быть указано в верхнем регистре. Для более ранних версий, используйте com.sun.security.jgss.initiate в предыдущем конфиге вместо com.sun.security.jgss.krb5.initiate.

  • Оба файла krb5Login.conf и krb5.keytab должны быть размещены в корне директории домена WLS сервера.

  • Редактируем файл setDomainEnv

Находим строку set JAVA_OPTIONS=%JAVA_OPTIONS% и в конце добавляем

  • В данном случае не рассматриваем настройку авторизации WLS в AD считаем, что она работает, если нужно расписать этот пункт пишите в комментариях.
  • Настраиваем SPNEGO в WLS
    Для этого необходимо перейти в WebLogic Server Administration Console
    Переходим в раздел Security Realms >myrealm >Providers и нажимаем кнопку Add
    Выбираем тип “WebLogic Negotiate Identity Assertion provider”
    Проверяем, что бы было выбрано оба параметра.

Нажимаем кнопку Reorder и управляя стрелками выставляем последовательности типов авторизации. На первом месте должно быть установлено WebLogic Negotiate Identity Assertion provider на втором месте Provider that performs LDAP authentication (доменная авторизация)

  • Перезагружаем сервер

  • Далее необходимо указать приложению способ авторизации CLIENT-CERT, данные изменения применяются в файле web.xml приложения

Роль должна быть предустановлена в системе. В нашем случае используется встроенная роль для ADF (valid-users), а уже далее на основании доменных групп раздаются полномочия.

  • Debug

Для выявления проблем с авторизацией необходимо включить дебаг. Для этого переходим в раздел.

Environment -> Servers выбираем наш сервер -> Debug -> weblogic (развернуть) -> Security -> atn, установить галочки и включить.

Для включения и отключения дебага, перезагрузка не требуется.

  • Перезагружаем сервер, для применения изменений в конфигурации.
  • Деплоим приложение с измененным способом авторизации (новым web.xml)
  • Чтобы отключить данный вид авторизации для административной консоли необходимо внести следующие изменения %Ora_Home%wlserverserverlibconsoleappwebappWEB-INFweb.xml.

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

Java security krb5 conf

GitHub is home to over 40 million developers working together to host and review code, manage projects, and build software together.

flink / flink-runtime / src / main / java / org / apache / flink / runtime / clusterframework / overlays / Krb5ConfOverlay.java

/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* «License»); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an «AS IS» BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.flink.runtime.clusterframework.overlays ;
import org.apache.flink.configuration.Configuration ;
import org.apache.flink.core.fs.Path ;
import org.apache.flink.runtime.clusterframework.ContainerSpecification ;
import org.slf4j.Logger ;
import org.slf4j.LoggerFactory ;
import javax.annotation.Nullable ;
import java.io.File ;
import java.io.IOException ;
/**
* Overlays a Kerberos configuration file into a container.
*
* The following files are copied to the container:
* — krb5.conf
*
* The following Java system properties are set in the container:
* — java.security.krb5.conf
*/
public class Krb5ConfOverlay extends AbstractContainerOverlay <
private static final Logger LOG = LoggerFactory . getLogger( Krb5ConfOverlay . class);
static final String JAVA_SECURITY_KRB5_CONF = » java.security.krb5.conf » ;
static final Path TARGET_PATH = new Path ( » krb5.conf » );
final Path krb5Conf;
public Krb5ConfOverlay ( @Nullable File krb5Conf ) <
this . krb5Conf = krb5Conf != null ? new Path (krb5Conf . toURI()) : null ;
>
public Krb5ConfOverlay ( @Nullable Path krb5Conf ) <
this . krb5Conf = krb5Conf;
>
@Override
public void configure ( ContainerSpecification container ) throws IOException <
if (krb5Conf != null ) <
container . getArtifacts() . add( ContainerSpecification . Artifact . newBuilder()
.setSource(krb5Conf)
.setDest( TARGET_PATH )
.setCachable( true )
.build());
container . getSystemProperties() . setString( JAVA_SECURITY_KRB5_CONF , TARGET_PATH . getPath());
>
>
public static Builder newBuilder () <
return new Builder ();
>
/**
* A builder for the < @link Krb5ConfOverlay>.
*/
public static class Builder <
File krb5ConfPath;
/**
* Configures the overlay using the current environment.
*
* Locates the krb5.conf configuration file as per
* a href = » https://docs.oracle.com/javase/8/docs/technotes/gu >» >Java documentation.
* Note that the JRE doesn’t support the KRB5_CONFIG environment variable (JDK-7045913).
*/
public Builder fromEnvironment ( Configuration globalConfiguration ) <
// check the system property
String krb5Config = System . getProperty( JAVA_SECURITY_KRB5_CONF );
if (krb5Config != null && krb5Config . length() != 0 ) <
krb5ConfPath = new File (krb5Config);
if ( ! krb5ConfPath . exists()) <
throw new IllegalStateException ( » java.security.krb5.conf refers to a non-existent file » );
>
>
// FUTURE: check the well-known paths
// — $JAVA_HOME/lib/security
// — %WINDIR%krb5.ini (Windows)
// — /etc/krb5.conf (Linux)
return this ;
>
public Krb5ConfOverlay build () <
return new Krb5ConfOverlay (krb5ConfPath);
>
>
>
  • © 2020 GitHub, Inc.
  • Terms
  • Privacy
  • Security
  • Status
  • Help

You can’t perform that action at this time.

You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.

Ссылка на основную публикацию
Adblock
detector