Capítulo 18. Criptografia da Senha Keystore num Conector Tomcat
O JBoss Web está baseado no Apache Tomcat.
O SSL com o Tomcat requer um conector de segurança. Isto significa que a senha keystore/truststore não pode ser passada como um atributo no elemento conector do arquivo
server.xml do Tomcat.
Recomenda-se um trabalho de entendimento do JaasSecurityDomain que suporta os keystores, truststores e senha baseados na criptografia.
Refira-se ao Capítulo 13, Protocolo de Senha Remota de Segurança e Capítulo 17, Criptografia das Senhas de Fonte de Dados para informações de suporte e procedimentos relacionados.
Procedimento 18.1. Criptografia da Senha Keystore do Recipiente Tomcat
Anexe o elemento conector
Adicione o elemento conector aoserver.xmlno$JBOSS_HOME/server/$PROFILE/deploy/jbossweb.sar<!-- SSL/TLS Connector with encrypted keystore password configuration --> <Connector port="8443" address="${jboss.bind.address}" maxThreads="100" minSpareThreads="5" maxSpareThreads="15" scheme="https" secure="true" clientAuth="true" sslProtocol="TLS" securityDomain="java:/jaas/encrypt-keystore-password" SSLImplementation="org.jboss.net.ssl.JBossImplementation" > </Connector>.Configuração do JaasSecurityDomain MBean
Consulte o JaasSecurityDomain MBean no arquivo$JBOSS_HOME/server/$PROFILE/deploy/security-service.xml.Crie o arquivo caso ele ainda não exista. A amostra do código descreve o conteúdo solicitado quando o arquivo não existir. Caso você já tenha umsecurity-service.xml, anexe o bloqueio do elemento <mbean> ao arquivo.<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:localhost.keystore</attribute> <attribute name="KeyStorePass">{CLASS}org.jboss.security.plugins.FilePassword:${jboss.server.home.dir}/conf/keystore.password</attribute> <attribute name="Salt">welcometojboss</attribute> <attribute name="IterationCount">13</attribute> </mbean> </server>O Salt e IterationCount são variáveis que definem a intensidade de sua senha criptografada, de forma que você pode variar isto da maneira que é apresentada. Certifique-se de gravar novos valores e usá-los quando gerando a senha criptografada.Nota
O Salt deve possuir pelo menos oito caracteres.Geração de uma senha criptografada
A configuração <mbean> especifica que o keystore está armazenado no arquivojboss-as/server/$PROFILE/conf/localhost.keystore. O <mbean> também especifica que o arquivo de senha criptografado está armazenado no arquivojboss-as/server/$PROFILE/conf/keystore.password.Você deve criar um arquivolocalhost.keystore.Execute o seguinte comando no diretóriojboss-as/server/$PROFILE/conf.[conf]$ java -cp $JBOSS_HOME/lib/jbosssx.jar \org.jboss.security.plugins.FilePassword welcometojboss 13 unit-tests-server keystore.password
Este comando usa um jbosssx.jar como classpath (-cp) e o puglin de segurança FilePassword para criação de um arquivokeystore.passwordcom a senha configurada paraunit-tests-server. Você deverá fornecer os parâmetros salt e interation configurados nos elementos <mbean> <attribute> do JaasSecurityDomain, com o objetivo de certificar-se de que tem permissão para criar um arquivokeystore.password.Você pode executar este comando no diretório/conf, de forma que o arquivokeystore.passwordé salvo a este diretório.Atualização do MBean do serviço Tomcat
Navegue ao$JBOSS_HOME/server/$PROFILE/deploy/jbossweb.sar/META-INF.Abra umjboss-service.xmle anexe a seguinte tag <depends> no final do arquivo. A adição da tag <depends> especifica que o Tomcat deve iniciar após ojboss.security:service=PBESecurityDomain.<depends>jboss.security:service=PBESecurityDomain</depends> </mbean> </server>
Exemplo 18.1. Definição do JaasSecurityDomain para pkcs12 keystores
Segundo o Procedimento 18.1, “Criptografia da Senha Keystore do Recipiente Tomcat”, os recipientes pkcs12 keystore referenciados pelo Tomcat Connector parecem-se com o seguinte:
<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="KeyStoreType">pkcs12</attribute>
<attribute name="KeyStoreURL">resource:localhost.keystore</attribute>
<attribute name="KeyStorePass">{CLASS}org.jboss.security.plugins.FilePassword:${jboss.server.home.dir}/conf/keystore.password</attribute>
<attribute name="Salt">welcometojboss</attribute>
<attribute name="IterationCount">13</attribute>
</mbean>18.1. Caso de Uso de Segurança Média
Um usuário não deseja criptografar a senha keystore, mas deseja externalizá-la (fora do
server.xml) ou deseja fazer uso de um JaasSecurityDomain pré-definido.
Procedimento 18.2. JaasSecurityDomain Pré-definido
Atualize o jboss-service.xml para adicionar um conector
Navegue ao$JBOSS_HOME/server/e adicione o bloqueio de código ao arquivo$PROFILE/deploy/jbossweb.sar/META-INFjboss-service.xml.<mbean code="org.jboss.security.plugins.JaasSecurityDomain" name="jboss.security:service=SecurityDomain"> <constructor> <arg type="java.lang.String" value="jbosstest-ssl"></arg> </constructor> <attribute name="KeyStoreURL">resource:localhost.keystore</attribute> <attribute name="KeyStorePass">unit-tests-server</attribute> </mbean>
Adicione uma tag <depends> ao serviço Tomcat
Navegue ao$JBOSS_HOME/server/$PROFILE/deploy/jbossweb.sar.Abra oserver.xmle anexe o seguinte elemento <depends> no final do arquivo:<depends>jboss.security:service=SecurityDomain</depends> </mbean> </server>
Defina o JaasSecurityDomain MBean num arquivo *-service.xml
Por exemplo, osecurity-service.xmlno diretório implantar:<mbean code="org.jboss.security.plugins.JaasSecurityDomain" name="jboss.security:service=SecurityDomain"> <constructor> <arg type="java.lang.String" value="jbosstest-ssl"></arg> </constructor> <attribute name="KeyStoreURL">resource:localhost.keystore</attribute> <attribute name="KeyStorePass">unit-tests-server</attribute> </mbean>
Nota
Caso você encontre este erro, lembre-se que a id do usuário deve possuir permissão de gravação do arquivo keystore que está rodando a Plataforma do Aplicativo JBoss Enterprise.