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

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

Комментарии

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

Oracle Cloud Control 12c/13c modify target setup Life Cycle Status (emcli, multiple targets)

https://pardydba.wordpress.com/2012/10/17/how-and-why-you-should-set-target-lifecycle-status-properties-in-em12c/+&cd=1&hl=ru&ct=clnk&gl=ru Итак есть куча таргетов middleware, host и т.д ... Менять руками  LifeCycle Status для всех таргетов внутри middleware это геморой поэтому сделать надо это скриптом. По ссылке выше предлагается это сделать для хостов. Ниже будет описано как это сделать для всех таргетов. В краце инструкция такова: Ставим emcli: oracle@omshost$ export JAVA_HOME=$OMS_HOME/../jdk16/jdk oracle@omshost$ export PATH=$JAVA_HOME/bin:$PATH oracle@omshost$ export ORACLE_HOME=$OMS_HOME oracle@omshost$ cd $ORACLE_HOME oracle@omshost$ mkdir emcli oracle@omshost$ java -jar $ORACLE_HOME/sysman/jlib/emclikit.jar client -install_dir=$ORACLE_HOME/emcli Oracle Enterprise Manager 12c Release 2. Copyright (c) 1996, 2012 Oracle Corporation. All rights reserved. EM CLI client-side install completed successfully. oracle@omshost$ $ORACLE_HOME/emcli/emcli setup -u

Backup elasticsearch with curator.

Сжато кратко, в падлу много расписывать... Вообщем пробуем забэкапить elasticsearch 5.0 с помощью curator 4.2 Что имеем: 2 ноды 1) vapp-cn1 2) vapp-cn2 Репозиторий для бэкапа есть на обоих хостах находится в /backup/el_backup/front права для пользователя под который запущен elasticsearch есть, на обоих нодах в конфиге elasticsearch.yml указанно: path.repo: ["/backup/el_backup/front"] Настройка curator, бэкапить будем все индексы поэтому: 1. snapshot-script.yml actions:   1:     action: snapshot     description: >-       Snapshot logstash- prefixed indices older than 1 day (based on index       creation_date) with the default snapshot name pattern of       'curator-%Y%m%d%H%M%S'.  Wait for the snapshot to complete.  Do not skip       the repository filesystem access check.  Use the other options to create       the snapshot.     options:       repository: elbackup       # Leaving name blank will result in the default 

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 должен выглядеть как EMAIL :ptm