Encrypt Keystore Password no JBoss AS 6.1 / 5.1

Posted on Updated on

Olá a todos :D

Hoje vamos aprender como encriptar a senha do keystore/certificado que fica configurado no connector HTTPs no server.xml do JBoss. Em configurações normais quando habilitamos o HTTPs configuramos a caminho e password dos certificados em texto puro no connector mas essa não é um boa pŕatica, veja abaixo:

<Connector protocol="HTTP/1.1" SSLEnabled="true"
    port="${jboss.web.https.port}" address="${jboss.bind.address}"
    scheme="https" secure="true" clientAuth="false"
    keystoreFile="${jboss.server.home.dir}/conf/example.keystore"
    keystorePass="changeit" sslProtocol = "TLS" />

Se você quiser encriptar a senha da keystore então a sintaxe acima não é necessária. A sintaxe correta seria:

<Connector port="${jboss.web.https.port}" address="${jboss.bind.address}"
   maxThreads="100" minSpareThreads="5" maxSpareThreads="15"
   scheme="https" secure="true" clientAuth="false"
   sslProtocol="TLS"
   securityDomain="java:/jaas/encrypt-keystore-password"
   SSLImplementation="org.jboss.net.ssl.JBossImplementation" >
</Connector>

O próximo passo é configurar MBean JaasSecurityDomain. Você precisa criar o arquivo JBOSS_HOME/server//deploy/security-service.xml e adicionar o conteúdo abaixo:

<server>
   <mbean code="org.jboss.security.plugins.JaasSecurityDomain"
      name="jboss.security:service=PBESecurityDomain">
      <constructor>
         <arg type="java.lang.String" value="encrypt-keystore-password"></arg>
      </constructor>
      <attribute name="KeyStoreURL">resource:example.keystore</attribute>
      <attribute name="KeyStorePass">{CLASS}org.jboss.security.plugins.FilePassword:${jboss.server.home.dir}/conf/keystore.password</attribute>
      <attribute name="Salt">mysaltmagnani</attribute>
      <attribute name="IterationCount">13</attribute>
      <!--
        <attribute name="KeyStoreType">pkcs12</attribute>
       -->
   </mbean>
</server>

Você pode alterar o valor de salt e iterationCount conforme a sua necessidade.

O próximo passo é criar o arquivo de senha. Execute o seguinte comando:

[mmagnani@dhcp-32 conf]$ pwd
/home/mmagnani/WorkSpace/jboss-org/jboss-6.1.0.Final/server/blog/conf
[mmagnani@dhcp-32 conf]$ java -cp ../../../lib/jbosssx.jar org.jboss.security.plugins.FilePassword mysaltmagnani 13 password keystore.password

O arquivo keystore.password foi criado.

Agora para finalizar temos que dizer ao container web para iniciar serviço PBESecurityDomain(security-service.xml) que havíamos criado.

Edite o arquivo JBOSS_HOME/server//deploy/jbossweb.sar/META-INF/jboss-beans.xml e adicione PBESecurityDomain abaixo:

<?xml version="1.0" encoding="UTF-8"?>
<deployment xmlns="urn:jboss:bean-deployer:2.0">

   <bean name="WebServer"
         class="org.jboss.web.tomcat.service.deployers.TomcatService">

     ....

       <depends>jboss.security:service=PBESecurityDomain</depends>

     ....

  </bean>
</deployment>

Inicie o JBoss e verifique se o HTTPs está funcionando corretamente. Para gerar o certificado eu utilizei o comando abaixo:

keytool -genkeypair -keystore example.keystore -storepass password -keypass password -keyalg RSA -validity 180 -alias example -dname "cn=Mauricio Magnani,o=Home,c=BR"

Espero que tenha ajudado, Abraços.

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s