Invalid Secret Key when using a vault and JDK 1.8.0_171 Jboss EAP 7
Proteção do JBoss EAP
Olá, meu caro! Esse post é para registro e auxÃlio ao problema com a utilização do vault para encriptar senhas no domain.xml ou standalone.xml do Jboss Eap 7 ou outras versões como a 6. O problema foi solucionado em versões superiores a 7.0.
Ambiente utilizado
- Red Hat JBoss Enterprise Application Platform (EAP) 7
- openjdk version "1.8.0_252"
- OpenJDK 64-Bit Server VM (build 25.252-b09, mixed mode)
- OpenJDK Runtime Environment (build 1.8.0_252-b09)
- Centos 7
Problema
O script EAP e vault.sh lançam a seguinte exceção:
[root@wk vault]# ../vault.sh --keystore /opt/jboss-eap/bin/vault/vault.keystore --keystore-password vault22 --alias vault --vault-block vb --attribute password --sec-attr redhat --enc-dir /opt/jboss-eap/bin/vault/ --iteration 50 --salt 1234abcd ========================================================================= JBoss Vault JBOSS_HOME: /opt/jboss-eap JAVA: java ========================================================================= May 11, 2020 7:07:08 AM java.io.ObjectInputStream filterCheck INFO: ObjectInputFilter REJECTED: null, array length: -1, nRefs: 1, depth: 1, bytes: 70, ex: n/a Problem occurred: java.lang.Exception: WFLYSEC0045: Exception encountered: at org.jboss.as.security.vault.VaultSession.initSecurityVault(VaultSession.java:192) at org.jboss.as.security.vault.VaultSession.startVaultSession(VaultSession.java:210) at org.jboss.as.security.vault.VaultTool.execute(VaultTool.java:193) at org.jboss.as.security.vault.VaultTool.main(VaultTool.java:83) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.jboss.modules.Module.run(Module.java:329) at org.jboss.modules.Main.main(Main.java:507) Caused by: org.jboss.security.vault.SecurityVaultException: java.lang.RuntimeException: PBOX00140: Unable to get keystore (/opt/jboss-eap/bin/vault/vault.keystore) at org.picketbox.plugins.vault.PicketBoxSecurityVault.init(PicketBoxSecurityVault.java:210) at org.jboss.as.security.vault.VaultSession.initSecurityVault(VaultSession.java:189) ... 9 more Caused by: java.lang.RuntimeException: PBOX00140: Unable to get keystore (/opt/jboss-eap/bin/vault/vault.keystore) at org.picketbox.plugins.vault.PicketBoxSecurityVault.getKeyStore(PicketBoxSecurityVault.java:691) at org.picketbox.plugins.vault.PicketBoxSecurityVault.init(PicketBoxSecurityVault.java:205) ... 10 more Caused by: java.io.IOException: Invalid secret key format at com.sun.crypto.provider.JceKeyStore.engineLoad(JceKeyStore.java:853) at java.security.KeyStore.load(KeyStore.java:1445) at org.picketbox.util.KeyStoreUtil.getKeyStore(KeyStoreUtil.java:201) at org.picketbox.util.KeyStoreUtil.getKeyStore(KeyStoreUtil.java:151) at org.picketbox.plugins.vault.PicketBoxSecurityVault.getKeyStore(PicketBoxSecurityVault.java:688) ... 11 more
Resolução
Esse problema foi rastreado no BZ / JIRA a seguir e a correção será incluÃda no EAP 7.1 CP3 e no EAP 6.4 CP21. A correção de bug é o jboss-modules adicionando o pacote com.sun.crypto.provider internamente, para que a solução alternativa a seguir não seja mais necessária para as versões futuras:
- EAP 6.4.z: https://bugzilla.redhat.com/show_bug.cgi?id=1569958
- EAP 7.1.z: https://issues.jboss.org/browse/JBEAP-14661
Até o EAP 7.1 CP3 e o EAP 6.4 CP21 serem lançados, você pode solucionar o problema adicionando o com.sun.crypto.provider ao JBOSS_MODULES_SYSTEM_PKGS (que, por sua vez, adiciona o valor à propriedade do sistema jboss.modules.system.pkgs):
- No standalone.conf ou domain.conf (dependendo do modo que está sendo usado), localizado em JBOSS_HOME/bin/ set ou inclua com.sun.crypto.provider no final da variável JBOSS_MODULES_SYSTEM_PKGS:
Esse problema ocorre no script vault.sh, esse comando não lê o arquivo conf (standalone.conf ou domain.conf). Até que o patch seja lançado, use JAVA_OPTS para passar a propriedade de sistema jboss.modules.system.pkgs ao executar o vault.sh, por exemplo:
JAVA_OPTS="-Djboss.modules.system.pkgs=com.sun.crypto.provider"
[root@wk vault]# JAVA_OPTS="-Djboss.modules.system.pkgs=com.sun.crypto.provider" ../vault.sh --keystore /opt/jboss-eap/bin/vault/vault.keystore --keystore-password vault22 --alias vault --vault-block vb --attribute password --sec-attr redhat --enc-dir /opt/jboss-eap/bin/vault/ --iteration 50 --salt 1234abcd ========================================================================= JBoss Vault JBOSS_HOME: /opt/jboss-eap JAVA: java ========================================================================= May 11, 2020 7:11:19 AM org.picketbox.plugins.vault.PicketBoxSecurityVault init INFO: PBOX00361: Default Security Vault Implementation Initialized and Ready WFLYSEC0047: Secured attribute value has been stored in Vault. Please make note of the following: ******************************************** Vault Block:vb Attribute Name:password Configuration should be done as follows: VAULT::vb::password::1 ******************************************** WFLYSEC0048: Vault Configuration in WildFly configuration file: ******************************************** ...
No comments