segunda-feira, 16 de maio de 2022

Erro "Invalid secret key format" ao iniciar o Jboss na migração do Java da Oracle para o OpenJDK

         Neste artigo vou mostrar a solução para o erro java.io.IOException: Invalid secret key format, que ocorre ao usar o Vault do Jboss para armazenar senhas criptografadas. Esse erro ocorre no módulo PicketBox, que é um framework de segurança Java para prover aos desenvolvedores as seguintes funcionalidades:


  • Suporte a autenticação;
  • Suporte a autorização;
  • Suporte a auditoria;
  • Etc.


        Ao usar o OpenJDK o módulo Picketbox não tem acesso ao módulo "sun.jdk", então ele não pode usar a classe "com.sun.crypto.provider.SealedObjectForKeyProtector", ocasionando em um dos erros abaixo: 


Caused by: java.io.IOException: Invalid secret key format
    at com.sun.crypto.provider.JceKeyStore.engineLoad(JceKeyStore.java:856)
    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

ou

  Caused by: java.io.IOException: Invalid secret key format
  at com.sun.crypto.provider.JceKeyStore.engineLoad(JceKeyStore.java:856)
  at java.security.KeyStore.load(KeyStore.java:1445) [rt.jar:1.8.0_191-1-redhat]
  at org.wildfly.security.credential.store.impl.KeyStoreCredentialStore.load(KeyStoreCredentialStore.java:859) [wildfly-elytron-1.6.1.Final-redhat-00001.jar:1.6.1.Final-redhat-00001]
  ... 11 more

        

        Para corrigir o problema, é necessário adicionar ao PicketBox a dependência ao "sun.jdk", no arquivo %JBOSS_HOME%/modules/system/layers/base/org/picketbox/main/module.xml a seguinte linha:


<module name="sun.jdk"/>


            Dessa forma, o módulo em questão é carregado e o uso do Vault e criptografia do JBoss funciona normalmente como no JDK da Oracle.



Fonte:

https://picketbox.jboss.org/

http://www.mastertheboss.com/jbossas/jboss-security/solving-java-io-ioexception-invalid-secret-key-format/

https://issues.redhat.com/browse/JBEAP-14660

 

quarta-feira, 4 de maio de 2022

Criando um link simbólico para um diretório no Linux

          Nesse artigo vou mostrar como links simbólicos no Linux. Links simbólicos servem para apontarmos para um diretório ou arquivo de outro lugar. O comando é o seguinte:

 

Para isso usamos o comando ln:

 

$ ln -sf /diretorioOrigem /diretorioLink

 

No parâmetro “-sf” o s é para especificar que vai ser um link simbólico e o f é pra forçar a criação caso o destino já seja um link simbólico. 

terça-feira, 3 de maio de 2022

Mudando usuário e grupo de um arquivo no Linux (chown e chgrp)

         Nesse artigo vou mostrar como mudar o proprietário de pastas e arquivos no Linux. Vamos imaginar que temos a pasta /home/usuario/meus_arquivos e queremos atribuir a um usuário e grupo específicos estes arquivos arquivos:

 

Para isso usamos o comando chown:

 

chown -R nomeUsuario:nomeGrupo /home/usuario/meus_arquivos/

 

O parâmetro “-R” é para aplicar de modo recursivo, assim ele vai alterar as pastas, subpastas e arquivos que existirem na pasta definida. Logo em seguida vem o nome do usuario e nome do grupo que serão atribuídos como donos e são separados por ":" (dois pontos)  e depois a pasta a ter o dono alterado. Não é necessário informar o grupo caso queira mudar só o usuário, e se quiser mudar só o grupo use o chgrp.


Isso é bastante usado no Linux pois determina quem pode fazer determinadas coisas com os arquivos sem ter que dar permissões para todo mundo.

terça-feira, 12 de abril de 2022

Glowroot - Ferramenta grátis para profiling remoto de aplicações Java

       Hoje vou apresentar uma ferramenta de profiling gratuita para aplicações Java, o Glowroot. 
   
    Mas primeiro uma rápida explicação dobre o que é profiling. Profiling é o processo de monitoramento e medição de desempenho das aplicações para manutenção e melhoria de performance e busca de erros que levam a queda do sistema. 
    
    Existe uma vasta variedade de programas que fazem esse tipo de serviço, a maioria deles é pago, e os gratuitos geralmente são bem limitados ou não tem uma interface web para acesso remoto. O Glowroot é uma boa opção porque é gratuito e tem a interface web, facilitando o trabalho. Antes dele eu usava o Jvisualvm que já vem por padrão nas JDKs (até a versão 8 se não me engano) mas é bem limitado e exige que o servidor tenha a parte gráfica habilitada e o acesso direto ao programa. 
    
    O Glowroot permite acompanharmos o uso de memória, mostra as falhas a nível de métodos, permite vermos as consultas mais pesadas da aplicação, etc. Ou seja, uma ferramenta completa e de fácil instalação. 

     A ferramenta pode ser baixada no seguinte endereço: https://glowroot.org/ 
    
    Lá também tem todas as instruções de instalação e uma demo da aplicação rodando como na imagem abaixo:

quinta-feira, 31 de março de 2022

Pegando valores de Propriedades do Sistema e Arquivos de Configuração .properties

           Nesse artigo vou mostrar como pegar valores de propriedades do sistema, seja carregando uma variável de ambiente como as setadas no standalone.xml do JBoss ou de um arquivo de propriedades .properties.

         

Primeiro vamos as variáveis de ambiente como as definidas no standalone.xml. Nesse arquivo, temos uma seção chamada <system-properties> e nela temos as propriedades definidas como:

 

<property name=”chave” value=”valor” />

 

Esses valores podem ser resgatados da seguinte forma:

 

String configDir = System.getProperty("chave");

 

     Geralmente toda aplicação tem também um ou mais arquivos de configuração com a extensão .properties. São arquivos que tem chave e valor também e são separados pelo sinal de “=” (igual). Esses arquivos podem ser carregados da seguinte forma:

 

InputStream in = new FileInputStream("diretorioDoArquivo" + "nomeDoArquivo.properties");

java.util.Properties configuracaoProperties = new Properties();

configuracaoProperties.load(in);

in.close();

 

Depois usa-se assim:

 

configuracaoProperties.getProperty("PalavraChave");

 

Para este artigo é só. Tem algumas outras curiosidades nesse artigo sobre System Properties:

https://jboss-books.gitbooks.io/wildfly/content/configuracao/system-properties/system_properties.html

Compactando arquivos no linux

            Nesse artigo vou mostrar como compactar e descompactar arquivos e diretórios no Linux. Vamos imaginar que temos a pasta /home/usuario/meus_arquivos e queremos compactar seus arquivos:

 

Para compactar, usamos:

 

$ zip -r nomeArquivoZip.zip /home/usuario/meus_arquivos/

 

O parâmetro “-r” é de recursivo, assim ele vai incluir as pastas, subpastas e arquivos que existirem na pasta definida. Logo em seguida vem o nome do arquivo zip que será criado, e depois a pasta a ser compactada.

 

Para zipar apenas alguns arquivos, podemos separar os arquivos por espaço.

 

Agora para descompactar usamos o unzip:

 

$ unzip nomeArquivoZip.zip

 

             Para ver o conteúdo sem descompactar podemos passar o parâmetro -l.

segunda-feira, 21 de março de 2022

Git - Mudando mensagem de um commit

       As vezes fazemos uma aletaração no código, adicionamos para stage com o "git add ..." mas na mensagem do commit esquecemos de alguma coisa (por exemplo: algumas empresas exigem o número do ticket no commit), e então precisamos alterar a mensagem desse commit. Como fazer isso? Muito simples, basta usar o comando


 git commit --amend -m "sua nova mensagem!"


e então fazer o git push!


Pra esse artigo é só!