понедельник, 24 марта 2014 г.

Аутентификация на weblogic-серверах через домен windows. Настройка SSO.


Настройки моего окружения:
домен: WCC.LOCAL
Контроллер домена ( KDC-сервер): dc1.wcc.local
Сервер приложений: budwf.moscow.mydomain.ru

Настройки на стороне домена AD.

Необходимо создать пользователя с произвольным именем. Для аутентификации будут использоваться principals этого пользователя. Использование протокола Kerberos предполагает шифрование. В настройках созданной учётной записи необходимо отметить поддержку, например, AES 128. При использовании это типа шифрования не понадобится скачивание дополнительных библиотек на сервера приложений.

ktpass -princ HTTP/srv_budwf@WCC.LOCAL -mapuser  srv_budwf -kvno 0 -crypto AES128-SHA1 -ptype KRB5_NT_PRINCIPAL -pass ***** -out c:\distr\budwf.keytab
Targeting domain controller: DC1.wcc.local
Successfully mapped HTTP/srv_budwf to srv_budwf.
Password succesfully set!
Key created.
Output keytab to c:\distr\oracleadmintst.keytab:
Keytab version: 0x502
keysize 60 HTTP/srv_budwf@WCC.LOCAL ptype 1 (KRB5_NT_PRINCIPAL) vno 0 etype 0x1
1 (AES128-SHA1) keylength 16 (0x5e4018d5c51d4445677201f95477046f)

setspn -L srv_budwf
Зарегистрирован ServicePrincipalNames для CN=srv_budwf,OU=System Accounts,OU=Ser
ver,OU=CentralOffice,DC=wcc,DC=local:
        HTTP/srv_budwf
Можно удалить бесполезные service principal name командой
setspn -D HTTP/srv_budwf srv_budwf
и добавить spn с полным именем сервера
setspn -S HTTP/budwf.moscow.mydomain.ru srv_budwf
Checking domain DC=gksm,DC=local

Registering ServicePrincipalNames for CN=srv_budwf,OU=System Accounts,OU=Server,OU=CentralOffice,DC=wcc,DC=local
HTTP/budwf.moscow.mydomain.ru srv_budwf
Updated object
Должно получиться что-то похожее на это:
setspn -L srv_budwf
Registered ServicePrincipalNames for CN=srv_budwf,OU=System Accounts,OU=Server,OU=CentralOffice,DC=wcc,DC=local:
        HTTP/budwf.moscow.mydomain.ru srv_budwf
        HTTP/budwf

Настройки хоста сервера приложений.

Готовый кейтаб можно копировать на сервер приложений, в корневую директорию домена.
На сервере приложений необходимо отредактировать файл /etc/krb5.conf

[logging]
 default = FILE:/var/log/krb5libs.log
 kdc = FILE:/var/log/krb5kdc.log
 admin_server = FILE:/var/log/kadmind.log

[libdefaults]
 default_realm = WCC.LOCAL
 dns_lookup_realm = false
 dns_lookup_kdc = false
 ticket_lifetime = 24h
 renew_lifetime = 7d
 forwardable = true

 default_tgs_enctypes = aes128-cts
 default_tkt_enctypes = aes128-cts
 permitted_enctypes = aes128-cts
 clockskew = 300


[realms]
 WCC.LOCAL = {
  kdc = dc1.wcc.local
  admin_server = dc1.wcc.local
  default_domain = wcc.local
 }

[domain_realm]
 .wcc.local = WCC.LOCAL
 wcc.local = WCC.LOCAL

Проверить правильность конфигов можно командой kinit. Ей вывод должен быть пустой:
kinit -k -t /opt/oracle/middleware/user_projects/domains/budwf_domain/budwf.keytab  HTTP/srv_budwf@WCC.LOCAL
В качестве второго аргумента нужно указать principal из keytab-а. Его можно посмотреть командой:
klist -k -t /opt/oracle/middleware/user_projects/domains/budwf_domain/budwf.keytab
Keytab name: FILE:/opt/oracle/middleware/user_projects/domains/budwf_domain/budwf.keytab
KVNO Timestamp         Principal
---- ----------------- --------------------------------------------------------
   0 01/01/70 03:00:00 HTTP/srv_budwf@WCC.LOCAL

Настройка Weblogic для SSO.

1.Конфигурационный файл JAAS. В качестве principal указывается principal кейтаба.
В качестве keyTab - путь к кейтабу относительно корня домена.

/opt/oracle/middleware/user_projects/domains/budwf_domain $ cat krb5Login.conf
com.sun.security.jgss.initiate {
  com.sun.security.auth.module.Krb5LoginModule required
  principal="HTTP/srv_budwf@WCC.LOCAL"
  useKeyTab=true
  keyTab=budwf.keytab
  storeKey=true
  debug=false;
};

com.sun.security.jgss.krb5.accept {
  com.sun.security.auth.module.Krb5LoginModule required
  principal="HTTP/srv_budwf@WCC.LOCAL"
  useKeyTab=true
  keyTab=budwf.keytab
  storeKey=true
  debug=false;
};
2.Ключи для запуска JVM weblogic-сервера. Их необходимо добавить в переменную JAVA_OPTIONS либо на странице ServerStart консоли. Путь для Djava.security.auth.login.config необходимо указывать либо относитьельно корня файловой системы, либо относительно корня домена.
-Dsun.security.krb5.debug=true
-Djava.security.krb5.realm=wcc.LOCAL
-Djava.security.krb5.kdc=dc1.wcc.local
-Djava.security.auth.login.config=/opt/oracle/middleware/user_projects/domains/budwf_domain/krb5Login.conf-Djavax.security.auth.useSubjectCredsOnly=false

3. Настройка AD-провайдера.
Настраивается как обычно.
4. Настройка WebLogic Negotiate Identity Assertion provider
Заключается в выборе имени для этого провайдера. Он должен стоять выше, чем AD-провайдера в списке.

Настройка браузера

В адресоной строке firefox набрать about:config.
изменить значения