Encriptando system properties passwords no Weblogic
Dica publicada em Java / Segurança
Encriptando system properties passwords no Weblogic
Recentemente tive um problema em que precisávamos consumir um recurso de um terceiro na Internet e o mesmo fazia uso de um certificado Two-way handshake, que possui uma senha para ser configurado no cliente, neste caso, do Weblogic.
A Oracle não nos deu uma solução, então, decidimos tentar por si só resolver o problema. Foi onde desenvolvemos o EncryptSystemProperties.war para intermediar a configuração da senha do certificado.
Para este exemplo, usamos a seguinte árvore de diretórios:
Após configurar, realizar deploy do "EncryptSystemProperties.war" no Weblogic e colocá-lo como target no mesmo domínio/cluster/managedServer em que o certificado for configurado.
No decorrer do deploy, duas informações devem estar presentes nos logs, a configuração do novo diretório contendo os arquivos no CLASSPATH e os logs da aplicação informando que o parâmetro foi configurado com sucesso:
Vejam a parte destacada, o diretório configurado no CLASSPATH foi setado com sucesso.
E também, a mensagem abaixo deve ser impressa nos logs indicando que o parâmetro "javax.net.ssl.keyStorePassword" foi setado com sucesso:
Comparando os processos da JVM temos:
Antes:
Depois:
O artigo na íntegra, está disponível em:
A Oracle não nos deu uma solução, então, decidimos tentar por si só resolver o problema. Foi onde desenvolvemos o EncryptSystemProperties.war para intermediar a configuração da senha do certificado.
Modo de usar
Antes de tudo é necessário configurar o CLASSPATH inserindo os arquivos de configuração ("encrypted-properties.properties" e "log4j.properties"), para facilitar um pouco a configuração, eu optei por criar um diretório dentro do domínio utilizado.Para este exemplo, usamos a seguinte árvore de diretórios:
/opt/weblogic/user_projects/domains/spolti01/EncryptSystemProperties ├── encrypted-properties.properties └── log4j.propertiesPara configurar o CLASSPATH, foi usado o arquivo "setDomainEnv.sh" e foi incluso no final do arquivo o diretório acima no CLASSPATH:
export CLASSPATH="$CLASSPATH:/opt/weblogic/user_projects/domains/spolti01/EncryptSystemProperties"
Após configurar, realizar deploy do "EncryptSystemProperties.war" no Weblogic e colocá-lo como target no mesmo domínio/cluster/managedServer em que o certificado for configurado.
No decorrer do deploy, duas informações devem estar presentes nos logs, a configuração do novo diretório contendo os arquivos no CLASSPATH e os logs da aplicação informando que o parâmetro foi configurado com sucesso:
CLASSPATH=/opt/weblogic/patch_wls1035/profiles/default/sys_manifest_classpath/weblogic_patch.jar:/opt/weblogic/patch_ocp
360/profiles/default/sys_manifest_classpath/weblogic_patch.jar:/usr/java/jdk1.6.0_30/lib/tools.jar:/opt/weblogic/wlserver_10.3
/server/lib/weblogic_sp.jar:/opt/weblogic/wlserver_10.3/server/lib/weblogic.jar:/opt/weblogic/modules/features/weblogic.server
.modules_10.3.5.0.jar:/opt/weblogic/wlserver_10.3/server/lib/webservices.jar:/opt/weblogic/modules/org.apache.ant_1.7.1/lib/
ant-all.jar:/opt/weblogic/modules/net.sf.antcontrib_1.1.0.0_1-0b2/lib/ant-
contrib.jar:/opt/weblogic/wlserver_10.3/common/derby/lib/derbyclient.jar:/opt/weblogic/wlserver_10.3/
server/lib/xqrl.jar:/opt/weblogic/user_projects/domains/spolti01/EncryptSystemProperties
Vejam a parte destacada, o diretório configurado no CLASSPATH foi setado com sucesso.
E também, a mensagem abaixo deve ser impressa nos logs indicando que o parâmetro "javax.net.ssl.keyStorePassword" foi setado com sucesso:
Spolti - 13:04:23,905 INFO EncryptSystemPropertiesService - Carregando arquivo encrypted-properties.properties.
Spolti - 13:04:23,983 INFO EncryptSystemPropertiesService - encrypted-properties.properties caregado com sucesso.
Spolti - 13:04:24,256 INFO EncryptSystemPropertiesService - SSL Keystore Password setado com sucesso.
Comparando os processos da JVM temos:
Antes:
-Djavax.net.ssl.keyStoreType=PKCS12 -Djavax.net.ssl.keyStore=/local/para/o/certificado.p12 -
Djavax.net.ssl.keyStorePassword=secreto
Depois:
-Djavax.net.ssl.keyStoreType=PKCS12 -Djavax.net.ssl.keyStore=/local/para/o/certificado.p12
O artigo na íntegra, está disponível em: