К основному контенту

Weblogic Diagnostic Framework Run Bash Script (reboot managed server) - (bad practices)

Вообщем переодически сервер дохнет по: The WebLogic Server encountered a critical failure java.lang.OutOfMemoryError: Metaspace Reason: There is a panic condition in the server. The server is configured to exit on panic И хотя это гавно пишет типа  Reason: There is a panic condition in the server. The server is configured to exit on panic чёт ни хуя он ни куда не exit.... Вообщем т.к разбираться с тем чем он жрётся нет ни времени ни желания (оно обязательно появится)... как вариант можно приделать костыль... костыль будет заключаться в ребуте сервера при возникновении этой ошибки. Что значит для этого надо... Желания и понимание что так жить нельзя, и вообще... Делаем новый модуль называем скажем:  Reboot-OOMMetaSpace Идём в в новый модуль делаем Policy: Называем его OOM-Metaspace и говорит что это Server log: Жмём next в Configuration Policy пишем: log.logMessage.contains('java.lang.OutOfMemoryError: Metaspace'...

Weblogic two-way ssl


Сервер: Weblogic server - linux-weblogic.wcc.local (*.wcc.local)
DOMAIN_HOME=/opt/oracle/user_projects/domains/base_domain
WL_HOME=/opt/oracle/middleware/fmw12.2.1/wlserver

Клиент: Windows host (tmphome.moscow.local) - Firefox

Apache httpd:  Linux (linux-apache.wcc.local)
Клиентом может выступать что угодно, тут в качестве теста будет firefox.

Все сертификаты будут self signed.

Создание keystore и сертификатов:

Применяем свойства домена:
. $DOMAIN_HOME/bin/setDomainEnv.sh
mkdir $DOMAIN_HOME/keystore;cd $_
Последующии действия соответственно будут происходить в данной директории
1) Первое что нам надо сделать это сгенерить самоподписанный сертификат+хранилище  linux-weblogic.jks для linux-weblogic.wcc.local
keytool -genkey -alias linux-weblogic_cert -keyalg RSA -keysize 2048 -sigalg SHA256withRSA -validity 3650 -keystore linux-weblogic.jks -dname "CN=linux-weblogic.wcc.local,C=RU,ST=Moscow,L=Moscow,O=Tst Company Ept,OU=IT Department"
Enter keystore password: 
Re-enter new password:
Enter key password for <linux-weblogic_cert>
    (RETURN if same as keystore password):  


После данного шага в директории будет файл:
linux-weblogic.jks
CN надо указывать в соответствии с FQDN с тем сервером на который мы генерим сертификат.
2) Экспортим полученный на первом шаге сертификат для добавления его в trusted:
keytool -export -alias linux-weblogic_cert -file linux-weblogic_cert.cer -keystore linux-weblogic.jks
Получаем файл с сертификатом: linux-weblogic_cert.cer
3) Импортируем полученный на преведущем шаге сертификат в trust хранилище с созданием оного:

keytool -import -alias linux-weblogic_cert -file linux-weblogic_cert.cer -keystore trust.jks
Итого мы имеем:
-rw-r--r--  1 oracle oinstall  941 Jul 16 14:20 linux-weblogic_cert.cer
-rw-r--r--  1 oracle oinstall 2307 Jul 16 14:15 linux-weblogic.jks
-rw-r--r--  1 oracle oinstall 1017 Jul 16 14:36 trust.jks


Настройка Weblogic

Идём в console http://linux-weblogic.wcc.local:7001/console/
Все действия будем производить с manage server tst_1

Меняем Demo на Custom Identity and Custom Trust



Custom Identity Keystore:$DOMAIN_HOME/keystore/linux-weblogic.jks
Custom Identity Keystore Type: jks
Custom Identity Keystore Passphrase: <Пароль заданный на шаге 1 при создании keystore>

Custom Trust Keystore:$DOMAIN_HOME/keystore/trust.jks
Custom Trust Keystore Type: jks
Custom Trust Keystore Passphrase: <Пароль заданный на шаге 3 при создании trust keystore>

Далее идём на страницу конфигурации SSL:

а)

Private Key Alias: linux-weblogic_cert
Private Key Passphrase: <Пароль заданный на шаге 1 при создании keystore>
Hostname Verification: BEA Hostname Verifier 
Two Way Client Cert Behavior: Client Certs Requested And Enforced - данная херня требует клиента предоставить сертификат, в случае если сертификат не предоставлен посылает его на хуй.

б) В случае если у нас wildcard сертификат то:

Private Key Alias: linux-weblogic_cert
Private Key Passphrase: <Пароль заданный на шаге 1 при создании keystore>
Hostname Verification: Custom Hostname Verifier - эта хрень говорит о том что мы будем использовать custom verifier и нам надо указать класс который будет использоваться.
Мы выбираем Custom Hostname Verifier  т.к у нас wildcard сертификат, для того что бы сертификаты данного типа можно было использовать есть класс weblogic.security.utils.SSLWLSWildcardHostnameVerifier (насколько мне известно данный класс появился в версии 12 точно) который мы и указываем в поле:
Custom Hostname Verifier: weblogic.security.utils.SSLWLSWildcardHostnameVerifier
Two Way Client Cert Behavior: Client Certs Requested And Enforced - данная херня требует клиента предоставить сертификат, в случае если сертификат не предоставлен посылает его на хуй.)

Добавляем логирование SSL:
Идём в настройки сервера test->Server Start
В Arguments:  -Djavax.net.debug=all -Dssl.debug=true -Dweblogic.StdoutDebugEnabled=true

Открываем SSL порт:



Далее надо задеплоить тестовое приложение которое будет соответственно доступно по URL:
https://linux-weblogic:8002/twowaysslcheck

twowaysslcheck.war

Ребутаем сервер tst_1.

(на данном этапе нет смысла заходить в приложение т.к оно потребует сертификат клиента которого у нас нет и мы получим ошибку
 SSL-узел не может верифицировать ваш сертификат. Код ошибки: <a id="errorCode" title="SSL_ERROR_BAD_CERT_ALERT">SSL_ERROR_BAD_CERT_ALERT</a> ).

В логе weblogic соответственно увидим:
####<Jul 16, 2017, 3:24:37,592 PM MSK> <Debug> <SecuritySSL> <linux-weblogic> <tst_1> <ExecuteThread: '2' for queue: 'weblogic.socket.Muxer'> <<WLS Kernel>> <> <5a3ed8c1-ef60-4efb-95ed-4d07573d24ac-0000000e> <1500207877592> <[severity-value: 128] [rid: 0] [partition-id: 0] [partition-name: DOMAIN] > <BEA-000000> <[Thread[ExecuteThread: '2' for queue: 'weblogic.socket.Muxer',5,Thread Group for Queue: 'weblogic.socket.Muxer']]weblogic.security.SSL.jsseadapter: SSLENGINE: Exception occurred during SSLEngine.wrap(ByteBuffer,ByteBuffer).
javax.net.ssl.SSLHandshakeException: null cert chain
at sun.security.ssl.Handshaker.checkThrown(Handshaker.java:1478)
at sun.security.ssl.SSLEngineImpl.checkTaskThrown(SSLEngineImpl.java:535)
at sun.security.ssl.SSLEngineImpl.writeAppRecord(SSLEngineImpl.java:1214)
at sun.security.ssl.SSLEngineImpl.wrap(SSLEngineImpl.java:1186)
at javax.net.ssl.SSLEngine.wrap(SSLEngine.java:469)
at weblogic.security.SSL.jsseadapter.JaSSLEngine$1.run(JaSSLEngine.java:69)
at weblogic.security.SSL.jsseadapter.JaSSLEngine.doAction(JaSSLEngine.java:743)
at weblogic.security.SSL.jsseadapter.JaSSLEngine.wrap(JaSSLEngine.java:67)
at weblogic.socket.JSSEFilterImpl.wrapAndWrite(JSSEFilterImpl.java:759)
at weblogic.socket.JSSEFilterImpl.doHandshake(JSSEFilterImpl.java:110)
at weblogic.socket.JSSEFilterImpl.isMessageComplete(JSSEFilterImpl.java:342)
at weblogic.socket.SocketMuxer.readReadySocketOnce(SocketMuxer.java:975)
at weblogic.socket.SocketMuxer.readReadySocket(SocketMuxer.java:916)
at weblogic.socket.NIOSocketMuxer.process(NIOSocketMuxer.java:596)
at weblogic.socket.NIOSocketMuxer.processSockets(NIOSocketMuxer.java:560)
at weblogic.socket.SocketReaderRequest.run(SocketReaderRequest.java:30)
at weblogic.socket.SocketReaderRequest.execute(SocketReaderRequest.java:43)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:147)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:119)
Caused By: javax.net.ssl.SSLHandshakeException: null cert chain
Что говорит о том что к нам прётся какой то хрен без сертификата.

Генерация сертификата клиента. Добавление оного в trusted.

Что нам надо тут сделать:
1) сгенерить сертификат для клиента
2) импортнуть его в trust.jks на weblogic,
3) сделать p12 и импортнуть его в браузер (firefox) на клиенте.

1. Делаем еще одно хранилище tmphome-moscow.jks 
keytool -genkey -alias tmphome-moscow -keyalg RSA -keysize 2048 -sigalg SHA256withRSA -validity 3650 -keystore tmphome-moscow.jks -dname "CN=tmphome.moscow.local,C=RU,ST=Moscow,L=Moscow,O=OOO Client,OU=IT Department"
Enter keystore password:  
Re-enter new password: 
Enter key password for <tmphome-moscow>

(RETURN if same as keystore password):  

Получаем файл: tmphome-moscow.jks

(Или для wildcards)
1. Делаем еще одно хранилище moscow-wildcard.jks 
keytool -genkey -alias moscow-wildcard -keyalg RSA -keysize 2048 -sigalg SHA256withRSA -validity 365 -keystore moscow-wildcard.jks -dname "CN=*.moscow.local,C=RU,ST=Moscow,L=Moscow,O=OOO Client,OU=IT Department"
Получаем файл: moscow-wildcard.jks

2. Делаем p12 из jks для того что бы добавить его в браузер(firefox) на клиенте.
keytool -v -importkeystore -srckeystore tmphome-moscow.jks -srcalias tmphome-moscow -destkeystore tmphome-moscow.p12 -deststoretype PKCS12

3. Экспортируем сертификат из хранилища:
keytool -export -alias tmphome-moscow -file tmphome-moscow.cer -keystore tmphome-moscow.jks
Получаем файл tmphome-moscow.cer,

4. Импортируем полученный сертификат в trusted хранилище:
keytool -import -alias tmphome-moscow -file tmphome-moscow.cer -keystore trust.jks
Enter keystore password:  
Owner: CN=tmphome.moscow.local, C=RU, ST=Moscow, L=Moscow, O=OOO Client, OU=IT Department
Issuer: CN=tmphome.moscow.local, C=RU, ST=Moscow, L=Moscow, O=OOO Client, OU=IT Department
Serial number: 1da68cf4
Valid from: Sun Jul 16 15:36:33 MSK 2017 until: Wed Jul 14 15:36:33 MSK 2027
Certificate fingerprints:
MD5:  7D:3A:E6:35:3C:AB:95:F3:20:F6:75:E5:FB:37:0A:06
SHA1: 5B:3E:60:6B:15:20:71:F4:95:CE:61:92:33:C0:59:3A:86:21:31:40
SHA256: 97:49:8D:48:AD:1C:17:00:DC:FE:F7:BB:6E:38:11:0D:B7:BC:F2:7E:3C:0E:6C:DD:27:FA:B8:D1:83:B2:F2:88
Signature algorithm name: SHA256withRSA
Version: 3

Extensions: 

#1: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: A8 0D 7B 8B FA 53 FA CB   EA 1B 34 E9 96 24 C2 47  .....S....4..$.G
0010: 8B E3 98 F8                                        ....
]
]

Trust this certificate? [no]:  yes

Certificate was added to keystore

5. Ребутаем ssl на сервере tst_1



6. Копируем (или отдаём кому то) tmphome-moscow.p12 на сервер tmphome и импортируем его в браузер



Настройка Security Realm Weblogic. (А так же ролей для нормальной работы тестового приложения).

1. Security Realms -> myrealm -> Providers -> DefaultIdentityAsserter
Добавляем x.509


2.  Переходим во вкладку Provider Specific


3. Рестартуем AdminServer+manage Server (до кучи)

4. Security Realms >myrealm >Roles and Policies -> Вкладка Realm Roles-> Global Roles - Roles- New
Добавляем Global Role: Certificate

5. Редактируем новосозданную роль


Добавляем группу AcceptedCertificates в данную роль:

Добавляем группу AcceptedCertificates

Создаём пользователя в соответствии с CN на который выписан сертификат: tmphome.moscow.local и добавляем его в группу AcceptedCertificates


Деплоим twowaysslcheck.war если еще не задеплоили.
Вообщем вся эта херня подробно описанна тут в падлу чёт переписывать по сути тоже самое.

Собственно проверка работоспособности.

Заходим на weblogic по ssl порту:
https://linux-weblogic.wcc.local:8002/twowaysslcheck

Соответственно нам надо принять сертификат сервера что мы и делаем.


Далее нам предлагается выбрать сертификат с которым мы пойдём на сервер.
Соответственно выбираем тот который мы импортнули.



В итоге видим страницу которая говорит что всё заебись:



P.S Чёт я заебался писать... Короче про apache и т.д как нить потом.

https://docs.oracle.com/middleware/12212/wls/SECMG/hostname_verifier.htm#SECMG571
https://docs.oracle.com/middleware/12212/wls/WLACH/taskhelp/security/ConfigureTwowaySSL.html
http://docs.oracle.com/cd/E23943_01/apirefs.1111/e13952/taskhelp/webservices/webservicesecurity/UseX509ForIdentity.html
https://docs.oracle.com/middleware/1213/wls/SECMG/keytool-summary-appx.htm#SECMG818
http://www.oracle.com/technetwork/articles/damo-howto-091164.html
https://docs.oracle.com/middleware/12212/wls/SECMG/identity_trust.htm#SECMG365

Комментарии

Популярные сообщения из этого блога

Weblogic Diagnostic Framework Run Bash Script (reboot managed server) - (bad practices)

Вообщем переодически сервер дохнет по: The WebLogic Server encountered a critical failure java.lang.OutOfMemoryError: Metaspace Reason: There is a panic condition in the server. The server is configured to exit on panic И хотя это гавно пишет типа  Reason: There is a panic condition in the server. The server is configured to exit on panic чёт ни хуя он ни куда не exit.... Вообщем т.к разбираться с тем чем он жрётся нет ни времени ни желания (оно обязательно появится)... как вариант можно приделать костыль... костыль будет заключаться в ребуте сервера при возникновении этой ошибки. Что значит для этого надо... Желания и понимание что так жить нельзя, и вообще... Делаем новый модуль называем скажем:  Reboot-OOMMetaSpace Идём в в новый модуль делаем Policy: Называем его OOM-Metaspace и говорит что это Server log: Жмём next в Configuration Policy пишем: log.logMessage.contains('java.lang.OutOfMemoryError: Metaspace'...

Oracle SOA email notification или какого х.. оно не работает.

От делать нех задокументируем.... Вообщем то всё рассписанно по ссылке: http://www.rubiconred.com/blog/email-notification-with-soa-suite-11g/ Ссылка походу сдохла!!! Придётся на всякий случай записать пока не забыл... Собственно основные настройки делаются на этой странице: Тут будет текст дабы не плодить картинок: MailAccessProtocol : POP3 RetryLimit : -1 MailDelFreq : 600 AutoDelete : not check Debug : not check CheckMailFreq : 30 ReceiveFolder: INBOX OutgoingMailServer :  mail4.ru OutgoingMailServerPort : 25 OutgoingMailServerSecurity : None OutgoingDefaultFromAddr :  pklmn@mail.ru OutgoingPassword: вроде ни чё не трогал... IncomingMailServer: mail3.ru IncomingMailServerPort: 110 IncomingMailServerSSL: not check IncomingMailIDs: pklmn@mail.ru IncomingUserIDs: pklmn IncomingUserPasswords: тут настраиваем пароль При настройке рекомендуется обращать внимания на всплывающие подсказки например: Sender Address должен выглядеть как E...

Weblogic Kerberos

Weblogic установлен на сервере budwf Домен контролер wcctst.wcc.local Клиентская винда XZ 1. Генерим keytab ktpass -princ HTTP/srv_budwf@WCC.LOCAL -mapuser srv_budwf -kvno 0 -crypto AES128-SHA1 -ptype KRB5_NT_PRINCIPAL -pass lalal_1 -out c:\temp\budwf.keytab Т.е в данном случае principal name в keytab полностью соответствует ожиданиям... C:\Users\Administrator>ktpass -princ HTTP/srv_budwf@WCC.LOCAL -mapuser srv_budwf -kv no 0 -crypto AES128-SHA1 -ptype KRB5_NT_PRINCIPAL -pass lalal_1 -out c:\temp\b udwf.keytab Targeting domain controller: wcctst.wcc.local Successfully mapped HTTP/budwf to srv_budwf. Password succesfully set! Key created. Output keytab to c:\temp\budwf.keytab: Keytab version: 0x502 keysize 55 HTTP/budwf@WCC.LOCAL ptype 1 (KRB5_NT_PRINCIPAL) vno 0 etype 0x11 (AE S128-SHA1) keylength 16 (0xbf005ae14d58153abe3eab57cf5a8260) C:\Users\Administrator>setspn -L srv_budwf Registered ServicePrincipalNames for CN=srv_budwf,CN=Users,DC=wcc,DC=local: ...