Encrypt Keystore Password no JBoss AS 6.1 / 5.1
Olá a todos
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.
