17.2. Identidade configurada com a Senha baseada na Criptografia - Password Based Encryption (PBE)
O
org.jboss.resource.security.JaasSecurityDomainIdentityLoginModule é um módulo de logon para definição de forma estatística de uma fonte de dados usando uma senha que foi criptografada pelo JaasSecurityDomain. Segue abaixo o formato base64 da senha de fonte de dados gerado usando o PBEUtils:
Procedimento 17.4. Criptografia da senha com os PBEUtils - Plataformas de versão 5.0 e 5.0.1
Este procedimento criptografa uma senha na Plataforma do Aplicativo JBoss Enterprise de versões 5.0 e 5.0.1.
- Execute o comando:
java -cp jboss-as/common/lib/jbosssx.jar org.jboss.security.plugins.PBEUtils \ salt count domain-password data-source-password
Resultado:A senha criptografada é exibida.
Procedimento 17.5. Criptografia da senha com PBEUtils - Platforma da versão 5.1
Este procedimento criptografa uma senha da Plataforma do Aplicativo JBoss Enterprise de versões 5.1 e versões superiores.
- Execute o comando:
java -cp jboss-as/lib/jbosssx.jar org.jboss.security.plugins.PBEUtils \ salt count domain-password data-source-password
Resultado:A senha criptografada é exibida.
Os parâmetros para os
PBEUtils são os seguintes:
- salt
- O atributo Salt a partir do JaasSecurityDomain (Ele deve conter oito caracteres).
- contagem
- O atributo IterationCount a partir do domínio JaasSecurity.
- senha-domínio
- A senha de texto plano mapeada ao atributo KeyStorePass a partir do JaasSecurityDomain.
- senha-fonte-de-dados
- A senha de texto plano para a fonte de dados que deve ser criptografado com a senha JaasSecurityDomain.
O Exemplo 17.3, “Amostra do comando PBEUtils ” fornece uma amostra do comando com seu resultado.
Exemplo 17.3. Amostra do comando PBEUtils
java -cp jbosssx.jar org.jboss.security.plugins.PBEUtils abcdefgh 13 master password Encoded password: 3zbEkBDfpQAASa3H39pIyP
Adiciona a seguinte política do aplicativo ao arquivo
$JBOSS_HOME/server/$PROFILE/conf/login-config.xml.
<application-policy name="EncryptedHsqlDbRealm"> <authentication> <login-module code= "org.jboss.resource.security.JaasSecurityDomainIdentityLoginModule" flag = "required"> <module-option name="username">sa</module-option> <module-option name="password">E5gtGMKcXPP</module-option> <module-option name="managedConnectionFactoryName"> jboss.jca:service=LocalTxCM,name=DefaultDS </module-option> <module-option name="jaasSecurityDomain"> jboss.security:service=JaasSecurityDomain,domain=ServerMasterPassword </module-option> </login-module> </authentication> </application-policy>
O
$JBOSS_HOME/docs/examples/jca/hsqldb-encrypted-ds.xml ilustra a configuração da fonte de dados juntamente com a configuração JaasSecurityDomain para o keystore:
<?xml version="1.0" encoding="UTF-8"?>
<!-- The Hypersonic embedded database JCA connection factory config
that illustrates the use of the JaasSecurityDomainIdentityLoginModule
to use encrypted password in the data source configuration.
$Id: hsqldb-encrypted-ds.xml,v 1.1.2.1 2004/06/04 02:20:52 starksm Exp $ -->
<datasources>
...
<application-policy name="EncryptedHsqlDbRealm">
<authentication>
<login-module code="org.jboss.resource.security.JaasSecurityDomainIdentityLoginModule"
flag = "required">
<module-option name="username">sa</module-option>
<module-option name="password">E5gtGMKcXPP</module-option>
<module-option name="managedConnectionFactoryName">
jboss.jca:service=LocalTxCM,name=DefaultDS
</module-option>
<module-option name="jaasSecurityDomain">
jboss.security:service=JaasSecurityDomain,domain=ServerMasterPassword
</module-option>
</login-module>
</authentication>
</application-policy>
<mbean code="org.jboss.security.plugins.JaasSecurityDomain"
name="jboss.security:service=JaasSecurityDomain, domain=ServerMasterPassword">
<constructor>
<arg type="java.lang.String" value="ServerMasterPassword"></arg>
</constructor>
<!-- The opaque master password file used to decrypt the encrypted
database password key -->
<attribute name="KeyStorePass">{CLASS}org.jboss.security.plugins.FilePassword:${jboss.server.home.dir}/conf/server.password</attribute>
<attribute name="Salt">abcdefgh</attribute>
<attribute name="IterationCount">13</attribute>
</mbean>
<!-- This mbean can be used when using in process persistent db -->
<mbean code="org.jboss.jdbc.HypersonicDatabase"
name="jboss:service=Hypersonic,database=localDB">
<attribute name="Database">localDB</attribute>
<attribute name="InProcessMode">true</attribute>
</mbean>
...
</datasources>
Atenção
Lembre-se de usar o mesmo Salt e IterationCount no MBean que foi usado durante a etapa de geração da senha.
Nota
Quando inicializando um serviço que depende da fonte de dados criptografada, o erro
java.security.InvalidAlgorithmParameterException: Parameters missing é exibido quando o seguinte MBean não for inicializado como serviço:
(jboss.security:service=JaasSecurityDomain,domain=ServerMasterPassword)
Adicione o seguinte elemento de forma que o MBean inicie antes do banco de dados, conforme a amostra do código
hsqldb-encrypted-ds.xml apresentado anteriormente.
<depends>jboss.security:service=JaasSecurityDomain,domain=ServerMasterPassword</depends>