Вообщем переодически сервер дохнет по: 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 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
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)
Apache httpd: Linux (linux-apache.wcc.local)
Клиентом может выступать что угодно, тут в качестве теста будет firefox.
Все сертификаты будут self signed.
. $DOMAIN_HOME/bin/setDomainEnv.sh
mkdir $DOMAIN_HOME/keystore;cd $_
Последующии действия соответственно будут происходить в данной директории
Создание 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
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
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
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>
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 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
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) сгенерить сертификат для клиента
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):
Enter keystore password:
Re-enter new password:
Enter key password for <tmphome-moscow>
(RETURN if same as keystore password):
Получаем файл: tmphome-moscow.jks
(Или для wildcards)
(Или для 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
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
Комментарии
Отправить комментарий