Guia de Segurança
Para uso com o JBoss Enterprise Application Plataform 6
Resumo
Parte I. Segurança para o JBoss Enterprise Application Plataform 6
Capítulo 1. Introdução
1.1. Segurança
1.2. Segurança para o Administrador do Sistema
1.3. Segurança para o Desenvolvedor J2EE
- Desenvolvedor do Aplicativo - responsabilidade pela segurança no nível de desenvolvimento e para definir as funções, as regras e a lógica comercial na lógica do aplicativo.
- Assembler do Aplicativo - responsabilidade de garantia de que o empacotamento do EAR's e WAR's é realizado de forma que as vulnerabilidades do aplicativo cruzado são minimizadas.
- Implantação do Aplicativo - responsabilidade de segurança da implantação dos EAR's e determinação e mantimento das listas de controle de acesso.
Parte II. Segurança da Plataforma
Capítulo 2. O Subsistema de Segurança
2.1. Subsistema de Segurança
Caso o modo de sujeito de cópia profunda for desabilitado (por default), a cópia de uma estrutura de dados de segurança faz uma referência à original, ao invés de copiar toda a estrutura de dados. Este comportamento é mais eficiente, porém é sujeito à corrupção de dados caso múltiplos threads com a mesma identidade limpa o sujeito por um esvaziamento ou uma operação de saída.
Você pode determinar as propriedades de segurança do sistema, que é aplicado ao java.security.Security class
.
O security domain é um conjunto de configurações de segurança declarativa Java Authentication and Authorization Service (JAAS) que um ou mais aplicativos usam para controlar a autenticação, autorização, auditoria e mapeamento. Os security domains estão incluídos por default: jboss-ejb-policy
, jboss-web-policy
e other
. Você pode criar quantos security domains você venha precisar para acomodar as necessidades de seus aplicativos.
2.2. Estrutura do Subsistema de Segurança
Exemplo 2.1. Amostra do Subsistema de Segurança
<subsystem xmlns="urn:jboss:domain:security:1.2"> <security-management> ... </security-management> <security-domains> <security-domain name="other" cache-type="default"> <authentication> <login-module code="Remoting" flag="optional"> <module-option name="password-stacking" value="useFirstPass"/> </login-module> <login-module code="RealmUsersRoles" flag="required"> <module-option name="usersProperties" value="${jboss.domain.config.dir}/application-users.properties"/> <module-option name="rolesProperties" value="${jboss.domain.config.dir}/application-roles.properties"/> <module-option name="realm" value="ApplicationRealm"/> <module-option name="password-stacking" value="useFirstPass"/> </login-module> </authentication> </security-domain> <security-domain name="jboss-web-policy" cache-type="default"> <authorization> <policy-module code="Delegating" flag="required"/> </authorization> </security-domain> <security-domain name="jboss-ejb-policy" cache-type="default"> <authorization> <policy-module code="Delegating" flag="required"/> </authorization> </security-domain> </security-domains> <vault> ... </vault> </subsystem>
<security-management>
, <subject-factory>
e <security-properties>
não estão presentes na configuração default. Os elementos <subject-factory>
e <security-properties>
foram substituídos a partir do JBoss Enterprise Application Plataform 6.1.
2.3. Criptografia
2.4. Segurança Declarativa
2.5. Configuração do Subsistema de Segurança
- <security-management>
- Esta seção descreve os comportamentos de alto nível do subsistema de segurança. Cada configuração é opcional. Não é comum alterar qualquer uma dessas configurações, a não ser para o modo do sujeito de cópia profunda.
Opções Descrição deep-copy-subject-mode Especifica se é que copiar ou conectar os tokens de segurança para uma segurança adicional do thread.authentication-manager-class-name Especifica uma classe de implementação do AuthenticationManager a ser usada.default-callback-handler-class-name Especifica o nome de classe global para a implementação CallbackHandler a ser usada com os módulos de login.authorization-manager-class-name Especifica o nome da classe da implementação AuthorizationManager alternativa.audit-manager-class-name Especifica o nome da classe da implementação AuditManager alternativa.identity-trust-manager-class-name Especifica o nome da classe da implementação IdentityTrustManager a ser usado.mapping-manager-class-name Especifica o nome da classe da implementação MappingManager para uso. - <subject-factory>
- A criação do sujeito controla a criação das instâncias do sujeito. Isto pode usar o gerenciador da autenticação para verificar o chamador. O uso principal da fábrica do sujeito é para os componentes JCA para estabelecer um sujeito. Não é necessário modificar a fábrica do sujeito.
- <security-domains>
- O elemento do contêiner que mantém os security domains múltiplos. O security domain pode conter informação sobre o módulo autenticação, autorização e auditoria assim como a autenticação JASPI e a configuração JSSE. O seu aplicativo especificaria um security domain para gerenciar sua informação de segurança.
- <security-properties>
- Contém os nomes e valores das propriedades que são configuradas na classe java.security.Security.
Capítulo 3. Segurança da Interface de Gerenciamento
3.1. Segurança das Interfaces de Gerenciamento
Num ambiente de teste, é típico executar o JBoss Enterprise Application Plataform 6 sem camada de segurança nas interfaces de gerenciamento, compostas do Management Console, Management CLI e qualquer outra implementação do API. Isto permite alterações rápidas de configuração e desenvolvimento .
3.2. Configuração de Segurança do Usuário Default
Todas as interfaces de gerenciamento do JBoss Enterprise Application Plataform 6 são asseguradas por default. Esta segurança leva duas formas diferentes:
- As interfaces locais são asseguradas pelo contrato SASL entre os clientes locais e o servidor que eles conectam. Esse mecanismo de segurança é baseado na habilidade do cliente acessar o filesystem local. Isto é devido uma vez que o acesso ao filesystem local permitiria o cliente adicionar um usuário ou, do contrário, alterar a configuração para impedir outros mecanismos de segurança. Isto adere o princípio de que se um acesso físico ao filesystem for atingido, outros mecanismos de segurança serão supérfluos. O mecanismo acontece em quatro etapas:
Nota
O acesso HTTP é considerado remoto, mesmo que você conecte ao localhost usando o HTTP.- O cliente envia uma mensagem ao servidor que inclui uma solicitação para autenticar ao mecanismo SASL local.
- O servidor gera o token de uma vez, o grava a um arquivo único e envia uma mensagem ao cliente com o caminho completo ao do arquivo.
- O cliente lê o token a partir do arquivo e o envia ao servidor, verificando que isto possui acesso local ao filesystem.
- O servidor verifica o token e exclui o arquivo.
- Os clientes remotos, incluindo os clientes HTTP locais, usam a segurança baseado no realm. O realm default com permissões para configurar o JBoss Enterprise Application Plataform 6 remotamente usando interfaces de gerenciamento é
ManagementRealm
. O script é fornecido que o permite adicionar usuários a este realm (ou realms que você criou). Para maiores informações sobre a adição de usuários, refira-se ao capítulo de Inicialização do guia de instalação para o JBoss Enterprise Application Plataform 6. Para cada usuário, o nome de usuário, a senha hash e o realm são stored num arquivo.- Servidor Autônomo
JPP_HOME/standalone/configuration/mgmt-users.properties
Mesmo que os conteúdos domgmt-users.properties
estiverem mascarados, o arquivo deve continuar a ser tratado como um arquivo confidencial. Recomenda-se que isto seja configurado para o modo do arquivo de600
, que apenas fornece o acesso de leitura e gravação pelo proprietário do arquivo.
3.3. Visão Geral da Configuração da Interface de Gerenciamento Avançada
EAP_HOME/domain/configuration/host.xml
ou EAP_HOME/standalone/configuration/standalone.xml
controla quais interfaces de rede o processo do host controller efetua o bind, quais os tipos de sistema de autenticação estão disponíveis e qual o tipo de sistema de autenticação é usado para autenticar os usuários em cada interface. Este tópico descreve como configurar as Interfaces de Gerenciamento para melhor acomodar o seu ambiente.
<management>
que inclui diversos atributos configuráveis e os três seguintes elementos filho configuráveis. Os security realms e as conexões outbound são primeiramente definidos e então aplicados às interfaces de gerenciamento como atributos.
<security-realms>
<outbound-connections>
<management-interfaces>
O security realm é responsável pela autenticação e autorização dos usuários permitidos a administrar o JBoss Enterprise Application Plataform através do Management API, Management CLI ou Management Console baseado na web.
ManagementRealm
e ApplicationRealm
. Cada um desses security realms usa um arquivo -users.properties
para aplicar o store nos usuários e senha com hash e um -roles.properties
para aplicar o store nos mapeamentos entre usuários e funções. O suporte é também incluído no security realm habilitado LDAP.
Nota
Alguns security realms conectam às interfaces externas tais como o servidor LDAP. Uma conexão outbound define como realizar esta conexão. Um tipo de conexão pré-definido, ldap-connection
, configura todos os atributos requeridos e opcionais para conexão ao servidor LDAP e verificação do credencial.
A interface de gerenciamento inclui propriedades sobre como conectar e como configurar o JBoss Enterprise Application Plataform. Tal informação inclui a interface de rede nomeada, porta, security realm e outras informações configuráveis sobre a interface. As duas interfaces estão incluídas numa instalação default:
- O
http-interface
é uma configuração para o Management Console baseado na web. - O
native-interface
é a configuração para o Management CLI da linha de comando e Management API como o REST.
3.4. Desabilitação da Interface de Gerenciamento HTTP
Nota
console-enabled-attribute
da interface HTTP para false
, ao invés de desabilitar a interface completamente.
/host=master/core-service=management/management-interface=http-interface/:write-attribute(name=console-enabled,value=false)
Exemplo 3.1. Leitura da Configuração da Interface HTTP
/host=master/core-service=management/management-interface=http-interface/:read-resource(recursive=true,proxies=false,include-runtime=false,include-defaults=true)
{
"outcome" => "success",
"result" => {
"console-enabled" => true,
"interface" => "management",
"port" => expression "${jboss.management.http.port:9990}",
"secure-port" => undefined,
"security-realm" => "ManagementRealm"
}
}
Exemplo 3.2. Remoção da Interface HTTP
/host=master/core-service=management/management-interface=http-interface/:remove
Exemplo 3.3. Recriação da Interface HTTP
/host=master/core-service=management/management-interface=http-interface/:write-attribute(name=console-enabled,value=true)
/host=master/core-service=management/management-interface=http-interface/:write-attribute(name=interface,value=management)
/host=master/core-service=management/management-interface=http-interface/:write-attribute(name=port,value=${jboss.management.http.port:9990})
/host=master/core-service=management/management-interface=http-interface/:write-attribute(name=security-realm,value=ManagementRealm)
3.5. Remoção da Autenticação Silenciosa do Default Security Realm
A instalação default do JBoss Enterprise Application Plataform 6 contém um método de autenticação silenciosa para o usuário Management CLI. Isto permite o usuário local a habilidade de acessar o Management CLI sem a autenticação do nome de usuário e senha. Esta funcionalidade é habilitada como conveniência e assiste usuários locais executando os scripts Management CLI sem o requerimento de autenticação. Ela é considerada um recurso útil permitindo o acesso à configuração local e também fornece ao usuário a habilidade de adicionar seus próprios detalhes ou desabilitar as checagens de segurança.
local
sem a seção security-realm
do arquivo de configuração. Isto é aplicado a ambos standalone.xml
para a instância do Servidor Autônomo ou host.xml
para o Managed Domain. Você deve considerar apenas a remoção do elemento local
, caso entenda o impacto que isto tem em sua configuração do servidor em particular.
local
visível na seguinte amostra.
Exemplo 3.4. Amostra do elemento local
no security-realm
.
<security-realms> <security-realm name="ManagementRealm"> <authentication> <local default-user="$local"/> <properties path="mgmt-users.properties" relative-to="jboss.server.config.dir"/> </authentication> </security-realm> <security-realm name="ApplicationRealm"> <authentication> <local default-user="$local" allowed-users="*"/> <properties path="application-users.properties" relative-to="jboss.server.config.dir"/> </authentication> <authorization> <properties path="application-roles.properties" relative-to="jboss.server.config.dir"/> </authorization> </security-realm> </security-realms>
Procedimento 3.1. Remoção da Autenticação Silenciosa do Default Security Realm
Remoção da autenticação silenciosa com o Management CLI
Remova o elementolocal
a partir do Realm de Gerenciamento e Realm do Aplicativo conforme solicitado.- Remova o elemento
local
a partir do Realm de Gerenciamento.Servidores Autônomos
/core-service=management/security-realm=ManagementRealm/authentication=local:remove
Managed Domains
/host=HOST_NAME/core-service=management/security-realm=ManagementRealm/authentication=local:remove
- Remova o elemento
local
a partir do Realm do Aplicativo.Servidores Autônomos
/core-service=management/security-realm=ApplicationRealm/authentication=local:remove
Managed Domains
/host=HOST_NAME/core-service=management/security-realm=ApplicationRealm/authentication=local:remove
O modo de autenticação silenciosa é removido do ManagementRealm
e ApplicationRealm
.
3.6. Desabilitação do Acesso Remoto ao Subsistema JMX
/profile=default
do comando. Para o servidor autônomo, remova aquela porção do comando completamente.
Nota
Exemplo 3.5. Remoção do Conector Remoto do Subsistema JMX
/profile=default/subsystem=jmx/remoting-connector=jmx/:remove
Exemplo 3.6. Remova o subsistema JMX
/profile=default/subsystem=jmx/:remove
3.7. Configuração dos Security Realms para as Interfaces de Gerenciamento
Esta amostra apresenta a configuração default para o ManagementRealm
security realm. Isto usa um arquivo chamado mgmt-users.properties
para efetuar o store em sua própria informação de configuração.
Exemplo 3.7. ManagementRealm default
/host=master/core-service=management/security-realm=ManagementRealm/:read-resource(recursive=true,proxies=false,include-runtime=false,include-defaults=true)
{
"outcome" => "success",
"result" => {
"authorization" => undefined,
"server-identity" => undefined,
"authentication" => {"properties" => {
"path" => "mgmt-users.properties",
"plain-text" => false,
"relative-to" => "jboss.domain.config.dir"
}}
}
}
Os seguintes comandos criam um novo security realm chamado TestRealm
e configuram o nome e diretório para o arquivo de propriedades relevantes.
Exemplo 3.8. Gravação de um Security Realm
/host=master/core-service=management/security-realm=TestRealm/:add
/host=master/core-service=management/security-realm=TestRealm/authentication=properties/:add(path=TestUsers.properties, relative-to=jboss.domain.config.dir)
Após adicionar um security realm, forneça o nome como referência à Interface de Segurança.
Exemplo 3.9. Adição de um Security Realm a uma Interface de Gerenciamento
host=master/core-service=management/management-interface=http-interface/:write-attribute(name=security-realm,value=TestRealm)
3.8. Vaults de Senha para Sequências Confidenciais
3.8.1. Sequências Confidenciais de Segurança nos Arquivos de texto limpo
3.8.2. Criação do Java Keystore para Sequências Confidenciais do Store
Pré-requisitos
- O comando
keytool
deve estar disponível para uso. Ele é fornecido pelo Java Runtime Environment (JRE). Localize o caminho para o arquivo. No Red Hat Enterprise Linux, isto é instalado no/usr/bin/keytool
.
Procedimento 3.2. Configuração do Java Keystore
Crie um diretório para realizar o store de seu keystore e outras informações criptografadas.
Crie um diretório para manter o seu keystore e outras informações importantes. O resto deste procedimento assume que o diretório é o/home/USER/vault/
.Determine os parâmetros para uso com o
keytool
.Determinação dos parâmetros da operação- alias
- O alias é um identificador único para o vault e outros dados stored no keystore. O alias no comando de amostra no final deste procedimento é o
vault
. Os Aliases diferenciam letra maiúscula e minúscula. - keyalg
- O algoritmo de uso na criptografia. O default é
DSA
. A amostra neste procedimento usa oRSA
. Verifique a documentação para seu JRE e sistema operacional para verificar quais das chances estão disponíveis. - keysize
- O tamanho da chave de criptografia impacta na dificuldade de criptografá-la através de força bruta. O tamanho atual das chaves é 1024. A amostra neste procedimento usa
1024
. - keystore
- O keystore é um banco de dados que mantém a informação criptografada e a informação de como criptografá-la. Caso você não deseje especificar o keystore, o default de uso do keystore é um arquivo chamado
.keystore
no seu diretório principal. A primeira vez que você adicionar dados ao keystore, ele será criado. A amostra neste procedimento usa ovault.keystore
keystore.
O comandokeystore
possui muitas outras opções. Refira-se à documentação para maiores informações sobre o seu JRE ou o seu sistema operacional.Determine as respostas às questões que o comando
keystore
irá perguntá-lo.Okeystore
precisa da seguinte informação com o objetivo de povoar a entrada keystore.- Senha Keystore
- Quando você criar um keystore, você deve determinar uma senha. Com o objetivo de trabalhar com o keystore no futuro, você precisará de uma senha. Crie uma senha difícil que você consiga se lembrar. O keystore é apenas seguro baseado em sua senha e a segurança do sistema de arquivo e sistema operacional que isto reside.
- Senha chave (opcional)
- Além da senha keystore, você pode especificar uma senha para cada chave que isto mantém. Com objetivo de usar uma chave, a senha precisa ser fornecida cada vez que ela é usada. Normalmente, esta facilidade não é usada.
- Primeiro nome e sobrenome
- Esta informação, e o resto da informação na lista, o orienta a identificar unicamente a chave e a posiciona numa hierarquia de outras chaves. Não é necessário nomeação, porém isto deve ser duas palavras e devem ser diferentes do nome da chave. A amostra neste procedimento usa o
Accounting Administrator
. Nos termos do diretório, isto torna-se common name do certificado. - Unidade organizacional
- Isto é uma única palavra que identifica quem usa o certificado. Isto pode ser o aplicativo ou a unidade comercial. A amostra neste procedimento usa o
AccountingServices
. Normalmente, todos os keystores usados por um grupo ou aplicativo usam a mesma unidade organizacional. - Organização
- Isto é normalmente uma representação de palavra única de seu nome de organização. Isto normalmente permanece o mesmo por todos os certificados usados por uma organização. Esta amostra usa o
MyOrganization
. - Cidade ou municipalidade
- A sua cidade.
- Estado ou província.
- O seu estado ou província, ou o equivalente para sua localidade.
- País
- Um código de duas letras de seu país.
Todas essas informações criarão juntas uma hierarquia para os seus keystores e certificados, garantindo que eles usem uma estrutura de nomeação consistente, porém únicas.Execute o comando
keytool
, fornecendo a informação que você obteve.Exemplo 3.10. Entrada e saída da amostra do comando
keystore
.$ keytool -genkey -alias vault -keyalg RSA -keysize 1024 -keystore /home/USER/vault/vault.keystore Enter keystore password: vault22 Re-enter new password:vault22 What is your first and last name? [Unknown]:
Accounting Administrator
What is the name of your organizational unit? [Unknown]:AccountingServices
What is the name of your organization? [Unknown]:MyOrganization
What is the name of your City or Locality? [Unknown]:Raleigh
What is the name of your State or Province? [Unknown]:NC
What is the two-letter country code for this unit? [Unknown]:US
Is CN=Accounting Administrator, OU=AccountingServices, O=MyOrganization, L=Raleigh, ST=NC, C=US correct? [no]:yes
Enter key password for <vault> (RETURN if same as keystore password):
O arquivo nomeado vault.keystore
é criado no diretório /home/USER/vault/
. Ele realiza o store numa chave única chamada vault
, que será usada para efetuar o store nas sequências criptografadas, tais como senhas, para o JBoss Enterprise Application Plataform.
3.8.3. Mascarando a Senha Keystore e Inicialização do vault da Senha
Pré-requisitos
- O aplicativo
EAP_HOME/bin/vault.sh
precisa ser acessado através da interface da linha de comando.
Execute o comando
vault.sh
.Execute oEAP_HOME/bin/util/vault.sh
. Inicie uma nova sessão interativa digitando0
.Insira o diretório onde os arquivos criptografados serão stored.
Este diretório deve ser bastante seguro, mas o JBoss Enterprise Application Plataform precisa estar apto a acessá-lo. Caso você tenha seguido a Seção 3.8.2, “Criação do Java Keystore para Sequências Confidenciais do Store”, o seu keystore está num diretório chamadovault/
no seu diretório principal. Esta amostra usa o/home/USER/vault/
do diretório.Nota
Não se esqueça de incluir a barra à direita no nome do diretório. Tanto use/
ou\
, dependendo de seu sistema operacional.Insira o caminho ao keystore.
Insira o caminho completo ao arquivo keystore. Esta amostra usa o/home/USER/vault/vault.keystore
.Criptografe a senha keystore.
As seguintes etapas criptografam a senha keystore, de forma que você pode usá-la nos arquivos de configuração e aplicativos de forma segura.Insira a senha keystore.
Quando solicitado, insira a senha keystore.Insira o valor salt.
Insira o valor salt de 8 caracteres. O valor salt, juntamente com a contagem de interação (abaixo), são usados para criar o valor hash.Insira a contagem de interação.
Insira o número para contagem de interagem.Anote a informação de senha mascarada.
A senha mascarada, o salt, e a contagem de interação são emitidas para a saída default. Anote-as numa localização segura. Um invasor poderia usá-las para criptografar a senha.Insira o alias do vault.
Quando solicitado, insira o alias do vault. Caso você tenha seguido a Seção 3.8.2, “Criação do Java Keystore para Sequências Confidenciais do Store” para criar o seu vault, o alias évault
.
Saia do console interativo.
Digiteexit
para sair do console interativo.
A sua senha keystore foi mascarada para uso nos arquivos de configuração e implantações. Além disso, o seu vault é inteiramente configurado e está pronto para uso.
3.8.4. Configuração do JBoss Enterprise Application Plataform para Uso do Vault de Senha
Antes de você poder mascarar as senhas e outros atributos confidenciais nos arquivos de configuração, você precisa fazer com que o JBoss Enterprise Application Plataform esteja ciente da senha do vault que os aplica o store e os descriptografa. Siga este procedimento para habilitar esta funcionalidade.
Pré-requisitos
Procedimento 3.3. Criação do Vault de Senha
Determine os valores corretos para o comando.
Determine os valores para os seguintes parâmetros, que são determinadas pelos comandos usados para criar o próprio keystore. Para maiores informações sobre a criação do keystore, refira-se aos seguintes tópicos Seção 3.8.2, “Criação do Java Keystore para Sequências Confidenciais do Store” e Seção 3.8.3, “Mascarando a Senha Keystore e Inicialização do vault da Senha”.Parâmetro Descrição KEYSTORE_URL O caminho do sistema do arquivo ou URI do arquivo keystore normalmente chamadovault.keystore
KEYSTORE_PASSWORD A senha usada para acessar o keystore. Esse valor deve ser mascarado.KEYSTORE_ALIAS O nome do keystore.SALT O salt usado para criptografar e descriptografar os valores keystore.ITERATION_COUNT O número de vezes que o algoritmo criptografar está sendo executado.ENC_FILE_DIR O caminho ao diretório a partir dos comandos keystore que estão sendo executados. Normalmente o diretório contendo a senha do vault.host (managed domain apenas) O nome do host que você está configurando.Use o Management CLI para habilitar o vault de senha.
Execute os seguintes comandos, dependendo se é que você usa o managed domain ou configuração do servidor autônomo. Substitua os valores no comando pelos valores da primeira etapa deste procedimento.Managed Domain
/host=YOUR_HOST/core-service=vault:add(vault-options=[("KEYSTORE_URL" => "PATH_TO_KEYSTORE"), ("KEYSTORE_PASSWORD" => "MASKED_PASSWORD"), ("KEYSTORE_ALIAS" => "ALIAS"), ("SALT" => "SALT"),("ITERATION_COUNT" => "ITERATION_COUNT"), ("ENC_FILE_DIR" => "ENC_FILE_DIR")])
Servidor Autônomo
/core-service=vault:add(vault-options=[("KEYSTORE_URL" => "PATH_TO_KEYSTORE"), ("KEYSTORE_PASSWORD" => "MASKED_PASSWORD"), ("KEYSTORE_ALIAS" => "ALIAS"), ("SALT" => "SALT"),("ITERATION_COUNT" => "ITERATION_COUNT"), ("ENC_FILE_DIR" => "ENC_FILE_DIR")])
Segue abaixo uma amostra do comando com os seguintes valores hipotéticos:/core-service=vault:add(vault-options=[("KEYSTORE_URL" => "/home/user/vault/vault.keystore"), ("KEYSTORE_PASSWORD" => "MASK-3y28rCZlcKR"), ("KEYSTORE_ALIAS" => "vault"), ("SALT" => "12438567"),("ITERATION_COUNT" => "50"), ("ENC_FILE_DIR" => "/home/user/vault/")])
O JBoss Enterprise Application Plataform é configurado para as sequências mascaradas e descriptografadas usando a senha do vault. Para adicionar as sequências ao vault e usá-las na sua configuração, refira-se ao seguinte tópico: Seção 3.8.5, “Store e Recuperação das Sequências Confidenciais Criptografas do Java Keystore”.
3.8.5. Store e Recuperação das Sequências Confidenciais Criptografas do Java Keystore
A inclusão de senhas e outras sequências confidenciais nos arquivos de configuração em texto plano não está segurado. O JBoss Enterprise Application Plataform inclui a habilidade de aplicar o store e mascarar essas sequências confidenciais num keystore criptografado e usa valores mascarados nos arquivos de configuração.
Pré-requisitos
- O aplicativo
EAP_HOME/bin/vault.sh
precisa ser acessado através da linha de comando.
Procedimento 3.4. Configuração do Java Keystore
Execute o comando
vault.sh
.Execute oEAP_HOME/bin/vault.sh
. Inicie a sessão interativa digitando0
.Insira o diretório onde arquivos criptografados sofrerão o store.
Caso você tenha seguido a Seção 3.8.2, “Criação do Java Keystore para Sequências Confidenciais do Store”, o seu keystore está num diretório chamadovault/
no seu diretório principal. Na maioria das vezes, faz sentido aplicar o store em todas as suas informações criptografadas no mesmo local ao do store da chave. Essa amostra usa o diretório/home/USER/vault/
.Nota
Não se esqueça de incluir barra à direita/
ou\
, dependendo de seu sistema operacional.Insira o caminho ao keystore.
Insira o caminho inteiro ao arquivo keystore. Essa amostra usa o/home/USER/vault/vault.keystore
.Insira a senha keystore, o nome do vault, o salt, e a contagem de interação.
Quando solicitado, insira a senha keystore, o nome do vault, o salt, e a contagem de interação. Um acordo é executado.Selecione a opção para realizar o store na senha.
Selecione a opção0
para realizar o store na senha ou outra sequência confidencial.Insira o valor.
Quando solicitado, insira duas vezes o valor. Caso os valores não coincidam, você será solicitado a tentar novamente.Insira o bloco vault.
Insira o bloco vault, que é um contêiner para atributos que pertencem ao mesmo recurso. Uma amostra deste nome do atributo seriads_ExampleDS
. Isto fará parte de uma referência à sequência criptografada, na sua fonte de dados ou outra definição do serviço.Insira o nome do atributo.
Insira o nome do atributo que você está aplicando o store. Uma amostra do nome do atributo seriapassword
.ResultadoUma mensagem parecida com a abaixo demonstra que o atributo foi salvo.
Valor do Atributo para (ds_ExampleDS, password) salvos
Anote a informação sobre a sequência criptografada.
A mensagem imprime o resultado default, apresentando o bloco vault, nome do atributo, chave compartilhada e recomendação sobre o uso da sequência em sua configuração. Anote esta informação numa localização segura. O resultado da amostra é exibido abaixo:******************************************** Vault Block:ds_ExampleDS Attribute Name:password Shared Key:N2NhZDYzOTMtNWE0OS00ZGQ0LWE4MmEtMWNlMDMyNDdmNmI2TElORV9CUkVBS3ZhdWx0 Configuration should be done as follows: VAULT::ds_ExampleDS::password::N2NhZDYzOTMtNWE0OS00ZGQ0LWE4MmEtMWNlMDMyNDdmNmI2TElORV9CUkVBS3ZhdWx0 ********************************************
Uso da sequência criptografada na sua configuração.
Use a sequência a partir da sequência em sua configuração, no local de uma sequência de texto plano. A fonte de dados usando a senha criptografia é apresentada abaixo.... <subsystem xmlns="urn:jboss:domain:datasources:1.0"> <datasources> <datasource jndi-name="java:jboss/datasources/ExampleDS" enabled="true" use-java-context="true" pool-name="H2DS"> <connection-url>jdbc:h2:mem:test;DB_CLOSE_DELAY=-1</connection-url> <driver>h2</driver> <pool></pool> <security> <user-name>sa</user-name> <password>${VAULT::ds_ExampleDS::password::N2NhZDYzOTMtNWE0OS00ZGQ0LWE4MmEtMWNlMDMyNDdmNmI2TElORV9CUkVBS3ZhdWx0}</password> </security> </datasource> <drivers> <driver name="h2" module="com.h2database.h2"> <xa-datasource-class>org.h2.jdbcx.JdbcDataSource</xa-datasource-class> </driver> </drivers> </datasources> </subsystem> ...
Você pode usar a sequência criptografada em qualquer local de seu domain ou arquivo de configuração autônomo onde as expressões são permitidas.Nota
Para verificar se as expressões são permitidas com um subsistema em particular, execute o seguinte comando CLI em relação ao subsistema:/host=master/core-service=management/security-realm=TestRealm:read-resource-description(recursive=true)
A partir de um resultado de execução deste comando, busque pelo valor para o parâmetroexpressions-allowed
. Caso isto seja verdadeiro, você pode usar expressões com a configuração do subsistema particular.Após você aplicar o store na sua sequência do keystore, use a seguinte sintaxe para substituir qualquer sequência de texto limpo por uma criptografada.${VAULT::<replaceable>VAULT_BLOCK</replaceable>::<replaceable>ATTRIBUTE_NAME</replaceable>::<replaceable>ENCRYPTED_VALUE</replaceable>}
Segue abaixo uma amostra do valor de mundo real, onde o bloco vault éds_ExampleDS
e o atributo épassword
.<password>${VAULT::ds_ExampleDS::password::N2NhZDYzOTMtNWE0OS00ZGQ0LWE4MmEtMWNlMDMyNDdmNmI2TElORV9CUkVBS3ZhdWx0}</password>
3.8.6. Store e Sequência Confidencial à Resolução em seus Aplicativos
Os elementos de configuração do JBoss Enterprise Application Plataform suportam a habilidade de resolver as sequências criptografadas em relação aos valores stored no Java Keystore através do mecanismo Security Vault. Você pode adicionar suporte deste recurso aos seus próprios aplicativos.
Antes de executar este procedimento, certifique-se de que o diretório para realizar o storing em seus arquivos vault existe. Não importa onde você os posiciona, contanto que o usuário que executa o JBoss Enterprise Application Plataform possua permissão para leitura e escrita dos arquivos. Essa amostra posiciona o diretório vault/
no diretório /home/USER/vault/
. O próprio vault é um arquivo chamado vault.keystore
dentro do diretório vault/
.
Exemplo 3.11. Adição da Sequência de Senha ao Vault
EAP_HOME/bin/vault.sh
. As séries completas de comandos e respostas estão incluídos no seguinte resultado da tela. Os valores inseridos pelo usuário são enfatizados. Alguns resultados são removidos para formatação. No Microsoft Windows, o nome do comando é vault.bat
. Perceba que no Microsoft Windows, os caminhos de arquivo usam o caractere \
como um diretório separado ao invés do caractere /
.
[user@host bin]$ ./vault.sh ********************************** **** JBoss Vault ******** ********************************** Please enter a Digit:: 0: Start Interactive Session 1: Remove Interactive Session 2: Exit0
Starting an interactive session Enter directory to store encrypted files:/home/user/vault/
Enter Keystore URL:/home/user/vault/vault.keystore
Enter Keystore password:...
Enter Keystore password again:...
Values match Enter 8 character salt:12345678
Enter iteration count as a number (Eg: 44):25
Enter Keystore Alias:vault
Vault is initialized and ready for use Handshake with Vault complete Please enter a Digit:: 0: Store a password 1: Check whether password exists 2: Exit0
Task: Store a password Please enter attribute value:sa
Please enter attribute value again:sa
Values match Enter Vault Block:DS
Enter Attribute Name:thePass
Attribute Value for (DS, thePass) saved Please make note of the following: ******************************************** Vault Block:DS Attribute Name:thePass Shared Key:OWY5M2I5NzctYzdkOS00MmZhLWExZGYtNjczM2U5ZGUyOWIxTElORV9CUkVBS3ZhdWx0 Configuration should be done as follows: VAULT::DS::thePass::OWY5M2I5NzctYzdkOS00MmZhLWExZGYtNjczM2U5ZGUyOWIxTElORV9CUkVBS3ZhdWx0 ******************************************** Please enter a Digit:: 0: Store a password 1: Check whether password exists 2: Exit2
VAULT
.
Exemplo 3.12. Servlet usando uma Senha com Vault
package vaulterror.web; import java.io.IOException; import java.io.Writer; import javax.annotation.Resource; import javax.annotation.sql.DataSourceDefinition; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.sql.DataSource; /*@DataSourceDefinition( name = "java:jboss/datasources/LoginDS", user = "sa", password = "sa", className = "org.h2.jdbcx.JdbcDataSource", url = "jdbc:h2:tcp://localhost/mem:test" )*/ @DataSourceDefinition( name = "java:jboss/datasources/LoginDS", user = "sa", password = "VAULT::DS::thePass::OWY5M2I5NzctYzdkOS00MmZhLWExZGYtNjczM2U5ZGUyOWIxTElORV9CUkVBS3ZhdWx0", className = "org.h2.jdbcx.JdbcDataSource", url = "jdbc:h2:tcp://localhost/mem:test" ) @WebServlet(name = "MyTestServlet", urlPatterns = { "/my/" }, loadOnStartup = 1) public class MyTestServlet extends HttpServlet { private static final long serialVersionUID = 1L; @Resource(lookup = "java:jboss/datasources/LoginDS") private DataSource ds; @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { Writer writer = resp.getWriter(); writer.write((ds != null) + ""); } }
3.9. LDAP
3.9.1. LDAP
3.9.2. Uso do LDAP para Autenticação das Interfaces de Gerenciamento
- Criação de uma conexão outbound para o servidor LDAP.
- Crie um security realm habilitado LDAP.
- Referencie o novo security domain na Interface de Gerenciamento.
A conexão outbound LDAP permite os seguintes atributos:
Tabela 3.1. Atributos de uma Conexão Outbound LDAP
Função | Solicitado | Descrição |
---|---|---|
nome | sim |
O nome para identificar esta conexão. Este nome é usado na definição do security realm.
|
url | sim |
O endereço URL do servidor do diretório.
|
search-dn | sim |
O distinguished name (DN - nome distinguido) do usuário autorizado a executar as buscas.
|
search-credentials | sim |
A senha do usuário autorizado a executar as buscas.
|
initial-context-factory | não |
A criação do contexto inicial para uso quando estabelecendo a conexão. O default é
com.sun.jndi.ldap.LdapCtxFactory .
|
Exemplo 3.13. Adição de uma Conexão Outbound LDAP
- DN de busca:
cn=search,dc=acme,dc=com
- Credencial de busca:
myPass
- URL:
ldap://127.0.0.1:389
/host=master/core-service=management/ldap-connection=ldap_connection/:add(search-credential=myPass,url=ldap://127.0.0.1:389,search-dn="cn=search,dc=acme,dc=com")
Exemplo 3.14. Representação XML de uma Conexão Outbound LDAP
<outbound-connections> <ldap name="ldap_connection" url="ldap://127.0.0.1:389" search-dn="cn=search,dc=acme,dc=com" search-credential="myPass" /> </outboundconnections>
As Interfaces de Gerenciamento podem autenticar em relação ao servidor LDAP ao invés do arquivo de propriedade baseado nos security realms configurados por default. O autenticador LDAP opera primeiramente estabelecendo uma conexão ao servidor do diretório remoto. Ele então executa uma busca usando o nome do usuário que o usuário passou ao sistema de autenticação, com o objetivo de encontrar o distinguished name (DN - nome distinguido) inteiramente qualificado. Uma nova conexão é estabelecida usando o DN do usuário como credencial e senha suprida pelo usuário. Caso esta autenticação ao servidor LDAP for bem sucedida, o DN é confirmado como válido.
- conexão
- O nome da conexão definido no
<outbound-connections>
para uso da conexão ao diretório LDAP. - base-dn
- O nome distinguido do contexto para iniciar a busca pelo usuário.
- recursivo
- Se é que a busca deve ser recursiva através da árvore do diretório LDAP ou apenas buscar o contexto especificado. O default é
false
. - user-dn
- O atributo do usuário que mantém o nome distinguido. Isto é subsequentemente usado para testar a autenticação assim que usuário puder completar. O default é
dn
. - Um dos
username-filter
ouadvanced-filter
como um elemento filho - O
username-filter
leva um atributo único chamadoattribute
, cujo valor é o nome do atributo LDAP que mantém o nome do usuário, tal como ouserName
ousambaAccountName
.Oadvanced-filter
leva um único atributo chamadofilter
. Este atributo contém uma fila de filtro na sintaxe do LDAP default. Recomendamos cuidado ao sair de qualquer caractere&
alterando-os pelo&
. Segue abaixo uma amostra de um filtro:(&(sAMAccountName={0})(memberOf=cn=admin,cn=users,dc=acme,dc=com))
Após sair do caractere ampersand, o filtro aparece como:(&(sAMAccountName={0})(memberOf=cn=admin,cn=users,dc=acme,dc=com))
Exemplo 3.15. Representação XML de um Security Realm habilitado LDAP
- connection -
ldap_connection
- base-dn -
cn=users,dc=acme,dc=com
. - username-filter -
attribute="sambaAccountName"
<security-realm name="TestRealm"> <authentication> <ldap connection="ldap_connection" base-dn="cn=users,dc=acme,dc=com"> <username-filter attribute="sambaAccountName" /> </ldap> </authentication> </security-realm>
Atenção
Exemplo 3.16. Adição de um LDAP Security Realm
/host=master/core-service=management/security-realm=ldap_security_realm/authentication=ldap:add(base-dn="DC=mycompany,DC=org", recursive=true, username-attribute="MyAccountName", connection="ldap_connection")
Após você criar um security realm, você precisa referenciá-lo na configuração de sua interface de gerenciamento. A interface de gerenciamento usará o security realm para a autenticação de resumo HTTP.
Exemplo 3.17. Aplicação do Security Realm à Interface HTTP
/host=master/core-service=management/management-interface=http-interface/:write-attribute(name=security-realm,value=TestRealm)
Capítulo 4. Java Security Manager
4.1. Java Security Manager
O Java Security Manager é uma classe que gerencia a fronteira externa da área restrita do Java Virtual Machine (JVM), controlando como o código em execução pode interagir com os recursos fora do JVM. Quando o Java Security Manager é ativado, o Java API checa por aprovação do Java Security Manager antes de executar uma vasta variedade de operações potencialmente sem segurança.
4.2. Políticas do Java Security Manager
O conjunto de permissões definidas para diferentes classes do código. O Java Security Manager compara ações solicitadas pelos aplicativos em relação à política de segurança. Caso uma ação seja permitida pela política, o Security Manager permitirá que ação entre em vigor. Caso a ação não seja permitida pela política, o Security Manager recusará aquela ação. A política de segurança pode definir as permissões baseadas na localização do código ou na assinatura de segurança.
java.security.manager
e java.security.policy
do Java Virtual Machine.
4.3. JBoss Enterprise Application Plataform com o Java Security Manager
domain.sh
ou standalone.sh
. O seguinte procedimento irá guiá-lo através destas etapas de configuração da sua instância para execução com uma política do Java Security Manager.
Pré-requisitos
- Antes de você seguir este procedimento, você precisa gravar uma política de segurança, usando o comando
policytool
que está incluído no seu Java Development Kit (JDK). Este procedimento assume que a sua política está localizada noEAP_HOME/bin/server.policy
. - O servidor domain e autônomo deve ser completamente interrompido antes de você editar quaisquer arquivos de configuração.
Procedimento 4.1. Edição dos Arquivos de Configuração
Abra o arquivo de configuração
Abra o arquivo de configuração para edição. Este arquivo está localizado em dois locais, dependendo de você estar usando um managed domain ou servidor autônomo. Este não é um arquivo executável usado para usar o servidor ou domain.Managed Domain
EAP_HOME/bin/domain.conf
Servidor Autônomo
EAP_HOME/bin/standalone.conf
Adição das opções Java no final de cada arquivo.
Adicione a seguinte linha no final do arquivo. Você pode modificar o valor-Djava.security.policy
para especificar a localização exata de sua política de segurança. Isto deve ocorrer em uma linha, sem quebra de linha. Você pode modificar o-Djava.security.debug
para efetuar o log de mais ou menos informações pela especificação do nível de depuração. O mais verboso éfailure,access,policy
.JAVA_OPTS="$JAVA_OPTS -Djava.security.manager -Djboss.home.dir=$PWD/.. -Djava.security.policy==$PWD/server.policy -Djava.security.debug=failure"
Início do domain ou servidor.
Inicie o domain ou servidor como o normal.
4.4. Gravação da Política do Java Security Manager
Um aplicativo chamado policytool
está incluído na maioria das distribuições JRE e JDK, para o propósito de criação e edição das políticas de segurança do Java Security Manager. A informação detalhada sobre policytool
é conectado a partir do http://docs.oracle.com/javase/6/docs/technotes/tools/.
A política de segurança consiste dos seguintes elementos de configuração:
- CodeBase
- A localização do URL (excluindo a informação domain e host) onde o código é originado. O parâmetro é opcional.
- SignedBy
- O alias usado no keystore para referência do assinante cuja chave privada era usada para entrar com o código. Isto pode ser um valor único ou lista de vírgula separada de valores. Este parâmetro é opcional. Caso omitido, a presença ou falta de assinatura não possui impacto no Java Security Manager.
- Principals
- A lista dos pares principal_type/principal_name, que devem ser apresentados com o conjunto principal de thread sendo executados. A entrada dos Principals é opcional. Caso seja omitida, isto significa "qualquer principals".
- Permissões
- A permissão é o acesso que é concedido ao código. Muitas permissões são fornecidas como parte da especificação do Java Enterprise Edition 6 (Java EE 6). Este documento descreve apenas as permissões adicionais que são fornecidas pelo JBoss Enterprise Application Plataform.
Procedimento 4.2. Configuração de uma nova Política do Java Security Manager
Inicie o
policytool
.Inicie a ferramentapolicytool
em uma das seguintes manerias:Red Hat Enterprise Linux
A partir de seu GUI ou prompt de comando, execute o/usr/bin/policytool
.Servidor Microsoft Windows
Execute opolicytool.exe
a partir do menu de Iniciação ou dobin\
de sua instalação do Java. A localização pode variar.
Criação de uma nova política.
Selecione Add Policy Entry para criar uma nova política. Adicione parâmetros que você precisa, e clique em Done.Edição de uma política existente
Selecione a política a partir da lista das políticas existentes e selecione o botão Edit Policy Entry. Edite os parâmetros conforme seja necessário.Exclusão de uma política existente.
Selecione a política da lista de políticas existentes e selecione o botão Delete Policy Entry.
Permissão específica ao JBoss Enterprise Application Plataform
- org.jboss.security.SecurityAssociation.getPrincipalInfo
- Fornece acesso aos métodos
org.jboss.security.SecurityAssociation
getPrincipal()
egetCredential()
. O risco relacionado com o uso desta permissão do período de execução é a habilidade de ver o chamador de thread atual e credenciais. - org.jboss.security.SecurityAssociation.getSubject
- Fornece o método
org.jboss.security.SecurityAssociation
getSubject()
. - org.jboss.security.SecurityAssociation.setPrincipalInfo
- Fornece acesso aos métodos
org.jboss.security.SecurityAssociation
setPrincipal()
,setCredential()
,setSubject()
,pushSubjectContext()
epopSubjectContext()
: O risco relacionado com o uso desta permissão do período de execução é a habilidade de determinar o chamador do thread atual e credenciais. - org.jboss.security.SecurityAssociation.setServer
- Fornece acesso ao método
org.jboss.security.SecurityAssociation
setServer
. O risco relacionado com o uso desta permissão do período de execução é a habilidade de habilitar ou desabilitar o storage multi-thread do chamador principal e credencial. - org.jboss.security.SecurityAssociation.setRunAsRole
- Fornece acesso aos métodos
org.jboss.security.SecurityAssociation
pushRunAsRole
,popRunAsRole
,pushRunAsIdentity
epopRunAsIdentity
. O risco relacionado com o uso desta permissão do período de execução é a habilidade de alterar o chamador atual para executar como função principal. - org.jboss.security.SecurityAssociation.accessContextInfo
- Fornece acesso aos métodos getter e setter
org.jboss.security.SecurityAssociation
accessContextInfo
eaccessContextInfo
. Isto permite que você determine e configure a informação do contexto de segurança atual. - org.jboss.naming.JndiPermission
- Fornece as permissões especiais para arquivos e diretórios num caminho de árvore JNDI especificado ou de forma recursiva a todos os subdiretórios. O JndiPermission consiste de um pathname e um conjunto de permissões válidas relacionadas ao arquivo ou diretório.As permissões disponíveis incluem:
- bind
- rebind
- unbind
- pesquisa
- lista
- listBindings
- createSubcontext
- todos
Os pathnames finalizados em/*
indicam que as permissões especificadas são aplicadas a todos os arquivos e diretórios do nome do pathname. Os pathnames finalizados em/-
indicam permissões recursivas em todos os arquivos e subdiretórios do pathname. Os pathnames consistentes do <<ALL BINDINGS>> de token especial coincidem com qualquer arquivos do diretório. - org.jboss.security.srp.SRPPermission
- A classe de permissão personalizada para proteção de acesso à informação SRP confidencial como sessão privada e chave privada. Essa permissão não possui quaisquer ações definidas. O destino
getSessionKey
fornece acesso à chave de sessão privada que resulta da negociação SRP. O acesso à esta chave permite a criptografia e descriptografia de mensagens que foram criptografadas à chave da sessão. - org.hibernate.secure.HibernatePermission
- A classe de permissão fornece permissões básicas para segurança das sessões Hibernate. O destino para esta propriedade é o nome de entidade. As ações disponíveis incluem:
- inserir
- excluir
- atualizar
- ler
- * (todos)
- org.jboss.metadata.spi.stack.MetaDataStackPermission
- Fornece uma classe de permissão personalizada para controle de como os chamadores interagem com a pilha metadata. As permissões disponíveis são:
- modificar
- enviar (à pilha)
- pop (fora da pilha)
- inspecionar (na pilha)
- * (todos)
- org.jboss.config.spi.ConfigurationPermission
- Garante a determinação das propriedades de configuração. Define apenas os nomes de destino e nenhuma das ações. Os destinos para esta propriedade incluem:
- <property name> (a propriedade que este código possui permissão de configurar)
- * (todas as propriedades)
- org.jboss.kernel.KernelPermission
- Garante acesso à configuração do kernel. Define apenas os nomes do destino de permissão e sem ações. Os destinos para a propriedade incluem:
- acesso (à configuração do kernel)
- configuração (implica no acesso)
- * (todos)
- org.jboss.kernel.plugins.util.KernelLocatorPermission
- Garante acesso ao kernel. Define apenas os nomes do destino de permissão e nenhuma ação. Os destinos para a propriedade incluem:
- kernel
- * (todos)
4.5. Políticas do Gerenciador de Segurança de Depuração
java.security.debug
configura o nível de informação relatada de segurança. O comando java -Djava.security.debug=help
produzirá resultado de ajuda sobre tudo a respeito das opções de depuração. A configuração do nível de depuração para all
é útil quando solucionando problemas de uma falha relacionada com a segurança, cuja causa é totalmente desconhecida. No entanto, para uso geral isto produzirá informações demasiadas. O default geral de sensibilidade é access:failure
.
Procedimento 4.3. Habilitação de depuração geral
Este procedimento irá habilitar o nível geral de sensibilidade da informação de depuração relacionada com segurança.
Adição da seguinte linha ao arquivo de configuração do servidor.- Caso a instância do JBoss Enterprise Application Plataform estiver sendo executada num managed domain, a linha é adicionada ao arquivo
bin/domain.conf
para o Linux ou arquivobin/domain.conf.bat
para Windows. - Caso a instância do JBoss Enterprise Application Plataform estiver sendo executada como um servidor autônomo, a linha é adicionada ao arquivo
bin/standalone.conf
para o Linux ou arquivobin\standalone.conf.bat
para o Windows.
Linux
JAVA_OPTS="$JAVA_OPTS -Djava.security.debug=access:failure"
Windows
JAVA_OPTS="%JAVA_OPTS% -Djava.security.debug=access:failure"
O nível geral de informação de depuração relacionada com a segurança foi habilitada.
Capítulo 5. Instalação de Patch
5.1. Mecanismos de Aplicação de Patch
- Atualizações planejadas: conforme parte de uma atualização micro, pequena ou maior de um produto existente.
- Atualizações assíncronas: patch único que é lançado fora do ciclo de atualização normal de um produto existente.
- Qual a facilidade de uma falha ser explorada?
- Qual tipo de danos pode ser feito caso a falha seja explorada?
- Existem normalmente outros fatores envolvidos que reduzem o impacto de uma falha (tal como firewalls, Security-Enhanced Linux, diretivas de compilador ou outros)?
5.2. Subscrição para as Listas de Correio Patch
A equipe do JBoss na Red Hat mantém uma lista de correio de segurança para comunicados de segurança sobre os produtos do Red Hat JBoss Enterprise. Este tópico descreve o que você precisa realizar para subscrever-se a esta lista.
Pré-requisitos
- Nenhum
Procedimento 5.1. Subscrição à Lista de Vigilância do JBoss
- Clique no seguinte link para ir à página de lista de correio de Vigilância do JBoss: JBoss Watch Mailing List.
- Insira o endereço de e-mail na seção Subscribing to Jboss-watch-list
- [Você pode optar em inserir o seu nome e selecionar uma senha. Isto é opcional, porém recomendável.]
- Pressione o botão Subscribe para iniciar o processo de subscrição.
- Você pode navegar nos arquivos da lista de correio através do: JBoss Watch Mailing List Archives.
Após confirmação de sua conta de e-mail, você estará subscrito para receber os comunicados relacionados à segurança da lista de correio patch do JBoss.
5.3. Instalação de Patches na forma zip
Os patches de segurança do JBoss são distribuídos em duas formas: zip (para todos os produtos) e RPM (para um subconjunto de produtos). Os patches de correção de bug do JBoss são apenas distribuídos em formato zip. Esta tarefa descreve as etapas que você precisa efetuar para instalar os patches (segurança ou correções de bug) através do formato zip.
Pré-requisitos
- Acesso válido e subscrição do Portal do Cliente Red Hat.
- A subscrição atual a um produto do JBoss instalado num formato zip.
Procedimento 5.2. Aplicação de um patch a um produto do JBoss através do método zip.
Atenção
- Obtenha informações sobre o patch de segurança tanto pela subscrição da lista de correio de vigilância do JBoss ou pela navegação nos arquivos da lista de correio de vigilância do JBoss.
Nota
Apenas patches de segurança são comunicados na lista de correio de vigilância do JBoss. - Leia a errata para o patch de segurança e certifique-se de que está aplicado a um produto do JBoss em seu ambiente.
- Caso o patch de segurança for aplicado a um produto do JBoss em seu ambiente, siga as instruções do link para baixar o patch do Portal do Cliente Red Hat.
- O arquivo zip que pode ser baixado a partir do portal do cliente terá todos os arquivos solicitados para corrigir o problema de segurança ou bug. Baixe este arquivo zip do patch na mesma localização do seu produto JBoss.
- Desfaça o zip do arquivo patch na mesma localização onde o produto JBoss é instalado. As versões patch substituem os arquivos existentes.
O produto JBoss possui patches com a atualização mais recente usando o formato zip.
5.4. Instalação de Patches na forma RPM
Os patches do JBoss são distribuídos em duas formas: zip (para todos os produtos) e RPM (para um subconjunto de produtos). Esta tarefa descreve as etapas que você precisa efetuar para instalar os patches através do formato RPM. Este método de atualização RPM é usado para lançar patches assíncronos de segurança e atualizações micro, pequena e maior de produto apenas.
Pré-requisitos
- Uma subscrição válida para o Red Hat Network.
- A subscrição atual a um produto JBoss instalado através de um pacote RPM.
Procedimento 5.3. Aplicar um patch a um produto JBoss através do método RPM.
Atenção
- Receba informação sobre o patch de segurança tanto sendo subscrito na lista de correio de vigilância do JBoss ou navegando pelos arquivos da lista de correio de vigilância do JBoss.
- Leia a errata para o patch de segurança e certifique-se de que está aplicado a um produto do JBoss em seu ambiente.
- Caso o patch de segurança for aplicado a um produto JBoss em seu ambiente, siga instruções do link para baixar o pacote RPM atualizado que está incluso na errata.
- Use
ou um comando similar para instalar o patch.yum update
O produto JBoss possui patches com a atualização mais recente usando o formato RPM.
5.5. Classificação de impacto e gravidade do JBoss Security Patches
Tabela 5.1. Classificação de gravidade do JBoss Security Patches
Gravidade | Descrição |
---|---|
Crítica |
A classificação é dada para as falhas que poderiam ser facilmente exploradas por um invasor não identificado e levar a comprometer o sistema (execução de código arbitrário) sem requerer a interação do usuário. Existem tipos de vulnerabilidades que podem ser exploradas. As falhas que requerem um usuário remoto autenticado, um usuário local ou uma configuração improvável não são classificadas como impacto crítico.
|
Importante |
A classificação é dada às falhas que podem facilmente comprometer a confidencialidade, integridade ou habilidade de recursos. Esses são tipos de vulnerabilidades que permitem usuários locais ganharem privilégios, permitir usuários remotos não autenticados a visualizarem recursos que deveriam ser protegidos pela autenticação ou permitir usuários local ou remoto a causarem uma negação de serviço.
|
Moderada |
A classificação é dada para as falhas que poderiam ser dificilmente exploradas, mas podem comprometer a confidencialidade, integridade ou disponibilidade de recursos, sob certas circunstâncias. Existem tipos de vulnerabilidades que podem possuir um impacto crítico de falha ou impacto importante, no entanto não são exploradas com tanta facilidade devido à avalização técnica da falha ou por afetarem as configurações comprometedoras.
|
Baixa |
A classificação é dada a todos os demais problemas que um impacto de segurança possui. Estes são os tipos de vulnerabilidades que acredita-se requerem circunstâncias improváveis para estarem aptos a serem explorados ou onde a exploração com êxito geraria uma consequência mínima.
|
Exemplo 5.1. Métricas do CVSS v2
C:N/I:P/A:C
Capítulo 6. Security Domains
6.1. Security Domains
6.2. Picketbox
- Seção 6.5, “Autorização” e controle de acesso
- Seção 6.9, “Mapeamento de Segurança” de principais, funções e atributos
6.3. Autenticação
6.4. Configuração da Autenticação num Security Domain
Procedimento 6.1. Determine as Configurações da Autenticação para o Security Domain
Abra a visualização detalhada do security domain.
Clique no rótulo Profiles na parte superior direita do management console. Num managed domain, selecione o perfil para modificar a caixa de seleção Profile na parte esquerda da visualização do Perfil. Clique no item do menu Security no lado esquerdo e clique no Security Domains a partir do menu expandido. Clique no link View para o security domain que você deseja editar.Navegação à configuração do subsistema de Autenticação.
Clique no rótulo Authentication no topo da visualização caso não esteja selecionado.A área de configuração é dividida em duas áreas: Login Modules e Details. O módulo de login é a unidade básica da configuração. O security domain pode incluir diversos módulos de login, cada qual pode incluir diversos atributos e opções.Adição do módulo de autenticação.
Clique no botão Add para adicionar um módulo de autenticação JAAS. Preencha os detalhes para o seu módulo. O Code é o nome da classe do módulo. O Flags controla como o módulo relata aos demais módulos de autenticação com o mesmo security domain.Explicação dos AvisosA especificação do Java Enterprise Edition 6 fornece a seguinte explicação dos avisos dos módulos de segurança. A seguinte lista é retirada do http://docs.oracle.com/javase/6/docs/technotes/guides/security/jaas/JAASRefGuide.html#AppendixA. Refira-se ao documento para maiores informações.
Sinalizador Detalhes Solicitado O LoginModule é requerido para suceder. Caso isto suceda ou falhe, a autenticação continua a proceder na lista do LoginModule.Requisito O LoginModule é requerido para ser sucedido. Caso ele seja bem sucedido, a autenticação continua a checagem da lista LoginModule. Caso isto falhe, o controle retorna imediatamente ao aplicativo (a autenticação não procede a checagem na lista LoginModule).Suficiente O LoginModule não é solicitado para ser sucedido. Caso não seja sucedido, o controle retorna imediatamente ao aplicativo (a autenticação não procede a lista LoginModule). Caso isto falhe, a autenticação continua na listagem do LoginModule.Opcional O LoginModule não é requerido para ser sucedido. Caso ele suceda ou falhe, a autenticação continua a proceder na lista do LoginModule.Após você adicionar o módulo, você pode modificar o seu Code ou Flags apenas clicando no botão Edit da seção Details da tela. Certifique-se de que a tab Attributes é selecionada.Opcional: Adicione, edite ou remova as opções do módulo.
Caso você precise adicionar opções ao seu módulo, clique na sua entrada na lista Login Modules e selecione a tab Module Options na seção Details da página. Clique no botão Add e forneça a chave e o valor para a opção. Para editar uma opção que já existe, clique na chave ou para alterá-la. Use no botão Remove para remover uma opção.
O seu módulo de autenticação é adicionado ao seu security domain e está imediatamente disponível aos aplicativos que usam o security domain.
jboss.security.security_domain
Por default, cada módulo de login definido num security domain possui a opção de módulo jboss.security.security_domain
adicionada a isto automaticamente. Esta opção leva à problemas com o módulo de login que garantem que apenas opções conhecidas são definidas. O módulo de login IBM Kerberos, com.ibm.security.auth.module.Krb5LoginModule
, é um destes.
true
quando iniciando o JBoss Enterprise Application Plataform. Adicione o seguinte aos parâmetros de inicialização.
-Djboss.security.disable.secdomain.option=true
6.5. Autorização
6.6. Configuração da Autorização num Security Domain
Procedimento 6.2. Determinação da Autorização num Security Domain
Abra a visualização detalhada do security domain.
Clique no rótulo Profiles no lado direito superior do management console. Num managed domain, selecione o perfil para modificação a partir da caixa de seleção Profile na parte esquerda superior da visualização do Perfil. Clique no item do menu Security ao lado esquerdo e clique em Security Domains ao lado esquerdo e no menu expandido. Clique no link View para o security domain que você deseja editar.Navegação à configuração do subsistema de Autorização.
Clique no rótulo Authorization na parte superior da visualização caso ele não esteja selecionado.A área de configuração está dividida em duas áreas: Policies e Details. O módulo de login é uma unidade básica de configuração. O security domain pode incluir diversas políticas de autorização, cada qual pode incluir diversos atributos e opções.Adição da política.
Clique no botão Add para adicionar um módulo de política de autorização JAAS. O Code é o nome da classe do módulo. Preencha os detalhes para o seu módulo. O Flags controla como o módulo relata aos outros módulos de política da autorização com o mesmo security domain.Explicação dos SinalizadoresA especificação do Java Enterprise 6 fornece a seguinte explicação dos sinalizadores para os módulos de segurança. A seguinte lista foi obtida a partir do http://docs.oracle.com/javase/6/docs/technotes/guides/security/jaas/JAASRefGuide.html#AppendixA. Refira-se ao documento para maiores informações.
Sinalizador Detalhes Solicitado O LoginModule é requerido para suceder. Caso isto suceda ou falhe, a autorização continua a proceder na lista do LoginModule.Requisito O LoginModule é requerido para suceder. Caso ele suceda, a autorização continua na lista do LoginModule. Caso falhe, o controle retorna imediatamente ao aplicativo (a autorização não procede na lista do LoginModule).Suficiente O LoginModule não é solicitado para ser sucedido. Caso não seja sucedido, o controle retorna imediatamente ao aplicativo (a autorização não procede a lista LoginModule). Caso isto falhe, a autenticação continua na listagem do LoginModule.Opção O LoginModule não é requerido para suceder. Caso isto suceda ou falhe, a autorização continua a proceder na lista do LoginModule.Após você adicionar o módulo, você pode modificar o seu Code ou Flags apenas clicando no botão Edit da seção Details da tela. Certifique-se de que a tab Attributes é selecionada.Opcional: Adicione, edite ou remova as opções do módulo.
Caso você precise adicionar opções ao seu módulo, clique na sua entrada na lista Login Modules e selecione a tab Module Options na seção Details da página. Clique no botão Add e forneça a chave e o valor para a opção. Para editar uma opção que já existe, clique na chave ou para alterá-la. Use no botão Remove para remover uma opção.
O seu módulo de autorização é adicionado ao seu security domain e está imediatamente disponível aos aplicativos que usam o security domain.
6.7. Auditoria de Qualidade
6.8. Configuração de Auditoria de Segurança
Procedimento 6.3. Configuração de Auditoria de Segurança para o Security Domain
Abra a visualização detalhada do security domain.
Clique no rótulo Profiles na parte direita superior do management console. Num servidor autônomo, a tab é rotulada Profile. Num managed domain, selecione o perfil para modificar a partir da caixa de seleção Profile da visualização do Perfil. Clique no item do menu Security no parte esquerda e clique no Security Domains a partir do menu expandido. Clique no link View para o security domain que você deseja editar.Navegação à configuração do subsistema de Auditoria.
Clique no rótulo Audit na parte superior da visualização caso ainda não esteja selecionado.A área de configuração está dividida em duas áreas: Provider Modules e Details. O módulo provedor é a unidade básica de configuração. O security domain pode incluir diversos módulos de provedor, cada qual inclui atributos e opções.Adição de um módulo de provedor.
Clique no botão Add para adicionar um módulo de provedor. Preencha a seção Code com o nome da classe do módulo do provedor.Após a adição do módulo, você pode modificar seu Code apenas clicando no botão Edit da seção Details da tela. Certifique-se de que a tab Attributes está selecionada.Verifique se o seu módulo está funcionando
O objetivo de um módulo de auditoria é fornecer uma maneira de monitorar os eventos no subsistema de segurança. Este monitoramento pode ser realizado por gravação de um arquivo de log, notificações de e-mail ou qualquer outro mecanismo de auditoria mensurável.Por exemplo, o JBoss Enterprise Application Server inclui o móduloLogAuditProvider
por default. Caso habilitado seguindo as etapas acima, este módulo de auditoria grava as notificações de segurança a um arquivoaudit.log
na subpastalog
com o diretórioEAP_HOME
.Para verificar se as etapas acima funcionaram no contexto doLogAuditProvider
, execute uma ação que provavelmente efetuará o trigger na notificação e então verifique o arquivo do log de auditoria.Para uma lista completa dos módulos do provedor de auditoria de segurança, consulte: Seção A.4, “Módulos do Fornecedor de Auditoria de Segurança Incluídos”Opcional: Adicione, edite ou remova as opções do módulo.
Caso você deseje adicionar as opções ao seu módulo, clique sua entrada na lista Modules e selecione a tab Module Options na seção Details da página. Clique no botão Add e forneça a chave e o valor para a opção. Para editar uma opção que já exista, remova-a clicando no rótulo Remove e adicione-a novamente com as opções corretas clicando no botão Add.
O seu módulo de auditoria de segurança foi adicionado ao security domain e está imediatamente disponível aos aplicativos que usam o security domain.
6.9. Mapeamento de Segurança
6.10. Configuração do Mapeamento de Segurança num Managed Domain
Procedimento 6.4. Determinação das Configurações de Mapeamento num Security Domain
Abra a visualização detalhada do security domain.
Clique no rótulo Profiles na parte superior do management console. Esta tab é rotulada Profile num servidor autônomo. Num managed domain, selecione o perfil para modificar a partir da caixa de seleção Profile na parte esquerda da visualização do Perfil. Clique no item do menu Security na parte esquerda e clique no Security Domains a partir do menu expandido. Clique no link View para o security domain que você precisa editar.Navegação à configuração do subsistema de Mapeamento.
Clique no rótulo Mapping no topo da visualização caso ele não esteja selecionado.A área de configuração está divida em duas áreas: Modules e Details. O módulo de mapeamento é uma unidade básica de configuração. O security domain pode incluir diversos módulos de mapeamento, cada qual pode incluir diversos atributos e opções.Adição de um módulo.
Clique no botão Add para adicionar o módulo de mapeamento de segurança. Preencha os detalhes para o seu módulo. O Code é o nome da classe do módulo. O campo Type refere-se ao tipo de mapeamento que este módulo executa. Os valores permitidos são principal, função, atributo ou credencial.Após você ter adicionado o seu módulo, você pode modificar o seu Code ou Type apenas clicando no botão Edit na seção Details da tela. Certifique-se que a tab Attributes é selecionada.Opcional: Adicione, edite ou remova as opções do módulo.
Caso você precise adicionar opções ao seu módulo, clique na sua entrada na lista Modules e selecione a tab Module Options na seção Details da página. Clique no botão Add e forneça a chave e o valor para a opção. Para editar uma opção que já existe, clique na chave do rótulo Remove para removê-la e adicione-a novamente com um novo valor. Use no botão Remove para remover uma opção.
O módulo de mapeamento de segurança é adicionado ao security domain e está imediatamente disponível para aplicativos que usam o security domain.
Capítulo 7. Criptografia SSL
7.1. Criptografia SSL
7.2. Implementação da Criptografia SSL para o JBoss Enterprise Application Plataform Web Server
Muitos aplicativos requerem uma conexão criptografada SSL entre o cliente e o servidor, também conhecida como conexão HTTPS
. Você pode usar este procedimento para habilitar o HTTPS
no seu servidor ou grupo do servidor.
Pré-requisitos
- Você precisa de um conjunto de chaves criptografadas SSL. Você pode comprá-las a partir do certificado de autoridade de assinatura, ou pode gerá-las usando as utilidades da linha de comando. Para gerar chaves de criptografia usando o Red Hat Enterprise Linux, refira-se à Seção 7.3, “Criação de uma Chave de Criptografia SSL e Certificado”.
- Você precisa saber os seguintes detalhes sobre o ambiente específico e montagem:
- O nome e caminho completo de seus arquivos de certificado
- A senha criptografada para suas chaves de criptografia.
- Você precisa executar o Management CLI e conectá-lo ao seu domain controller ou servidor autônomo.
Nota
/profile=default
a partir do início de quaisquer comandos Management CLI.
Procedimento 7.1. Configuração do JBoss Web Server para uso dos HTTPS
Adicione um novo conector HTTPS.
Execute o seguinte comando Management CLI, alterando o perfil conforme apropriado. Isto cria um novo conector de segurança, chamadoHTTPS
, que usa o esquemahttps
, o socket bindinghttps
(do qual o default é8443
), e é configurado para possuir segurança.Exemplo 7.1. Comando Management CLI
/profile=default/subsystem=web/connector=HTTPS/:add(socket-binding=https,scheme=https,protocol=HTTP/1.1,secure=true)
Configuração do certificado e chaves de criptografia SSL.
Execute os seguintes comandos para configuração de seu certificado SSL, substituindo os seus próprios valores para aos da amostra. Esta amostra assume que o keystore é copiado ao diretório da configuração do servidor, que é oEAP_HOME/domain/configuration/
para o managed domain.Exemplo 7.2. Comando Management CLI
/profile=default/subsystem=web/connector=HTTPS/ssl=configuration:add(name=https,certificate-key-file=${jboss.server.config.dir}/keystore.jks,password=SECRET, key-alias=KEY_ALIAS)
Para uma listagem completa de parâmetros que você pode configurar para as propriedades SSL do conector, refira-se à Seção 7.4, “Referência do Conector SSL”.Implantação de um aplicativo
A implantação de um aplicativo a um grupo do servidor que usa o perfil que você configurou. Caso você use um servidor autônomo, implante o aplicativo ao seu servidor. As solicitações HTTP solicitam que isto use a nova conexão criptografada SSL.
7.3. Criação de uma Chave de Criptografia SSL e Certificado
Pré-requisitos
- Você precisa da utilidade
keytool
, que é fornecida pela implantação do Java Development Kit. O OpenJDK no Red Hat Enterprise Linux instala este comando ao/usr/bin/keytool
. - O entendimento da sintaxe e parâmetros do comando
keytool
. Este procedimento usa as instruções extremamente genéricas, uma vez que a discussão futura das especificações dos certificados ou do comandokeytool
estão fora do tópico desta documentação.
Procedimento 7.2. Criação de uma Chave de Criptografia SSL e Certificado
Geração de um keystore com as chaves pública e privada.
Execute o seguinte comando para gerar um keystore nomeadoserver.keystore
com o aliasjboss
no seu diretório atual.keytool -genkey -alias jboss -keyalg RSA -keystore server.keystore -storepass mykeystorepass --dname "CN=jsmith,OU=Engineering,O=mycompany.com,L=Raleigh,S=NC,C=US"
A seguinte tabela descreve os parâmetros usados no comando keytool:Parâmetro Descrição -genkey
O comando keytool
para gerar um par de chave contendo uma chave pública e privada.-alias
O alias para o keystore. Este valor é arbritário, porém o alias jboss
é o default usado pelo servidor do JBoss Web.-keyalg
O algoritmo de geração par da chave. Neste caso ele é o RSA
.-keystore
O nome e a localização do arquivo keystore. A localização default é o diretório atual. O nome que você escolher é arbitrário. Neste caso, o arquivo será nomeado server.keystore
.-storepass
Essa senha é usada para autenticar ao keystore de forma que a chave pode ser lida. A senha deve ser pelo menos de 6 caracteres e deve ser fornecida quando o keystore é acessado. Neste caso, nós usamos o mykeystorepass
. Caso você omitir este parâmetro, você será solicitado a inserir o mesmo quando você executar o comando.-keypass
Esta é a senha para a chave atual.Nota
Devido à limitação da implementação, ela deve ser a mesma senha à senha do store.--dname
A sequência cotada descrevendo o nome distinguido para a chave, por exemplo: "CN=jsmith,OU=Engineering,O=mycompany.com,L=Raleigh,C=US". Essa sequência é a concatenação dos seguintes componentes: CN
- O nome comum ou nome do host. Caso o hostname seja "jsmith.mycompany.com", oCN
será "jsmith".OU
- A unidade da organização, por exemplo: "Engineering"O
- O nome da organização, por exemplo "mycompany.com".L
- A localidade, por exemplo: "Raleigh" ou "London"S
- O estado ou província, por exemplo: "NC". Este parâmetro é opcional.C
- O código de suas letras do país, por exemplo: "US" ou "UK",
Quando você executar o comando acima, você será solicitado a seguinte informação:- Caso não tenha usado o parâmetro
-storepass
na linha de comando, você será solicitado a inserir a senha keystore. Reinicie a nova senha na próxima solicitação. - Caso não tenha usado o parâmetro
-keypass
na linha de comando, você será solicitado a inserir a senha chave. Pressione Enter para configurá-la no mesmo valor ao da senha keystore.
Quando o comando completar, o arquivoserver.keystore
conterá a chave única com o aliasjboss
.Verifique a chave.
Verifique se a chave funciona de forma apropriada usando o seguinte comando:keytool -list -keystore server.keystore
A senha é solicitada com o objetivo de autenticar o keystore. Os conteúdos do keystore são exibidos (neste caso, uma chave única chamadajboss
). Perceba o tipo da chavejboss
, que ékeyEntry
. Isto indica que o keystore contém ambas entradas privada e pública para esta chave.Geração de um certificado assinando uma solicitação.
Execute o seguinte comando para gerar um certificado assinando solicitação usando a chave pública e privada a partir do keystore que você criou na etapa 1.keytool -certreq -keyalg RSA -alias jboss -keystore server.keystore -file certreq.csr
A senha é solicitada com o objetivo de autenticar o keystore. O comandokeytool
então cria um novo certificado assinando a solicitação chamadacertreq.csr
no seguinte diretório de trabalho.Teste o certificado recentemente gerado.
Teste os conteúdos do certificado usando o seguinte comando.openssl req -in certreq.csr -noout -text
Os detalhes do certificado são apresentados.Opcional: Submeta o seu certificado a um Certificate Authority (CA - Autoridade de Certificado).
O Certificate Authority (CA) pode autenticar o seu certificado de forma que isto é considerado de confiança por clientes de terceiros. O CA fornece um certificado assinado e opcionalmente um ou mais certificados intermediários.Opcional: Exporte um certificado autoassinado a partir do keystore.
Caso você precisar disto para testes ou propósitos internos, você pode usar um certificado autoassinado. Você pode expor um do keysotre que você criou na etapa 1, conforme abaixo:keytool -export -alias jboss -keystore server.keystore -file server.crt
Você será solicitado a fornecer a senha com o objetivo de autenticar o keystore. O certificado autoassinado, nomeadoserver.crt
, é criado no diretório de trabalho atual.Importe o certificado assinado, juntamente com quaisquer certificados intermediários.
Importe cada certificado na ordem que você está instruído pelo CA. Para cada certificado a ser importado, substitua ointermediate.ca
ouserver.crt
pelo nome do arquivo atual. Caso os seus certificados não forem fornecidos como arquivos separados, crie um arquivo separado para cada certificado e cole os seus conteúdos no arquivo.Nota
O seu certificado assinado e chaves do certificado são bens de valor. Tenha cuidado de como transportá-los entre os servidores.keytool -import -keystore server.keystore -alias intermediateCA -file intermediate.ca
keytool -import -alias jboss -keystore server.keystore -file server.crt
Teste se seus certificados importaram com êxito.
Execute o seguinte comando e insira a senha keystore quando solicitada. Os conteúdos de seu keystore são exibidos e os certificados fazem parte da lista.keytool -list -keystore server.keystore
O seu certificado assinado está agora incluído no seu keystore e está pronto para ser usado para criptografar as conexões SSL, incluindo as comunicações do servidor da web HTTPS.
7.4. Referência do Conector SSL
default
de perfil. Altere o nome do perfil para um que você deseje configurar, para o managed domain, ou omita a porção /profile=default
do comando, para um servidor autônomo.
Tabela 7.1. Atributos do Conector SSL
Função | Descrição | Comando CLI |
---|---|---|
Nome |
O nome exibido do conector SSL.
|
/profile=default/subsystem=web/connector=HTTPS/ssl=configuration/:write-attribute(name=name,value=https) |
verify-client |
Configure para
true para solicitar uma corrente de certificado válido a partir do cliente antes de aceitar uma conexão. Configure para want caso deseje que a pilha SSL solicite um Certificado de cliente, mas não falhe caso não haja certificado algum. Determine para false (o default) para não requerer uma corrente de certificado a não ser que o cliente solicite um recurso protegido por uma restrição de segurança que usa a autenticação CLIENT-CERT .
|
/profile=default/subsystem=web/connector=HTTPS/ssl=configuration/:write-attribute(name=verify-client,value=want) |
verify-depth |
O número máximo de emissores de certificado intermediários verificados antes de decidir que os clientes não possuem um certificado válido. O valor default é
10 .
|
/profile=default/subsystem=web/connector=HTTPS/ssl=configuration/:write-attribute(name=verify-depth,value=10) |
certificate-key-file |
O caminho de arquivo completo e o nome do arquivo keystore onde o certificado do servidor assinado é aplicado o store. Com a criptografia JSSE, este arquivo de certificado será apenas um, enquanto o OpenSSL usa diversos arquivos. O valor default é o arquivo
.keystore no diretório principal do usuário executando o JBoss Enterprise Application Plataform. Caso o seu keystoreType não usar um arquivo, determine o parâmetro para uma sequência vazia.
|
/profile=default/subsystem=web/connector=HTTPS/ssl=configuration/:write-attribute(name=certificate-key-file,value=../domain/configuration/server.keystore) |
certificate-file |
Caso você usar a criptografia OpenSSL, determine o valor deste parâmetro para o caminho do arquivo contendo o certificado do servidor.
|
/profile=default/subsystem=web/connector=HTTPS/ssl=configuration/:write-attribute(name=certificate-file,value=server.crt) |
senha |
A senha para ambos truststore e keystore. O valor default é
changeit , de forma que você precisa alterar isto para coincidir com a senha de seu keystore para sua configuração funcionar.
|
/profile=default/subsystem=web/connector=HTTPS/ssl=configuration/:write-attribute(name=password,value=changeit) |
protocolo |
A versão do protocolo SSL para uso. Os valores suportados incluem
SLv2 , SSLv3 , TLSv1 , SSLv2+SSLv3 e ALL . O default é ALL .
|
/profile=default/subsystem=web/connector=HTTPS/ssl=configuration/:write-attribute(name=protocol,value=ALL) |
cipher-suite |
Uma lista de vírgula separada das cifras de criptografia que são permitidas. O default JVM para o JSSE contém cifras fracas que não devem ser usadas. A amostra lista apenas duas cifras possíveis, mas as amostras atuais provavelmente usarão mais.
|
/profile=default/subsystem=web/connector=HTTPS/ssl=configuration/:write-attribute(name=cipher-suite, value="TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA") |
key-alias |
O alias usado para o certificado do servidor no keystore. O valor default é
jboss .
|
/profile=default/subsystem=web/connector=HTTPS/ssl=configuration/:write-attribute(name=key-alias,value=jboss) |
truststore-type |
O tipo de truststore. Os diversos tipos de keystores estão disponíveis, incluindo o
PKCS12 e o default JKS do Java.
|
/profile=default/subsystem=web/connector=HTTPS/ssl=configuration/:write-attribute(name=truststore-type,value=jks) |
keystore-type |
O tipo do keystore. Diversos tipos de keystore estão disponíveis, incluindo o
PKCS12 e o default JKS do Java.
|
/profile=default/subsystem=web/connector=HTTPS/ssl=configuration/:write-attribute(name=keystore-type,value=jks) |
ca-certificate-file |
O arquivo contendo os certificados CA. Isto é o
truststoreFile , no caso do JSSE, e usa a mesma senha do keystore. O arquivo ca-certificate-file é usado para validar os certificados do cliente.
|
/profile=default/subsystem=web/connector=HTTPS/ssl=configuration/:write-attribute(name=certificate-file,value=ca.crt) |
ca-certificate-password |
A senha do Certificado para o
ca-certificate-file . Na amostra abaixo, substitua a senha pela própria senha mascarada.
|
/profile=default/subsystem=web/connector=HTTPS/ssl=configuration/:write-attribute(name=ca-certificate-password,value=MASKED_PASSWORD) |
ca-revocation-url |
O arquivo ou URL que contém a lista de revocação. Isto refere-se ao
crlFile para o JSSE ou o SSLCARevocationFile para o SSL.
|
/profile=default/subsystem=web/connector=HTTPS/ssl=configuration/:write-attribute(name=ca-revocation-url,value=ca.crl) |
session-cache-size |
O tamanho do cache SSLSession. O default é
0 , que desativa do cache da sessão.
|
/profile=default/subsystem=web/connector=HTTPS/ssl=configuration/:write-attribute(name=session-cache-size,value=100) |
session-timeout |
O número de sessões antes de um SSLSession com cache expirar. O default é
86400 segundos, que é 24 horas.
|
/profile=default/subsystem=web/connector=HTTPS/ssl=configuration/:write-attribute(name=session-timeout,value=43200) |
Capítulo 8. Security Realms
8.1. Security Realms
- O
ManagementRealm
efetua o store da informação do usuário, senha e função para o Management API e Management Console baseado na web. Ele fornece um sistema de autenticação para o próprio JBoss Enterprise Application Plataform. Você pode usar também oManagementRealm
caso o seu aplicativo necessitasse autenticar nas mesmas regras comerciais de uso para o Management API. - O
ApplicationRealm
efetua o store da informação do usuário, senha e dos Aplicativos da Web e EJBs.
- O
REALM-users.properties
efetua o store dos nomes de usuários e senhas com hash. - O
REALM-users.roles
efetua o store dos mapeamentos do usuário-para-função.
domain/configuration/
e standalone/configuration/
. Os arquivos são gravados simultaneamente pelo comando add-user.sh
ou add-user.bat
. Quando você executar o comando, a primeira decisão que você realiza é qual realm adicionar ao seu novo usuário.
8.2. Adição do Novo Security Realm
Execute o Management CLI.
Inicie o comandojboss-cli.sh
oujboss-cli.bat
e conecte-se ao servidor.Crie um novo security realm.
Execute o seguinte comando para criar um novo security realm nomeadoMyDomain
no domain controller ou o servidor autônomo./host=master/core-service=management/security-realm=MyDomainRealm:add()
Crie as referências ao arquivo de propriedade que irá aplicar o store na informação a respeito da nova função.
Execute o seguinte comando para criar um direcionador ao arquivo nomeadomyfile.properties
, que terá as propriedades pertencentes à nova função.Nota
O arquivo de propriedade recentemente criado não é gerenciado pelos scriptsadd-user.sh
eadd-user.bat
incluídos. Ele deve ser gerenciado externamente./host=master/core-service=management/security-realm=MyDomainRealm/authentication=properties:add(path=myfile.properties)
O seu novo security realm é criado. Quando você adicionar usuários e funções a este novo realm, a informação será stored num arquivo separado aos security realms padrões. Você pode gerenciar este novo arquivo usando os seus próprios aplicativos e procedimentos.
8.3. Adição de um usuário ao Security Realm
Execute o comando
add-user.sh
ouadd-user.bat
.Abra o command-line interface (CLI - interface da linha de comando). Altere os diretórios para o diretórioEAP_HOME/bin/
. Caso você esteja executando o Red Hat Enterprise Linux ou outro sistema operacional UNIX, execute oadd-user.sh
. Caso você execute o Microsoft Windows Server, execute oadd-user.bat
.Escolha entre adicionar o Usuário de Gerenciamento ou o Usuário do Aplicativo.
Para este procedimento, digiteb
para adicionar o Usuário do Aplicativo.Escolha o realm que o usuário será adicionado.
Por default, o único realm disponível é oApplicationRealm
. Caso você tenha adicionado um realm personalizado, você pode digitar o seu nome.Digite o nome do usuário, senha e funções quando solicitado.
Digite o nome do usuário, senha e funções quando solicitado. Verifique sua escolha digitandoyes
ou digiteno
para cancelar as alterações. As alterações são gravadas a cada um dos arquivos de propriedade para o security realm.
Capítulo 9. Configuração do Subsistema
9.1. Configuração do Subsistema da Transação
9.1.1. Configuração do ORB para o JTS Transactions
Nota
full
e full-ha
apenas. Num servidor autônomo ele está disponível quando você usar as configurações standalone-full.xml
ou standalone-full-ha.xml
.
Procedimento 9.1. Configuração do ORB usando o Management Console
Visualização das configurações do perfil.
Selecione Profiles (managed domain) ou Profile (servidor autônomo) a partir da parte superior direita do management console. Caso você use um managed domain, selecione tanto o perfil full ou full-ha a partir da caixa de seleção no topo esquerdo superior.Modifique as Configurações Initializers
Expanda o menu Subsystems na parte esquerda, se necessário. Expanda o submenu Container e clique em JacORB.Selecione a tab Initializers e clique no botão Edit da mesma forma que aparece na tela principal.Habilite os interceptores pela configuração do valor Security paraon
.Para habilitar o ORB para JTS, configure o valor Transaction Interceptors paraon
ao invés dospec
default.Refira-se ao link Need Help? no formulário de explicações detalhadas sobre esses valores. Clique em Save quando você finalizar a edição dos valores.Configuração ORB Avançada
Refira-se às demais seções do formulário para opções de configuração avançada. Cada seção inclui um link Need Help? com a informação detalhada sobre os parâmetros.
Você pode configurar cada aspecto do ORB usando o Management CLI. Os seguintes comandos configuram os inicializadores aos mesmos valores conforme o procedimento acima, para o Management Console. Esta é a configuração mínima para o ORB a ser usado com o JTS.
/profile=full
de comandos.
Exemplo 9.1. Habilite os Interceptores de Segurança
/profile=full/subsystem=jacorb/:write-attribute(name=security,value=on)
Exemplo 9.2. Habilite o ORB para o JTS
/profile=full/subsystem=jacorb/:write-attribute(name=transactions,value=on)
9.2. Configuração JMS.
9.2.1. Referência aos Atributos de Configuração HornetQ
read-resource
.
Exemplo 9.3. Amostra
[standalone@localhost:9999 /] /subsystem=messaging/hornetq-server=default:read-resource
Tabela 9.1. Atributos HornetQ
Função | Valor de Amostra | Tipo |
---|---|---|
allow-failback | verdadeiro | BOOLEANO |
async-connection-execution-enabled | verdadeiro | BOOLEANO |
backup | falso | BOOLEANO |
cluster-password | somethingsecure | SEQUÊNCIA |
cluster-user | HORNETQ.CLUSTER.ADMIN.USER | SEQUÊNCIA |
clustered | falso | BOOLEANO |
connection-ttl-override | -1 | LONGO |
create-bindings-dir | verdadeiro | BOOLEANO |
create-journal-dir | verdadeiro | BOOLEANO |
failback-delay | 5000 | LONGO |
failover-on-shutdown | falso | BOOLEANO |
id-cache-size | 2000 | INT |
jmx-domain | org.hornetq | SEQUÊNCIA |
jmx-management-enabled | falso | BOOLEANO |
journal-buffer-size | 100 | LONGO |
journal-buffer-timeout | 100 | LONGO |
journal-compact-min-files | 10 | INT |
journal-compact-percentage | 30 | INT |
journal-file-size | 102400 | LONGO |
journal-max-io | 1 | INT |
journal-min-files | 2 | INT |
journal-sync-non-transactional | verdadeiro | BOOLEANO |
journal-sync-transactional | verdadeiro | BOOLEANO |
journal-type | ASYNCIO | SEQUÊNCIA |
live-connector-ref | referência | SEQUÊNCIA |
log-journal-write-rate | falso | BOOLEANO |
management-address | jms.queue.hornetq.management | SEQUÊNCIA |
management-notification-address | hornetq.notifications | SEQUÊNCIA |
memory-measure-interval | -1 | LONGO |
memory-warning-threshold | 25 | INT |
message-counter-enabled | falso | BOOLEANO |
message-counter-max-day-history | 10 | INT |
message-counter-sample-period | 10000 | LONGO |
message-expiry-scan-period | 30000 | LONGO |
message-expiry-thread-priority | 3 | INT |
page-max-concurrent-io | 5 | INT |
perf-blast-pages | -1 | INT |
persist-delivery-count-before-delivery | falso | BOOLEANO |
persist-id-cache | verdadeiro | BOOLEANO |
persistence-enabled | verdadeiro | BOOLEANO |
remoting-interceptors | indefinido | LISTA |
run-sync-speed-test | falso | BOOLEANO |
scheduled-thread-pool-max-size | 5 | INT |
security-domain | outros | SEQUÊNCIA |
security-enabled | verdadeiro | BOOLEANO |
security-invalidation-interval | 10000 | LONGO |
server-dump-interval | -1 | LONGO |
shared-store | verdadeiro | BOOLEANO |
started | verdadeiro | BOOLEANO |
thread-pool-max-size | 30 | INT |
transaction-timeout | 300000 | LONGO |
transaction-timeout-scan-period | 1000 | LONGO |
version | 2.2.16.Final (HQ_2_2_16_FINAL, 122) | SEQUÊNCIA |
wild-card-routing-enabled | verdadeiro | BOOLEANO |
Atenção
journal-file-size
deve ser maior que o tamanho da mensagem enviada ao servidor ou o servidor não estará apto a store a mensagem.
Capítulo 10. Web, Conectores HTTP e Clustering HTTP
10.1. Configuração de um Nó Trabalhador mod_cluster
mod_cluster
. Para configurar o subsistema mod_cluster
, refira-se ao Configure the mod_cluster Subsystem no Administration and Configuration Guide. Cada nó trabalhador é configurado separadamente, portanto repita este procedimento para cada nó caso você deseje adicioná-lo ao cluster.
Configuração do Nó Trabalhador
- Caso você use um servidor autônomo, ele deve ser iniciado com o perfil
standalone-ha
. - Caso você use o managed domain, o seu grupo do servidor deve ser o perfil
ha
oufull-ha
e o grupo socket bindingha-sockets
oufull-ha-sockets
. O JBoss Enterprise Application Plataform lança o grupo do servidor habilitado com cluster, chamadoother-server-group
, que encontra esses requerimentos.
Nota
/profile=full-ha
dos comandos.
Procedimento 10.1. Configuração do Nó Trabalhador
Configuração das interfaces da rede.
Por default, as interfaces da rede são padrões ao127.0.0.1
. Cada host físico que o realiza o host tanto no servidor autônomo, ou um ou mais servidores num grupo de servidor, precisa que suas interfaces sejam consideradas para uso do próprio endereço IP público, do qual outros servidores podem ver.Para a alteração do endereço IP do host do JBoss Enterprise Application Plataform, você precisa desligar e editar seus arquivos de configuração diretamente. Isto é devido ao Management API que direciona o Management Console e Management CLI baseiar-se no endereço de gerenciamento estável.Siga as seguintes etapas para alteração do endereço IP de cada servidor do seu cluster ao endereço IP público mestre.- Desligue o servidor completamente.
- Edite o
host.xml
, que está noEAP_HOME/domain/configuration/
para o managed domain ou o arquivostandalone-ha.xml
, que está noEAP_HOME/standalone/configuration/
para o servidor autônomo. - Localize o elemento
<interfaces>
. Três interfaces são configuradas,management
,public
eunsecured
. Para cada uma delas, altere o valor127.0.0.1
para o endereço IP externo do host. - Para os hosts que participam num managed domain mas não são o mestre, localize o elemento
<host
. Perceba que isto não possui o símbolo>
, uma vez que isto contém os atributos. Altere o valor de seu atributo de nome a partir domaster
a um nome único (um nome diferente por escravo). Este nome será usado também pelo escravo para identificar o cluster, portanto faça uma anotação sobre isto. - Para os hosts recém configurados que precisam unir-se ao managed domain, encontre o elemento
<domain-controller>
. Comente ou remova o elemento<local />
e adicione a linha de comando, alterando o endereço IP (X.X.X.X
) ao endereço do domain controller. Esta etapa não é válida ao servidor autônomo.<remote host="X.X.X.X" port="${jboss.domain.master.port:9999}" security-realm="ManagementRealm"/>
- Salve o arquivo e saia.
Configuração da autenticação para o servidor escravo.
Cada servidor escravo precisa de um nome de usuário e senha criados noManagementRealm
mestre autônomo ou domain controller. No domain controller ou mestre autônomo, execute o comandoEAP_HOME/add-user.sh
. Adicione um usuário com o mesmo nome do usuário ao do escravo para oManagementRealm
. Quando você for solicitado se este usuário precisará autenticar à uma instância JBoss AS, por favor respondayes
. Segue abaixo uma amostra de uma entrada e saída do comando abaixo, para o escravo chamadoslave1
com a senhachangeme
.user:bin user$ ./add-user.sh What type of user do you wish to add? a) Management User (mgmt-users.properties) b) Application User (application-users.properties) (a):
a
Enter the details of the new user to add. Realm (ManagementRealm) : Username :slave1
Password :changeme
Re-enter Password :changeme
About to add user 'slave1' for realm 'ManagementRealm' Is this correct yes/no?yes
Added user 'slave1' to file '/home/user/jboss-eap-6.0/standalone/configuration/mgmt-users.properties' Added user 'slave1' to file '/home/user/jboss-eap-6.0/domain/configuration/mgmt-users.properties' Is this new user going to be used for one AS process to connect to another AS process e.g. slave domain controller? yes/no? yes To represent the user add the following to the server-identities definition <secret value="Y2hhbmdlbWU=" />Copie o elemento Base64-encoded
<secret>
a partir da saídaadd-user.sh
Caso você deseje especificar o valor de senha codificada Base64 para a autenticação, copie o valor do elemento<secret>
a partir da última linha do resultadoadd-user.sh
uma vez que você precisará disto na etapa abaixo.Modifique o security realm do host escravo para uso da nova autenticação.
- Reabra o arquivo
host.xml
oustandalone-ha.xml
do host escravo. - Localize o elemento
<security-realms>
. Isto é onde você configura o security realm. - Você pode especificar o valor secreto em uma das seguintes maneiras:
Especifique o valor de senha codificada Based64 no arquivo da configuração.
- Adicione o seguinte bloco do código XML diretamente abaixo da linha
<security-realm name="ManagementRealm">
,<server-identities> <secret value="Y2hhbmdlbWU="/> </server-identities>
- Substitua"Y2hhbmdlbWU=" pelo valor secreto retornado a partir do resultado
add-user.sh
na etapa anterior.
Configure o host para obter a senha a partir do vault.
- Use o script
vault.sh
para gerar a senha mascarada. Ele gerará uma sequência como o seguinte:VAULT::secret::password::ODVmYmJjNGMtZDU2ZC00YmNlLWE4ODMtZjQ1NWNmNDU4ZDc1TElORV9CUkVBS3ZhdWx0
.Você pode encontrar maiores informações sobre o vault nos vaults da Senha para a seção das Sequências Sensitivas deste guia iniciando aqui: Seção 3.8.1, “Sequências Confidenciais de Segurança nos Arquivos de texto limpo”. - Adicione o seguinte bloco do código XML diretamente abaixo da linha
<security-realm name="ManagementRealm">
.<server-identities> <secret value="${VAULT::secret::password::ODVmYmJjNGMtZDU2ZC00YmNlLWE4ODMtZjQ1NWNmNDU4ZDc1TElORV9CUkVBS3ZhdWx0}"/> </server-identities>
Certifique-se de substituir o valor secreto pela senha mascarada na etapa anterior.Nota
Quando criando uma senha no vault, ela deve ser especificada num texto plano, e não no Based64 codificado.
Especifique a senha como uma propriedade do sistema.
- Adicione o seguinte bloco do código XML diretamente abaixo da linha
<security-realm name="ManagementRealm">
<server-identities> <secret value=${server.identity.password}/> </server-identities>
- Quando você especificar a senha como uma propriedade de sistema, você pode configurar o host nas seguintes maneiras:
- Inicie o servidor inserindo a senha num texto plano como o argumento da linha de comando, por exemplo:
-Dserver.identity.password=changeme
Nota
A senha deve ser inserida num texto plano e será visível a qualquer um que emite um comandops -ef
. - Posicione a senha num arquivo de propriedades e passe o URL do arquivo das propriedades como um argumento da linha de comando.
- Adicione o par chave/valor a um arquivo de propriedades. Por exemplo:
server.identity.password=changeme
- Inicie o servidor como os argumentos da linha de comando
--properties=URL_TO_PROPERTIES_FILE
.
- Salve e saia do arquivo.
Reinicie o servidor.
O escravo será agora autenticado ao mestre usando o seu nome do host como o nome de usuário e a sequência criptografada como sua senha.
Capítulo 11. Network Security
11.1. Segurança das Interfaces de Gerenciamento
Num ambiente de teste, é típico executar o JBoss Enterprise Application Plataform 6 sem camada de segurança nas interfaces de gerenciamento, compostas do Management Console, Management CLI e qualquer outra implementação do API. Isto permite alterações rápidas de configuração e desenvolvimento .
11.2. Especificação da Interface de Rede utilizada pelo JBoss Enterprise Application Plataform
Realize o isolamento de serviços de forma que eles sejam acessíveis apenas aos clientes que precisam aumentar a segurança de sua rede. O JBoss Enterprise Application Plataform inclui duas interfaces em sua configuração default, ambas realizam o bind no endereço IP 127.0.0.1
ou localhost
por default. Uma das interfaces é chamada management
e é usada pelo Management Console, CLI e API. A outra é chamada public
e é usada para implantar aplicativos. Essas interfaces não são especiais ou significantes, porém são fornecidas como um ponto de partida.
management
usa as portas 9990 e 9999 por default e a interface public
usa a porta 8080 ou porta 8443 caso você use o HTTPS.
Atenção
Interrompa o JBoss Enterprise Application Plataform.
Interrompa o JBoss Enterprise Application Plataform pelo envio de uma interrupção de forma apropriada para o seu sistema operacional. Caso você estiver executando o JBoss Enterprise Application Plataform como um aplicativo de primeiro plano, a maneira típica de realizar isto é pressionar Ctrl+C.Reinicie o JBoss Enterprise Application Plataform especificando o endereço bind.
Use a opção da linha de comando-b
para iniciar o JBoss Enterprise Application Plataform numa interface específica.Exemplo 11.1. Especifique a interface pública.
EAP_HOME/bin/domain.sh -b 10.1.1.1
Exemplo 11.2. Especifique a interface de gerenciamento.
EAP_HOME/bin/domain.sh -bmanagement=10.1.1.1
Exemplo 11.3. Especifique os diferentes endereços para cada interface.
EAP_HOME/bin/domain.sh -bmanagement=127.0.0.1 -b 10.1.1.1
Exemplo 11.4. Efetue a interface pública a todas as interfaces da rede.
EAP_HOME/bin/domain.sh -b 0.0.0.0
-b
para especificar o endereço IP no período de execução, portanto isto não é recomendado. Caso você decida realizar isto, certifique-se de encerrar o JBoss Enterprise Application Plataform completamente antes de editar o arquivo XML.
11.3. Configuração dos Firewalls de Rede para Trabalho com o JBoss Enterprise Application Plataform 6
A maioria dos ambientes de produção usa firewalls como parte de uma estratégia de segurança de rede. Caso você precise de instâncias do servidor múltiplas para comunicação entre si ou serviços externos, tal como os servidores da web ou fonte de dados, o seu firewall precisará levar isto em consideração. Um firewall bem gerenciado apenas abre as portas que são necessárias e os protocolos de rede.
Pré-requisitos
- Determine as portas que você precisa abrir. Refira-se à Seção 11.4, “Portas de rede usadas pelo JBoss Enterprise Application Plataform 6” para determinar a lista de portas para sua situação.
- É necessário um entendimento sobre o software do firewall. Este procedimento usa o comando
system-config-firewall
no Red Hat Enterprise Linux 6. O Servidor do Microsoft Windows inclui um firewall interno e diversas soluções de firewall de terceiros estão disponíveis para cada plataforma.
Este procedimento configura um firewall num ambiente com as seguintes pressuposições:
- O sistema operacional é Red Hat Enterprise Linux 6.
- O JBoss Enterprise Application Plataform é executado no host
10.1.1.2
. Opcionalmente, o servidor possui o próprio firewall. - O servidor do firewall da rede é executado no host
10.1.1.1
doeth0
da interface e possui umeth1
de interface externa. - Você desejará um tráfego na porta 5445 (uma porta usada pelo JMS) enviado ao JBoss Enterprise Application Plataform 6. Nenhum outro tráfego deve ser permitido através do firewall da rede.
Procedimento 11.1. Gerencie os Firewalls da Rede e JBoss Enterprise Application Plataform 6 para funcionamento juntos.
Efetue o log ao Management Console.
Efetue o log ao Consolde de Gerenciamento. Por default, ele executa no http://localhost:9990/console/.Determine os socket bindings usados pelo grupo socket binging.
Clique no rótulo Profiles no canto superior do Management Console. No canto esquerdo da tela uma série de menus é apresentada. O cabeçalho do menu inferior é General Configuration. Clique no item Socket Binding Groups abaixo deste cabeçalho. A tela Socket Binding Declarations irá aparecer. Inicialmente, o grupostandard-sockets
é apresentado. Você pode escolher um grupo diferente selecionando-o a partir da caixa de combinação no lado direito.Nota
Caso você use um servidor autônomo, isto possui apenas um grupo socket binding.A lista dos nomes do socket e portas são apresentados, seis valores por página. Você pode avançar nas páginas pelo uso da flecha de navegação na parte inferior da tela.Determine as portas que você precisa abrir.
Dependendo da funcionalidade da porta particular e das necessidades de seu ambiente, algumas das portas podem precisar serem acessadas através de seu firewall. Caso você não tenha certeza do propósito de um socket binding, refira-se à Seção 11.4, “Portas de rede usadas pelo JBoss Enterprise Application Plataform 6” para uma lista dos socket bindings default e seus propósitos.Configure seu firewall para envio de tráfego ao JBoss Enterprise Application Plataform.
Execute essas etapas para configurar o seu firewall de rede para permitir tráfego na porta desejada.- Efetue o log em sua máquina de firewall e acesse a solicitação de comando como usuário root.
- Insira o comando
system-config-firewall
para lançar a utilidade de configuração do firewall. Um GUI ou a utilidade da linha de comando é lançada, dependendo da maneira em que você está registrado no sistema firewall. Essa tarefa assume que você está registrado através do SSH e usando a interface da linha de comando. - Use a chave TAB em seu teclado para navegar ao botão Customize e pressione a chave ENTER. A tela Trusted Services aparecerá.
- Não altere qualquer valor, porém use a chave TAB para navegar ao botão Forward e pressione ENTER para avançar à próxima tela. A tela Other Ports aparecerá.
- Use a chave TAB para navegar ao seu botão <Add> e pressione ENTER. A tela Port and Protocol aparecerá.
- Insira
5445
no campo Port / Port Range e use a chave TAB para mover ao campo Protocol e insiratcp
. Use a chave TAB para navegar ao botão OK e pressione ENTER. - Use a chave TAB para navegar ao botão Forward até que você encontre a tela Port Forwarding.
- Use a chave TAB para navegar ao seu botão <Add> e pressione ENTER.
- Preencha os valores seguintes para determinar a porta de envio para a porta 5445.
- Interface de fonte: eth1
- Protocolo: tcp
- Porta / Intervalo de Porta: 5445
- Destinação do endereço IP: 10.1.1.2
- Porta / Intervalo de Porta: 5445
Use a chave TAB para navegar ao botão OK e pressione ENTER. - Use a chave TAB para navegar ao botão Close e pressione ENTER.
- Use a chave TAB para navegar ao botão OK e pressione ENTER. Leia o aviso e clique Yes para que as alterações tenham efeito.
Configure um firewall em seu host do JBoss Enterprise Application Plataform 6.
Algumas organizações escolhem em configurar no servidor do JBoss Enterprise Application Plataform 6, e encerram todas as portas que não necessárias para esta operação. Consulte a Seção 11.4, “Portas de rede usadas pelo JBoss Enterprise Application Plataform 6” e determine quais portas devem ser abertas, e encerre o resto. A configuração default do Red Hat Enterprise Linux 6 encerra todas as portas com exceção da 22 (usada para Secure Shell (SSH) e 5353 (usada para multicast DNS). Enquanto você configura as portas, certifique-se de ter acesso físico ao seu servidor de forma que você não bloqueie-se acidentalmente.
O seu firewall está configurado para envio de tráfego ao seu servidor do JBoss Enterprise Application Plataform 6 em sua configuração do firewall. Caso você escolha em habilitar um firewall no seu servidor, todas as portas são encerradas com exceção daquelas necessárias para executarem seus aplicativos.
11.4. Portas de rede usadas pelo JBoss Enterprise Application Plataform 6
- Se é que os seus grupos de servidores usam um dos grupos socket binding, ou um grupo personalizado.
- Solicitações de suas implantações individuais.
Nota
Grupos Socket Binding default
full-ha-sockets
full-sockets
ha-sockets
standard-sockets
Tabela 11.1. Referência aos socket bindings default
Nome | Porta | Porta Multicast | Descrição | full-ha-sockets | full-sockets | ha-socket | standard-socket |
---|---|---|---|---|---|---|---|
ajp | 8009 | Protocolo Apache JServ. Usado para o balanceamento de carga e para aplicar o cluster HTTP. | Sim | Sim | Sim | Sim | |
http | 8080 | A porta default para os aplicativos da web implantados. | Sim | Sim | Sim | Sim | |
https | 8443 | A conexão criptografada SSL entre os aplicativos da web implantados e os clientes. | Sim | Sim | Sim | Sim | |
jacorb | 3528 | Serviços CORBA para transações JTS e outros serviços dependentes ORB. | Sim | Sim | Não | Não | |
jacorb-ssl | 3529 | Os serviços CORBA criptografados SSL. | Sim | Sim | Não | Não | |
jgroups-diagnostics | 7500 | Multicast. Usado para descobrir pares nos clusters HA. | Sim | Não | Sim | Não | |
jgroups-mping | 45700 | Multicast. Usado para descobrir o associado inicial num clusters HA. | Sim | Não | Sim | Não | |
jgroups-tcp | 7600 | Descoberta de pares unicast nos clusters HA usando TCP. | Sim | Não | Sim | Não | |
jgroups-tcp-fd | 57600 | Usado para detecção de falha HA sobre o TCP. | Sim | Não | Sim | Não | |
jgroups-udp | 55200 | 45688 | Descoberta de pares unicast nos clusters HA usando UDP. | Sim | Não | Sim | Não |
jgroups-udp-fd | 54200 | Usado para detecção de falha HA sobre o UDP. | Sim | Não | Sim | Não | |
messaging | 5445 | Serviço JMS. | Sim | Sim | Não | Não | |
messaging-group | Referenciado pela difusão HornetQ JMS e grupos de descoberta. | Sim | Sim | Não | Não | ||
messaging-throughput | 5455 | Usado pelo JMS Remoto. | Sim | Sim | Não | Não | |
mod_cluster | 23364 | A porta multicast de comunicação entre o JBoss Enterprise Application Plataform e o balanceador de carga HTTP. | Sim | Não | Sim | Não | |
osgi-http | 8090 | Usado pelos componentes internos que usam o subsistema OSGi | Sim | Sim | Sim | Sim | |
remoting | 4447 | Usado para invocação remota EJB. | Sim | Sim | Sim | Sim | |
txn-recovery-environment | 4712 | O gerenciador de recuperação da transação JTA. | Sim | Sim | Sim | Sim | |
txn-status-manager | 4713 | Gerenciador da Transação JTA / JTS. | Sim | Sim | Sim | Sim |
Adicionado aos grupos socket binding, cada host controller abre duas portas para propósitos de gerenciamento:
- 9990 - A porta do Web Management Console
- 9999 - A porta usada pelo Management Console e Management API
Parte III. Aplicativos de Segurança
Capítulo 12. Segurança do Aplicativo
12.1. Habilitação/Desabilitação da Substituição da Propriedade baseada no Descritor
Atenção
12.2. Segurança da Fonte de Dados
12.2.1. Segurança da Fonte de Dados
- Security Domains: Seção 6.1, “Security Domains”.
Exemplo 12.1. Amostra do Security Domain
<security> <security-domain>mySecurityDomain</security-domain> </security>
Exemplo 12.2. Amostra do Vault de Senha
<security> <user-name>admin</user-name> <password>${VAULT::ds_ExampleDS::password::N2NhZDYzOTMtNWE0OS00ZGQ0LWE4MmEtMWNlMDMyNDdmNmI2TElORV9CUkVBS3ZhdWx0}</password> </security>
12.3. Segurança do Aplicativo EJB
12.3.1. Identidade de Segurança
12.3.1.1. Identidade de Segurança EJB
<security-identity>
na configuração de segurança. Isto refere-se à identidade de outro EJB deve usar quando ele invocar os métodos nos componentes.
<use-caller-identity>
está presente e no segundo caso a tag <run-as>
for usada.
12.3.1.2. Determine a Identidade de Segurança de um EJB
Exemplo 12.3. Determine a identidade de segurança de um EJB a ser o mesmo ao do seu chamador
<security-identity>
.
<ejb-jar> <enterprise-beans> <session> <ejb-name>ASessionBean</ejb-name> <!-- ... --> <security-identity> <use-caller-identity/> </security-identity> </session> <!-- ... --> </enterprise-beans> </ejb-jar>
Exemplo 12.4. Determine a identidade de segurança de um EJB para uma função específica
<run-as>
ou <role>
dentro da tag <security-identity>
.
<ejb-jar> <enterprise-beans> <session> <ejb-name>RunAsBean</ejb-name> <!-- ... --> <security-identity> <run-as> <description>A private internal role</description> <role-name>InternalRole</role-name> </run-as> </security-identity> </session> </enterprise-beans> <!-- ... --> </ejb-jar>
<run-as>
, um principal nomeado anonymous
é determinado para chamadas de saída. Para determinar um principal diferente, use o <run-as-principal>
.
<session> <ejb-name>RunAsBean</ejb-name> <security-identity> <run-as-principal>internal</run-as-principal> </security-identity> </session>
Nota
<run-as>
e <run-as-principal>
dentro de um elemento servlet.
Consulte também:
12.3.2. Permissões de Método EJB
12.3.2.1. Permissões do Método EJB
<method-permisison>
. Essa declaração determina as funções que são permitidas a invocar os métodos da interface EJB. Você pode especificar permissões para as seguintes combinações:
- Todos os métodos da interface do componente e principal do EJB nomeado
- O método especificado da interface do componente e principal do EJB nomeado
- O método especificado com um conjunto de métodos com um nome sobrecarregado
12.3.2.2. Uso das Permissões do Método EJB
O elemento <method-permission>
define as funções lógicas que são permitidas para acesso ao método EJB definido pelos elementos <method>
. Diversas amostras demonstram a sintaxe do XML. As declarações de permissão do método podem estar presentes e elas possuem efeito cumulativo. O elemento <method-permission>
é um filho do elemento <assembly-descriptor>
do descritor <ejb-jar>
.
Exemplo 12.5. Permite que funções acessem todos os métodos de um EJB
<method-permission> <description>The employee and temp-employee roles may access any method of the EmployeeService bean </description> <role-name>employee</role-name> <role-name>temp-employee</role-name> <method> <ejb-name>EmployeeService</ejb-name> <method-name>*</method-name> </method> </method-permission>
Exemplo 12.6. Permite que funções acessem apenas métodos especificados de um EJB e limitam os parâmetros de método que precisam ser passados.
<method-permission> <description>The employee role may access the findByPrimaryKey, getEmployeeInfo, and the updateEmployeeInfo(String) method of the AcmekPayroll bean </description> <role-name>employee</role-name> <method> <ejb-name>AcmekPayroll</ejb-name> <method-name>findByPrimaryKey</method-name> </method> <method> <ejb-name>AcmePayroll</ejb-name> <method-name>getEmployeeInfo</method-name> </method> <method> <ejb-name>AcmePayroll</ejb-name> <method-name>updateEmployeeInfo</method-name> <method-params> <method-param>java.lang.String</method-param> </method-params> </method> </method-permission>
Exemplo 12.7. Permite que qualquer usuário autenticado acesse os métodos do EJBs
<unchecked/>
permite que qualquer usuário autenticado use os métodos especificados.
<method-permission> <description>Any authenticated user may access any method of the EmployeeServiceHelp bean</description> <unchecked/> <method> <ejb-name>EmployeeServiceHelp</ejb-name> <method-name>*</method-name> </method> </method-permission>
Exemplo 12.8. Exclui completamente os métodos EJB específicos de serem utilizados
<exclude-list> <description>No fireTheCTO methods of the EmployeeFiring bean may be used in this deployment</description> <method> <ejb-name>EmployeeFiring</ejb-name> <method-name>fireTheCTO</method-name> </method> </exclude-list>
Exemplo 12.9. Um <assembly-descriptor>
completo contendo diversos blocos <method-permission>
<ejb-jar> <assembly-descriptor> <method-permission> <description>The employee and temp-employee roles may access any method of the EmployeeService bean </description> <role-name>employee</role-name> <role-name>temp-employee</role-name> <method> <ejb-name>EmployeeService</ejb-name> <method-name>*</method-name> </method> </method-permission> <method-permission> <description>The employee role may access the findByPrimaryKey, getEmployeeInfo, and the updateEmployeeInfo(String) method of the AcmePayroll bean </description> <role-name>employee</role-name> <method> <ejb-name>AcmePayroll</ejb-name> <method-name>findByPrimaryKey</method-name> </method> <method> <ejb-name>AcmePayroll</ejb-name> <method-name>getEmployeeInfo</method-name> </method> <method> <ejb-name>AcmePayroll</ejb-name> <method-name>updateEmployeeInfo</method-name> <method-params> <method-param>java.lang.String</method-param> </method-params> </method> </method-permission> <method-permission> <description>The admin role may access any method of the EmployeeServiceAdmin bean </description> <role-name>admin</role-name> <method> <ejb-name>EmployeeServiceAdmin</ejb-name> <method-name>*</method-name> </method> </method-permission> <method-permission> <description>Any authenticated user may access any method of the EmployeeServiceHelp bean</description> <unchecked/> <method> <ejb-name>EmployeeServiceHelp</ejb-name> <method-name>*</method-name> </method> </method-permission> <exclude-list> <description>No fireTheCTO methods of the EmployeeFiring bean may be used in this deployment</description> <method> <ejb-name>EmployeeFiring</ejb-name> <method-name>fireTheCTO</method-name> </method> </exclude-list> </assembly-descriptor> </ejb-jar>
12.3.3. Anotações de Segurança EJB
12.3.3.1. Anotações de Segurança EJB
- @DeclareRoles
- Declara quais funções estão disponíveis.
- @SecurityDomain
- Especifica o security domain para uso do EJB. Caso o EJB for anotado para a autorização com o
@RolesAllowed
, a autorização será apenas válida caso o EJB seja anotado do security domain. - @RolesAllowed, @PermitAll, @DenyAll
- Especifica quais permissões de método são permitidas. Refira-se à Seção 12.3.2.1, “Permissões do Método EJB”, para maiores informações sobre as permissões do método.
- @RolesAllowed, @PermitAll, @DenyAll
- Especifica quais permissões de método são permitidas. Refira-se à Seção 12.3.2.1, “Permissões do Método EJB”, para maiores informações sobre as permissões do método.
- @RunAs
- Configura a identidade de segurança propagada de um componente.
12.3.3.2. Anotações da Segurança EJB
Você pode usar tanto os descritores ou anotações XML para controlar quais funções de segurança estão aptas a chamar métodos em seu Enterprise JavaBeans (EJBs). Para maiores informações no uso dos descritores XML, refira-se à Seção 12.3.2.2, “Uso das Permissões do Método EJB”.
Anotações para Controle das Permissões de Segurança dos EJBs
- @DeclareRoles
- Use @DeclareRoles para definir quais funções de segurança verificar. Caso nenhum @DeclareRoles estiver presente, a lista é uma construção automática da anotação @RolesAllowed.
- @SecurityDomain
- Especifica o security domain para uso do EJB. Caso o EJB seja anotado para a autorização com o
@RolesAllowed
, a autorização irá apenas aplicar caso o EJB esteja anotado com o security domain. - @RolesAllowed, @PermitAll, @DenyAll
- Use o @RolesAllowed para listar quais funções são permitidas para acessar um método ou métodos. Use o @PermitAll ou @DenyAll para tanto permitir ou negar todas as funções de uso um método ou métodos.
- @RunAs
- Use @RunAs para especificar uma função de um método que sempre será executado.
Exemplo 12.10. Amostra das Anotações de Segurança
@Stateless @RolesAllowed({"admin"}) @SecurityDomain("other") public class WelcomeEJB implements Welcome { @PermitAll public String WelcomeEveryone(String msg) { return "Welcome to " + msg; } @RunAs("tempemployee") public String GoodBye(String msg) { return "Goodbye, " + msg; } public String public String GoodbyeAdmin(String msg) { return "See you later, " + msg; } }
WelcomeEveryone
. O método GoodBye
executa como função tempemployee
. Apenas a função admin
pode acessar o método GoodbyeAdmin
e quaisquer outros métodos sem anotação de segurança.
12.3.4. Acesso Remoto para os EJBs
12.3.4.1. Acesso de Método Remoto
Tipos de Transporte Suportados
- Socket / Socket de Segurança
- RMI / RMI sobre SSL
- HTTP / HTTPS
- Servlet / Servlet de Segurança
- Bisocket / Bisocket de Segurança
O sistema Remoting fornece também o marshalling de dados e serviços sem marshalling. O marshalling de dados refere-se à habilidade de mover com segurança os dados através dos limites da plataforma e da rede, de forma que um sistema separado pode executar trabalhos no mesmo. O trabalho é então enviado de volta ao sistema original e comporta-se como se tivesse manuseado manualmente.
Quando você realiza o design de um aplicativo diferente que usa o Remoting, você direciona o seu aplicativo à comunicar-se com o servidor pela configuração do mesmo para uso de um tipo especial de localizador de recurso chamado InvokerLocator
, que é uma Sequência simples com o formato de tipo de URL. O servidor escuta por solicitações para recursos remotos num connector
, que é configurado como parte do subsistema remoting
. O connector
manuseia a solicitação ao ServerInvocationHandler
configurado. Cada ServerInvocationHandler
implementa um invoke(InvocationRequest)
de método, que sabe como manusear a solicitação.
Camadas do Framework do JBoss Remoting
- O usuário interage com a camada externa. No lado do cliente, a camada externa é a classe
Client
, que envia as solicitações de invocação. No lado do servidor, ela é o InvocationHandler, que é implementado pelo usuário e recebe solicitações de invocação. - O transporte é controlado pela camada do invocador.
- A camada mais baixa contendo o marshaller e sem marshaller, que converte formatos de dados para formatos eletrônicos.
12.3.4.2. Retorno de Chamada Remoting
InvocationRequest
ao cliente. O seu código ao lado do servidor funciona da mesma forma independente do retorno de chamada ser assíncrono ou não. Apenas o cliente precisa saber desta diferença. O InvocationRequest do servidor envia um responseObject
ao cliente. Esta é a carga que o cliente solicita. Isto pode ser uma resposta direta a uma solicitação ou uma notificação de evento.
m_listeners
. Ele contém uma lista de todos os ouvintes que foram adicionados ao seu manuseador do servidor. A interface ServerInvocationHandler
inclui os métodos que o permitem gerenciar esta lista.
org.jboss.remoting.InvokerCallbackHandler
da interface, que processa os dados do retorno da chamada. Após implementar o manuseador do retorno de chamada, você pode tanto adicionar-se como um ouvinte para o retorno de chamada pull ou implementar o servidor do retorno de chamada para o retorno de chamada push.
Para o retorno de chamada pull, o seu cliente adiciona-se à lista do servidor de ouvintes usando o método Client.addListener()
. Ele então pesquisa o servidor periodicamente para a entrega assíncrona de dados do retorno de chamada. Esta pesquisa é executada usando o Client.getCallbacks()
.
O retorno de chamada push requer que seu aplicativo de cliente execute o seu próprio InvocationHandler. Para isto, você precisa executar um serviço Remoting ao lado do próprio cliente. Isto é chamado callback server. O servidor do retorno de chamada aceita as solicitações de entrada assíncronas e as processa para o solicitador (neste caso, o servidor). Com o objetivo de registrar o seu servidor de retorno de chamada do cliente com o servidor principal, por favor passe o InvokerLocator
do servidor do retorno de chamada como segundo argumento ao método addListener
.
12.3.4.3. Detecção do Servidor Remoting
12.3.4.4. Configuração do Subsistema Remoting
O JBoss Remoting possui três elementos configuráveis de nível superior: o pool thread do trabalhador, um ou mais conectores e as séries de URIs de conexão remota e local. Este tópico apresenta uma explicação de cada item configurado, amostra de comandos CLI de como configurar cada item e uma amostra XML de subsistema inteiramente configurado. Esta configuração é apenas válida ao servidor. A maioria das pessoas não irão precisar configurar o subsistema Remoting, a não ser que elas usem os conectores personalizados para os seus próprios aplicativos. Os aplicativos que atuam como clientes Remoting, tais como os EJBs, precisam de uma configuração separada para se conectarem a um conector específico.
Nota
Os CLI commands são formulados para o managed domain, quando configurando o perfil default
. Para configurar um perfil diferente, substitua o seu nome. Para o servidor autônomo, omita a parte /profile=default
do comando.
Existem poucos aspetos de configurações que estão fora do subsistema remoting
:
- Interface da Rede
- A interface da rede usada pelo subsistema
remoting
é a interfaceunsecure
definida nodomain/configuration/domain.xml
oustandalone/configuration/standalone.xml
.<interfaces> <interface name="management"/> <interface name="public"/> <interface name="unsecure"/> </interfaces>
A definição por host da interfaceunsecure
está definida nohost.xml
do mesmo diretório ao dodomain.xml
oustandalone.xml
. Esta interface é também usada por diversos outros subsistemas. Recomendamos atenção ao modificá-lo.<interfaces> <interface name="management"> <inet-address value="${jboss.bind.address.management:127.0.0.1}"/> </interface> <interface name="public"> <inet-address value="${jboss.bind.address:127.0.0.1}"/> </interface> <interface name="unsecure"> <!-- Used for IIOP sockets in the standard configuration. To secure JacORB you need to setup SSL --> <inet-address value="${jboss.bind.address.unsecure:127.0.0.1}"/> </interface> </interfaces>
- socket-binding
- O socket-binding default usado pelo subsistema
remoting
aplica o bind ao TCP porta 4777. Refira-se à documentação sobre socket bindings e seus grupos para maiores informações caso você precise alterá-los. - Referência de Conector Remoto para o EJB
- O subsistema EJB contém uma referência ao conector remoto para invocações de método remoto. Segue abaixo a configuração default:
<remote connector-ref="remoting-connector" thread-pool-name="default"/>
- Configuração de Transporte de Segurança
- Os transportes remotos usam o StratTLS para uso da conexão de segurança (HTTPS, Secure Servlet, etc) caso o cliente solicite isto. O mesmo socket binding (porta de rede) é usado para aplicar e retirar a segurança das conexões. O cliente solicita o transporte com ou sem segurança, conforme a própria necessidade. Os componentes do JBoss Enterprise Application Platform que usam o Remoting, tais como os EJBs, o ORB e o provedor JMS requerem interfaces com segurança por default.
Atenção
O pool thread é um grupo de threads que está disponível para processar trabalho que vêem através dos conectores Remoting. Ele é um <worker-thread-pool>
de elemento único e leva diversos atributos. Ajuste esses atributos caso você obter intervalos de rede, não tenha mais threads ou precise limitar o uso da memória. As recomendações específicas dependem de sua situação em específico. Contate os Serviços de Suporte Global da Red Hat para maiores informações.
Tabela 12.1. Atributos do Pool Thread do Trabalhador
Função | Descrição | Comando CLI |
---|---|---|
read-threads |
O número de leitura de threads para criação de trabalhador remoto. O default é
1 .
| /profile=default/subsystem=remoting/:write-attribute(name=worker-read-threads,value=1)
|
write-threads |
O número de threads de gravação para criação do trabalhador remoto. O default é
1 .
| /profile=default/subsystem=remoting/:write-attribute(name=worker-write-threads,value=1)
|
task-keepalive |
O número de milésimos de segundos para manter os threads de tarefa do trabalhador remoto sem core. O default é
60 .
| /profile=default/subsystem=remoting/:write-attribute(name=worker-task-keepalive,value=60)
|
task-max-threads |
O número máximo de threads para o pool thread de tarefa do trabalhador. O default é
16 .
| /profile=default/subsystem=remoting/:write-attribute(name=worker-task-max-threads,value=16)
|
task-core-threads |
O número de threads core para o pool thread da tarefa do trabalhador remoto. O default é
4 .
| /profile=default/subsystem=remoting/:write-attribute(name=worker-task-core-threads,value=4)
|
task-limit |
O número máximo de tarefas do trabalhador remoto a ser permitido antes da rejeição. O default é
16384 .
| /profile=default/subsystem=remoting/:write-attribute(name=worker-task-limit,value=16384)
|
O conector é o elemento de configuração Remota principal. Os conectores múltiplos são permitidos. Cada um consiste de um elemento <connector>
com diversos subelementos, assim como um pouco de possíveis atributos. O conector default é usado por diversos subsistemas do JBoss Enterprise Application Plataform. As configurações específicas para os elementos e atributos dos conectores dependem de seus aplicativos, portanto contate os Serviços de Suporte Global da Red Hat para maiores informações.
Tabela 12.2. Atributos do Conector
Função | Descrição | Comando CLI |
---|---|---|
Nome | O nome do conector, usado pelo JNDI. | /profile=default/subsystem=remoting/connector=remoting-connector/:write-attribute(name=name,value=remoting-connector)
|
socket-binding | O nome do socket binding para uso deste conector. | /profile=default/subsystem=remoting/connector=remoting-connector/:write-attribute(name=socket-binding,value=remoting)
|
authentication-provider |
O módulo Java Authentication Service Provider Interface for Containers (JASPIC) para uso com este conector. O módulo deve estar no classpath.
| /profile=default/subsystem=remoting/connector=remoting-connector/:write-attribute(name=authentication-provider,value=myProvider)
|
security-realm |
Opcional. O security realm que contém os usuários, senhas e funções. O Aplicativo da Web ou EJB pode autenticar em relação ao security realm. O
ApplicationRealm está disponível na instalação do JBoss Enterprise Application Plataform default.
| /profile=default/subsystem=remoting/connector=remoting-connector/:write-attribute(name=security-realm,value=ApplicationRealm)
|
Tabela 12.3. Elementos do Conector
Função | Descrição | Comando CLI |
---|---|---|
sasl |
O elemento anexo para os mecanismos de autenticação do Simple Authentication and Security Layer (SASL)
| N/A
|
propriedades |
Contém um ou mais elementos
<property> , cada um com o atributo name e o atributo value opcional.
| /profile=default/subsystem=remoting/connector=remoting-connector/property=myProp/:add(value=myPropValue)
|
Você pode especificar os três diferentes tipos de conexão de saída:
- Conexão de saída a um URI.
- Conexão de saída local – conecta a um recurso local tal como socket.
- Conexão de saída remota – conecta a um recurso remoto e autentica usando um security realm.
<outbound-connections>
. Cada um dos tipos de conexão leva um atributo outbound-socket-binding-ref
. A conexão de saída leva um atributo uri
. A conexão de saída remota leva atributos opcionais username
e security-realm
para uso da autorização.
Tabela 12.4. Os Elementos de Conexão de saída
Função | Descrição | Comando CLI |
---|---|---|
outbound-connection | Conexão de saída | /profile=default/subsystem=remoting/outbound-connection=my-connection/:add(uri=http://my-connection)
|
local-outbound-connection | A conexão de saída com um esquema local:// URI implícito. | /profile=default/subsystem=remoting/local-outbound-connection=my-connection/:add(outbound-socket-binding-ref=remoting2)
|
remote-outbound-connection |
As conexões de saída para o esquema remote:// URI usando a autenticação com o security realm.
| /profile=default/subsystem=remoting/remote-outbound-connection=my-connection/:add(outbound-socket-binding-ref=remoting,username=myUser,security-realm=ApplicationRealm)
|
Antes da definição dos elementos filhos SASL, você precisa criar o elemento SASL inicial. Use o seguinte comando:
/profile=default/subsystem=remoting/connector=remoting-connector/security=sasl:add
Função | Descrição | Comando CLI |
---|---|---|
include-mechanisms |
Contém um atributo
value , que é uma lista de espaço separado dos mecanismos SASL.
|
/profile=default/subsystem=remoting/connector=remoting-connector/security=sasl:write-attribute(name=include-mechanisms,value=["DIGEST","PLAIN","GSSAPI"]) |
qop |
Contém um atributo
value , que é uma lista de espaços separados da Qualidade SASL Quality dos valores de proteção, em ordem decrescente de preferência.
|
/profile=default/subsystem=remoting/connector=remoting-connector/security=sasl:write-attribute(name=qop,value=["auth"]) |
strength |
Contém o atributo
value , que é uma lista de espaço separado dos valores potentes de criptografia SASL, em ordem decrescente de preferência.
|
/subsystem=remoting/connector=remoting-connector/security=sasl:write-attribute(name=strength,value=["medium"]) |
reuse-session |
Contém o atributo
value que é um valor booleano. Caso verdadeiro, tente reutilizar as sessões.
|
/profile=default/subsystem=remoting/connector=remoting-connector/security=sasl:write-attribute(name=reuse-session,value=false) |
server-auth |
Contém um atributo
value que é um valor booleano. Caso verdadeiro, o servidor autentica para o cliente.
|
/profile=default/subsystem=remoting/connector=remoting-connector/security=sasl:write-attribute(name=server-auth,value=false) |
política |
Um elemento anexo que contém zero ou mais dos seguintes elementos, cada qual leva um
value único.
|
/profile=default/subsystem=remoting/connector=remoting-connector/security=sasl/sasl-policy=policy:add /profile=default/subsystem=remoting/connector=remoting-connector/security=sasl/sasl-policy=policy:write-attribute(name=forward-secrecy,value=true) /profile=default/subsystem=remoting/connector=remoting-connector/security=sasl/sasl-policy=policy:write-attribute(name=no-active,value=false) /profile=default/subsystem=remoting/connector=remoting-connector/security=sasl/sasl-policy=policy:write-attribute(name=no-dictionary,value=true) /profile=default/subsystem=remoting/connector=remoting-connector/security=sasl/sasl-policy=policy:write-attribute(name=no-plain-text,value=false) /profile=default/subsystem=remoting/connector=remoting-connector/security=sasl/sasl-policy=policy:write-attribute(name=pass-credentials,value=true) |
propriedades |
Contém um ou mais elementos
<property> , cada um com o atributo name e o atributo value opcional.
|
/profile=default/subsystem=remoting/connector=remoting-connector/security=sasl/property=myprop:add(value=1) /profile=default/subsystem=remoting/connector=remoting-connector/security=sasl/property=myprop2:add(value=2) |
Exemplo 12.11. Configurações de Amostra
<subsystem xmlns="urn:jboss:domain:remoting:1.1"> <connector name="remoting-connector" socket-binding="remoting" security-realm="ApplicationRealm"/> </subsystem>
<subsystem xmlns="urn:jboss:domain:remoting:1.1"> <worker-thread-pool read-threads="1" task-keepalive="60' task-max-threads="16" task-core-thread="4" task-limit="16384" write-threads="1" /> <connector name="remoting-connector" socket-binding="remoting" security-realm="ApplicationRealm"> <sasl> <include-mechanisms value="GSSAPI PLAIN DIGEST-MD5" /> <qop value="auth" /> <strength value="medium" /> <reuse-session value="false" /> <server-auth value="false" /> <policy> <forward-secrecy value="true" /> <no-active value="false" /> <no-anonymous value="false" /> <no-dictionary value="true" /> <no-plain-text value="false" /> <pass-credentials value="true" /> </policy> <properties> <property name="myprop1" value="1" /> <property name="myprop2" value="2" /> </properties> </sasl> <authentication-provider name="myprovider" /> <properties> <property name="myprop3" value="propValue" /> </properties> </connector> <outbound-connections> <outbound-connection name="my-outbound-connection" uri="htt\ p://myhost:7777/"/> <remote-outbound-connection name="my-remote-connection" outbound-socket-binding-ref="my-remote-socket" username="myUser" security-realm="ApplicationRealm"/> <local-outbound-connection name="myLocalConnection" outbound-socket-binding-ref="my-outbound-socket"/> </outbound-connections> </subsystem>
Aspectos da Configuração ainda não documentados
- Detecção Automática Multicast e JNDI
12.3.4.5. Uso dos Security Realms com os Clientes EJB Remoto
- Adicione um security realm ao domain controller ou servidor autônomo.
- Adicione os seguintes parâmetros ao arquivo
jboss-ejb-client.properties
, que está no classpath do aplicativo. Esta amostra assume que a conexão é referida comodefault
por outros parâmetros no arquivo.remote.connection.default.username=appuser remote.connection.default.password=apppassword
- Crie o conector Remoto no servidor autônomo ou domain, que usa o seu novo security realm.
- Implante o seu EJB ao grupo do servidor que é configurado para uso do perfil com o conector Remoto personalizado ou o servidor autônomo caso você não esteja usando o managed domain.
12.3.4.6. Adição do Novo Security Realm
Execute o Management CLI.
Inicie o comandojboss-cli.sh
oujboss-cli.bat
e conecte-se ao servidor.Crie um novo security realm.
Execute o seguinte comando para criar um novo security realm nomeadoMyDomain
no domain controller ou o servidor autônomo./host=master/core-service=management/security-realm=MyDomainRealm:add()
Crie as referências ao arquivo de propriedade que irá aplicar o store na informação a respeito da nova função.
Execute o seguinte comando para criar um direcionador ao arquivo nomeadomyfile.properties
, que terá as propriedades pertencentes à nova função.Nota
O arquivo de propriedade recentemente criado não é gerenciado pelos scriptsadd-user.sh
eadd-user.bat
incluídos. Ele deve ser gerenciado externamente./host=master/core-service=management/security-realm=MyDomainRealm/authentication=properties:add(path=myfile.properties)
O seu novo security realm é criado. Quando você adicionar usuários e funções a este novo realm, a informação será stored num arquivo separado aos security realms padrões. Você pode gerenciar este novo arquivo usando os seus próprios aplicativos e procedimentos.
12.3.4.7. Adição de um usuário ao Security Realm
Execute o comando
add-user.sh
ouadd-user.bat
.Abra o command-line interface (CLI - interface da linha de comando). Altere os diretórios para o diretórioEAP_HOME/bin/
. Caso você esteja executando o Red Hat Enterprise Linux ou outro sistema operacional UNIX, execute oadd-user.sh
. Caso você execute o Microsoft Windows Server, execute oadd-user.bat
.Escolha entre adicionar o Usuário de Gerenciamento ou o Usuário do Aplicativo.
Para este procedimento, digiteb
para adicionar o Usuário do Aplicativo.Escolha o realm que o usuário será adicionado.
Por default, o único realm disponível é oApplicationRealm
. Caso você tenha adicionado um realm personalizado, você pode digitar o seu nome.Digite o nome do usuário, senha e funções quando solicitado.
Digite o nome do usuário, senha e funções quando solicitado. Verifique sua escolha digitandoyes
ou digiteno
para cancelar as alterações. As alterações são gravadas a cada um dos arquivos de propriedade para o security realm.
12.3.4.8. Acesso EJB Remoto usando a Criptografia SSL
12.4. Serviços do Aplicativo JAX-RS
12.4.1. Habilitação de Segurança baseada na Função para um Serviço da Web RESTEasy JAX-RS
O RestEasy suporta as anotações @RolesAllowed, @PermitAll e @DenyAll nos métodos JAX-RS. No entanto, ele não reconhece essas anotações por default. Siga essas etapas para configurar o arquivo web.xml
e habilitar a segurança baseada na função.
Atenção
Procedimento 12.1. Habilitação de Segurança baseada na Função para um Serviço da Web RESTEasy JAX-RS
- Abra o arquivo
web.xml
para o aplicativo num editor de texto. - Adicione o seguinte <context-param> ao arquivo com as tags
web-app
:<context-param> <param-name>resteasy.role.based.security</param-name> <param-value>true</param-value> </context-param>
- Declare todas as funções usadas com o arquivo RESTEasy JAX-RS WAR usando as tags <security-role>:
<security-role><role-name>ROLE_NAME</role-name></security-role><security-role><role-name>ROLE_NAME</role-name></security-role>
- Autorize o acesso a todos os URLs manuseados pelo período de execução JAX-RS para todas as funções:
<security-constraint><web-resource-collection><web-resource-name>Resteasy</web-resource-name><url-pattern>/PATH</url-pattern></web-resource-collection><auth-constraint><role-name>ROLE_NAME</role-name><role-name>ROLE_NAME</role-name></auth-constraint></security-constraint>
A segurança baseada na função foi habilitada com o aplicativo, com um conjunto de funções definidas.
Exemplo 12.12. Amostra de Configuração de Segurança baseada na Função
<web-app> <context-param> <param-name>resteasy.role.based.security</param-name> <param-value>true</param-value> </context-param> <servlet-mapping> <servlet-name>Resteasy</servlet-name> <url-pattern>/*</url-pattern> </servlet-mapping> <security-constraint> <web-resource-collection> <web-resource-name>Resteasy</web-resource-name> <url-pattern>/security</url-pattern> </web-resource-collection> <auth-constraint> <role-name>admin</role-name> <role-name>user</role-name> </auth-constraint> </security-constraint> <security-role> <role-name>admin</role-name> </security-role> <security-role> <role-name>user</role-name> </security-role> </web-app>
12.4.2. Aplique a Segurança no Serviço da Web JAX-RS usando Anotações
Este tópico descreve as etapas para segurar o serviço da web JAX-RS usando as anotações de segurança suportadas.
Procedimento 12.2. Aplique a Segurança do Serviço da Web JAX-RS usando as Anotações de Segurança Suportada
- Habilite a segurança baseada na função. Para maiores informações refira-se à Seção 12.4.1, “Habilitação de Segurança baseada na Função para um Serviço da Web RESTEasy JAX-RS”
- Adicione anotações de segurança ao serviço da web JAX-RS. O RESTEasy suporta as seguintes anotações:
- @RolesAllowed
- Define quais funções podem acessar o método. Todas as funções devem ser definidas no arquivo
web.xml
. - @PermitAll
- Permite todas as funções definidas no arquivo
web.xml
para acessar o método. - @DenyAll
- Nega todos os acessos ao método.
12.5. Protocolo de Senha Remota de Segurança
12.5.1. Secure Remote Password Protocol (SRP - Protocolo de Senha Remota de Segurança)
Essa documentação descreve um mecanismo de autenticação da rede de forte criptografia como o Protocolo da Senha Remota de Segurança (SRP - Secure Remote Password SRP). Esse mecanismo é útil para negociações das conexões de segurança usando a senha suprida pelo usuário, enquanto eliminando os problemas de segurança tradicionalmente associados com as senhas reutilizáveis. Esse sistema permite também um troca da chave de segurança no processo de autenticação, permitindo camadas de segurança (proteção de integridade e/ou privacidade a serem habilitadas durante a sessão. Os servidores de chave confiáveis e infraestruturas de certificado não são solicitadas e os clientes não são solicitados a aplicar o store ou gerenciar quaisquer chaves de longo período. O SRP oferece ambas vantagens de segurança e implantação sobre as técnicas de resposta de desafio, fazendo disto uma substituição ideal onde a autenticação da senha de segurança é necessária.
12.5.2. Configuração do Protocolo Secure Remote Password (ISRP - Senha Remota de Segurança)
SRPVerifierStore
. A informação sobre a implantação é fornecida na Implementação do SRPVerifierStore.
Procedimento 12.3. Integração do Store de Senha Existente
Criação do store de informação de senha com hash.
Caso suas senhas já estiverem com store em uma forma de hash inversível, você precisa realizar isto baseado por usuário.Você pode implementarsetUserVerifier(String, VerifierInfo)
como um método noOP, ou um método que lança uma exceção informando que o store é de leitura apenas.Criação da interface SRPVerifierStore.
Crie uma implementação da interfaceSRPVerifierStore
personalizada que pode obter oVerifierInfo
a partir do store que você criou.OverifyUserChallenge(String, Object)
pode ser usado para integrar o token de hardware existente baseados em esquemas como o SafeWord ou Radius no algoritmo SRP. Este método de interface é chamado apenas quando a configuração SRPLoginModule do cliente especifica a opção hasAuxChallenge.Criação do JNDI MBean.
Crie um MBean que expõe a interfaceSRPVerifierStore
disponível ao JNDI e expõe quaisquer parâmetros requeridos.Oorg.jboss.security.srp.SRPVerifierStoreService
default permite que você implemente isto. Você pode também implementar o MBean usando a implementação do arquivo das propriedades Java doSRPVerifierStore
.
A implementação da interface SRPVerifierStore
não é recomendada para os sistemas de produção, uma vez que isto requer toda a informação do hash da senha esteja disponível como um arquivo de objetos serializados.
SRPVerifierStore
fornece acesso ao objeto SRPVerifierStore.VerifierInfo
para um nome de usuário gerado. O método getUserVerifier(String)
é chamado pelo SRPService no início de uma sessão SRP do usuário para obter os parâmetros necessários pelo algoritmo SRP.
Os elementos de um Objeto VerifierInfo
- nome do usuário
- O nome do usuário ou ID do usuário para autenticação
- verificador
- O hash de uma mão da senha que o usuário insere como prova de identidade. A classe
org.jboss.security.Util
inclui o métodocalculateVerifier
que executa o algoritmo hash da senha. A senha de resultado leva a formaH(salt | H(username | ':' | password))
, onde oH
é uma função hash de segurança SHA conforme definido pelo RFC2945. O nome do usuário é convertido a partir de uma sequência para um byte[] usando a codificação UTF-8. - salt
- Um número aleatório usado para aumentar a dificuldade de um ataque de dicionário de força bruta na fonte de dados da senha do verificador no evento em que a fonte de dados está comprometida. O valor deve ser gerado a partir de um algoritmo de número aleatório de maneira criptografada quando a senha de texto limpo existente do usuário estiver com hash.
- g
- O gerador primitivo do algoritmo SRP. Isto pode ser um parâmetro bem conhecido corrigido ao invés de uma configuração por usuário. A classe de utilidade
org.jboss.security.srp.SRPConf
fornece diversas configurações para og
, incluindo um default adequado através doSRPConf.getDefaultParams().g()
. - N
- Os módulos primários de segurança do algoritmo SRP. Isto pode ser um parâmetro bem conhecido corrigido ao invés de uma configuração por usuário. A classe de utilidade
org.jboss.security.srp.SRPConf
fornece diversas configurações para o N incluindo um bom default através doSRPConf.getDefaultParams().N()
.
Exemplo 12.13. Interface SRPVerifierStore
package org.jboss.security.srp; import java.io.IOException; import java.io.Serializable; import java.security.KeyException; public interface SRPVerifierStore { public static class VerifierInfo implements Serializable { public String username; public byte[] salt; public byte[] g; public byte[] N; } public VerifierInfo getUserVerifier(String username) throws KeyException, IOException; public void setUserVerifier(String username, VerifierInfo info) throws IOException; public void verifyUserChallenge(String username, Object auxChallenge) throws SecurityException; }
Capítulo 13. Single Sign On (SSO - Assinatura Única)
13.1. Single Sign On (SSO - Assinatura única) para Aplicativos da Web
O Single Sign On (SSO) permite a autenticação a um recurso para autorizar o acesso aos demais recursos.
O SSO sem cluster limita o compartilhamento da informação de autorização aos aplicativos de mesmo host virtual. Além disso, não existe resiliência num evento de falha do host. Os dados SSO com cluster podem ser compartilhados entre aplicativos em hosts virtuais múltiplos e é resiliente à falha. Além disso, o SSO com cluster está apto a receber solicitações a partir do balanceador de carga.
Caso um recurso não esteja protegido, o usuário não é solicitado a autenticá-lo. Caso um usuário acesse um recurso protegido, o usuário é solicitado a autenticá-lo.
Limitações do SSO
- Nenhuma propagação sob os limites de terceiros.
- O SSO pode ser usado entre os aplicativos implantados com o JBoss Enterprise Application Plataform 6.
- Autenticação gerenciada apenas pelo contêiner.
- Você deve usar os elementos de autenticação gerenciados pelo contêiner tais como
<login-config>
no seuweb.xml
do aplicativo. - Cookies solicitadas.
- O SSO é mantido através de cookies do navegador e a regravação do URL não é suportada.
- Realm e limitações do security-domain
- A não ser que o parâmetro
requireReauthentication
seja configurado paratrue
, todos os aplicativos da web configurados na mesma válvula SSO devem compartilhar a mesma configuração Realm noweb.xml
e o mesmo security domain.Você pode aninhar o elemento Realm dentro do elemento Host ou o elemento Mecanismo ao redor, mas não dentro do elemento context.xml para um dos aplicativos da web envolvidos.O<security-domain>
configurado nojboss-web.xml
deve ser consistente em todos os aplicativos da web.Todas as integrações de segurança devem aceitar os mesmos credenciais (por exemplo, nome do usuário e senha).
13.2. Single Sign On (SSO - Assinatura Única) com Cluster para Aplicativos da Web
jboss-web.xml
do aplicativo.
- Apache Tomcat ClusteredSingleSignOn
- Apache Tomcat IDPWebBrowserSSOValve
- SPNEGO-based SSO fornecido pelo PicketLink
13.3. Escolha da Correta Implementação SSO
Caso sua organização já use um sistema de autorização e autenticação baseado no Kerberos, tal como o Microsoft Active Directory, você pode usar os mesmos sistemas para autenticar de maneira clara os seus aplicativos enterprise executando no JBoss Enterprise Application Plataform.
Caso você necessite propagar a informação de segurança sobre os aplicativos que executam com o mesmo grupo ou instância do servidor, você pode usar um SSO sem cluster. Isto apenas envolve a configuração à válvula no seu descritor jboss-web.xml
do aplicativo.
Caso você precise propagar a informação de segurança entre os aplicativos sendo executados num ambiente com cluster por todas as instâncias do JBoss Enterprise Application Plataform, você pode usar a válvula SSO com cluster. Isto está configurado em seu jboss-web.xml
do aplicativo.
13.4. Uso do Single Sign On (SSO - Assinatura Única) num Aplicativo da Web
As capacidades do Single Sign On (SSO) são fornecidas pelo subsistema da web e Infinispan. Use este procedimento para configurar o SSO nos aplicativos da web.
Pré-requisitos
- Você precisa possuir um security domain configurado do qual manuseia a autenticação e autorização.
- O subsistema
infinispan
precisa estar presente. Ele está presente no perfilfull-ha
para um managed domain ou pelo uso da configuraçãostandalone-full-ha.xml
num servidor autônomo. - O
web
cache-container
e SSO cache-container devem ser apresentados. Os arquivos de configuração de amostraweb
cache-container, e algumas configurações já contém o SSO cache-container também. Use os seguintes comandos para verificar e habilitar o SSO cache-conteiner também. Perceba que esses comandos modificam o perfilfull
de um managed domain. Você pode alterar esses comandos para modificar o perfil diferente ou remover a porção/profile=full
do comando para o servidor autônomo.Exemplo 13.1. Verificação do
web
cache-containerOs perfis e configurações mencionados acima incluem oweb
cache-container por default. Use os seguintes comandos para verificar sua presença. Caso você use um perfil diferente, substitua este nome porha
./profile=ha/subsystem=infinispan/cache-container=web/:read-resource(recursive=false,proxies=false,include-runtime=false,include-defaults=true)
Caso o resultado forsuccess
, o subsistema está presente. Do contrário, você precisa adicioná-lo.Exemplo 13.2. Adição do
web
cache-containerUse os três seguintes comandos para habilitar oweb
cache-container a sua configuração. Modifique o nome do perfil, conforme apropriado, assim como outros parâmetros. Esses parâmetros são aqueles usados na configuração default./profile=ha/subsystem=infinispan/cache-container=web:add(aliases=["standard-session-cache"],default-cache="repl",module="org.jboss.as.clustering.web.infinispan")
/profile=ha/subsystem=infinispan/cache-container=web/transport=TRANSPORT:add(lock-timeout=60000)
/profile=ha/subsystem=infinispan/cache-container=web/replicated-cache=repl:add(mode="ASYNC",batching=true)
Exemplo 13.3. Verificação do
SSO
cache-containerExecute o seguinte comando Management CLI:/profile=ha/subsystem=infinispan/cache-container=web/:read-resource(recursive=true,proxies=false,include-runtime=false,include-defaults=true)
Busque por um resultado parecido com:"sso" => {
Caso você não possa encontrá-lo, o SSO cache-container não está presente em sua configuração.Exemplo 13.4. Adição do
SSO
cache-container/profile=ha/subsystem=infinispan/cache-container=web/replicated-cache=sso:add(mode="SYNC", batching=true)
- O subsistema
web
precisa ser configurado para uso do SSO. O seguinte comando habilita o SSO no servidor virtual chamadodefault-host
e o cookie domaindomain.com
. O nome do cache ésso
, e a reautenticação está desabilitada./profile=ha/subsystem=web/virtual-server=default-host/sso=configuration:add(cache-container="web",cache-name="sso",reauthenticate="false",domain="domain.com")
- Cada aplicativo que compartilhará a informação SSO precisa ser configurado para uso do mesmo <security-domain> em seu descritor de implantação
jboss-web.xml
e do mesmo Realm em seu arquivo de configuraçãoweb.xml
.
O SSO com Cluster permite o compartilhamento da autenticação entre hosts separados, enquanto o SSO sem cluster não permite isto. As válvulas SSO com e sem cluster são configuradas da mesma maneira, mas o SSO com cluster inclui os parâmetros cacheConfig
, processExpiresInterval
e maxEmptyLife
, que controlam a replicação do cluster dos dados persistidos.
Exemplo 13.5. A amostra da Configuração SSO com Cluster
tomcat
.
<jboss-web> <security-domain>tomcat</security-domain> <valve> <class-name>org.jboss.web.tomcat.service.sso.ClusteredSingleSignOn</class-name> <param> <param-name>maxEmptyLife</param-name> <param-value>900</param-value> </param> </valve> </jboss-web>
Tabela 13.1. Opções da Configuração SSO
Opções | Descrição |
---|---|
cookieDomain |
O domain do host a ser usado para o SSO cookies. O default é
/ . Para permitir que o app1.xyz.com e app2.xyz.com compartilhem o SSO cookies, você pode determinar o cookieDomain para xyz.com .
|
maxEmptyLife |
O SSO com cluster apenas. O número máximo de segundos que uma válvula SSO sem sessões será usada por uma solicitação, antes da expiração. Uma válvula positiva permite um manuseamento próprio de encerramento de um nó, caso seja o único com sessão ativa anexada à válvula. Caso o maxEmptyLife seja configurado para
0 , a válvula termina ao mesmo tempo que as cópias de sessão local, porém as cópias de backup das sessões a partir dos aplicativos com cluster são disponibilizadas aos outros nós. A permissão à válvula de permanecer ativa além da atividade das sessões gerenciadas permite que o usuário pare para realizar outra solicitação que pode então falhar a um nó diferente, onde isto ativa a cópia de backup da sessão. O default é de 1800 (30 minutos).
|
processExpiresInterval |
O SSO com cluster apenas. O número mínimo de segundos entre as tentativas da válvula encontrar e invalidar as instâncias SSO que expiraram o intervalo
MaxEmptyLife . O default é 60 (1 minuto).
|
requiresReauthentication |
Caso verdadeiro, cada solicitação usa os credenciais para reautenticar o security realm. Caso falso (o default), o SSO cookie válido é suficiente para a válvula autenticar cada nova solicitação.
|
Um aplicativo pode invalidar de forma programática uma sessão invocando o método javax.servlet.http.HttpSession.invalidate()
.
13.5. Kerberos
13.6. SPNEGO
13.7. Microsoft Active Directory
- O Lightweight Directory Access Protocol (LDAP), para informação de aplicação de store sobre usuários, computadores, senhas e outros recursos.
- O Kerberos para fornecimento da autenticação de segurança sobre a rede.
- O Domain Name Service (DNS) para fornecimento de mapeamentos entre os endereços IP e nomes do host dos computadores e outros dispositivos na rede.
13.8. Configuração do Kerberos ou Microsoft Active Directory Desktop SSO para os Aplicativos da Web
Para autenticar os seus aplicativos EJB ou da web usando sua infraestrutura da autorização e autenticação baseado no Kerberos existente de sua organização, tal como o Microsoft Active Directory, você pode usar as capacidades do JBoss Negotiation construídas no JBoss Enterprise Application Plataform 6. Caso você configure o seu aplicativo da web de maneira apropriada, um login de network ou desktop é suficiente para autenticar o seu aplicativo da web, de forma que nenhuma solicitação de login adicional é requerida.
Existem poucas diferenças notáveis entre o JBoss Enterprise Application Plataform 6 e as versões anteriores:
- Os security domains são configurados centralmente, para cada perfil de um managed domain ou de cada servidor autônomo. Eles não fazem parte da implantação. O security domain que uma implantação deve usar está nomeado no arquivo
jboss-web.xml
oujboss-ejb3.xml
. - As propriedades de segurança são configuradas como parte do security domain, como parte de sua configuração central. Elas não fazem parte da implantação.
- Você não precisa mais substituir os autenticadores como parte de sua implantação. No entanto, você pode adicionar uma válvula ao seu descritor
jboss-web.xml
para atingir o mesmo efeito. A válvula continua requerendo os elementos<security-constraint>
e<login-config>
a serem definidos noweb.xml
. Eles são usados para decidir quais recursos são assegurados. No entanto, o método de autorização escolhido será substituído pela válvula do NegotiationAuthenticator nojboss-web.xml
. - Os atributos
CODE
nos security domains usam agora o nome simples ao invés de um nome de classe inteiramente qualificado. As seguintes tabelas apresentam os mapeamentos entre as classes usadas para o JBoss Negotiation e suas classes.
Tabela 13.2. Códigos do Módulo de Login e Nomes de Classe
Nome Simples | Nome da Classe | Propósito |
---|---|---|
Kerberos | com.sun.security.auth.module.Krb5LoginModule | Módulo de login Kerberos |
SPNEGO | org.jboss.security.negotiation.spnego.SPNEGOLoginModule | Os mecanismos que habilitam seus aplicativos da Web para autenticar o seu servidor de autenticação Kerberos. |
AdvancedLdap | org.jboss.security.negotiation.AdvancedLdapLoginModule | Usado para os servidores LDAP além do Microsoft Active Directory. |
AdvancedAdLdap | org.jboss.security.negotiation.AdvancedADLoginModule | Usado com os servidores Microsoft Active Directory LDAP. |
O JBoss Negotiation Toolkit
é uma ferramenta de depuração que está disponível para download a partir do https://community.jboss.org/servlet/JiveServlet/download/16876-2-34629/jboss-negotiation-toolkit.war. Isto é fornecido como uma ferramenta extra para ajudá-lo a depurar e testar os mecanismos de autenticação antes da introdução de seu aplicativo à produção. Isto é uma ferramenta não suportada, porém é considerada de muita ajuda, uma vez que o SPNEGO pode ser difícil de ser configurado para os aplicativos da web.
Procedimento 13.1. Configuração da Autenticação SSO para os seus Aplicativos EJB
Configure um security domain para representar a identidade do servidor. Determine as propriedades caso seja necessário.
O primeiro security domain autentica o próprio contêiner ao serviço do diretório. Ele precisa usar um módulo de login que aceita algum tipo de mecanismo de login estático, uma vez que o usuário real não está envolvido. Esta amostra usa um principal estático e referencia um arquivo keytab que contém o credencial.O código XML é gerado aqui para clareza, porém você deve usar o Management Consolo ou Management CLI para configuração de seus security domains.<security-domain name="host" cache-type="default"> <authentication> <login-module code="Kerberos" flag="required"> <module-option name="storeKey" value="true"/> <module-option name="useKeyTab" value="true"/> <module-option name="principal" value="host/testserver@MY_REALM"/> <module-option name="keyTab" value="/home/username/service.keytab"/> <module-option name="doNotPrompt" value="true"/> <module-option name="debug" value="false"/> </login-module> </authentication> </security-domain>
Configure o segundo security domain para assegurar o aplicativo da web ou aplicativos. Determine as propriedades do sistema caso seja necessário.
O segundo security domain é usado para autenticar o usuário individual ao Kerberos ou servidor de autenticação SPNEGO. Você precisa de pelo menos um módulo de login para autenticação do usuário e outro para buscar as funções a serem aplicadas ao usuário. O seguinte código XML apresenta um modelo de autorização para mapeamento das funções no próprio servidor de autenticação.<security-domain name="SPNEGO" cache-type="default"> <authentication> <!-- Check the username and password --> <login-module code="SPNEGO" flag="requisite"> <module-option name="password-stacking" value="useFirstPass"/> <module-option name="serverSecurityDomain" value="host"/> </login-module> <!-- Search for roles --> <login-module code="UserRoles" flag="required"> <module-option name="password-stacking" value="useFirstPass" /> <module-option name="usersProperties" value="spnego-users.properties" /> <module-option name="rolesProperties" value="spnego-roles.properties" /> </login-module> </authentication> </security-domain>
Especifique o security-constraint e login-config no
web.xml
O descritorweb.xml
contém informação sobre as restrições de segurança e configuração de login. Segue abaixo algumas amostras de valores para cada uma.<security-constraint> <display-name>Security Constraint on Conversation</display-name> <web-resource-collection> <web-resource-name>examplesWebApp</web-resource-name> <url-pattern>/*</url-pattern> </web-resource-collection> <auth-constraint> <role-name>RequiredRole</role-name> </auth-constraint> </security-constraint> <login-config> <auth-method>SPNEGO</auth-method> <realm-name>SPNEGO</realm-name> </login-config> <security-role> <description> role required to log in to the Application</description> <role-name>RequiredRole</role-name> </security-role>
Especifique o security domain e outras configurações no descritor
jboss-web.xml
.Especifique o nome do security domain ao lado do cliente (a segunda amostra) no descritorjboss-web.xml
de sua implantação para direcionar o seu aplicativo para uso de seu security domain.Você não pode mais substituir os autenticadores diretamente. Ao invés disto, você pode adicionar o NegotiationAuthenticator como um valor ao seu descritorjboss-web.xml
, caso seja necessário. O<jacc-star-role-allow>
permite você usar o caractere (*) de asterisco para coincidir com os nomes de função múltiplos e é opcional.<jboss-web> <security-domain>java:/jaas/SPNEGO</security-domain> <valve> <class-name>org.jboss.security.negotiation.NegotiationAuthenticator</class-name> </valve> <jacc-star-role-allow>true</jacc-star-role-allow> </jboss-web>
Adicione uma dependência ao seu
MANIFEST.MF
do aplicativo para localizar as classes de Negociação.O aplicativo da web precisa de uma dependência noorg.jboss.security.negotiation
da classe a ser adicionada ao manifesto doMETA-INF/MANIFEST.MF
da implantação, com o objetivo de localizar as classes do JBoss Negotiation. Segue abaixo uma entrada propriamente formatada.Manifest-Version: 1.0 Build-Jdk: 1.6.0_24 Dependencies: org.jboss.security.negotiation
O seu aplicativo da web aceita e autentica os credenciais em relação ao Kerberos, Microsoft Directory ou outro serviço do diretório compatível com o SPNEGO. Caso o usuário executar o aplicativo a partir de um sistema que já está conectado ao serviço do diretório, e onde as funções solicitadas já são aplicadas ao usuário, o aplicativo da web não solicita a autenticação e as capacidade SSO são atingidas.
Capítulo 14. Segurança baseada na Função nos Aplicativos
14.1. Segurança do Aplicativo
14.2. Auditoria de Qualidade
14.3. Mapeamento de Segurança
14.4. Arquitetura de Extensão de Segurança
A primeira parte da infraestrutura é o JAAS API. O JAAS é um framework plugável que fornece uma camada de abstração entre a sua infraestrutura de segurança e seu aplicativo.
org.jboss.security.plugins.JaasSecurityManager
, que implementa as interfaces AuthenticationManager
e RealmMapping
. O JaasSecurityManager
integra o EJB e camadas do contêiner da web, baseado no elemento <security-domain>
do descritor de implantação do componente correspondente.
JaasSecurityManagerService
MBean
O serviço JaasSecurityManagerService
MBean coordena os gerenciadores de segurança. Embora seu nome inicie com Jaas, os gerenciadores de segurança que este serviço gerencia não precisam usar o JAAS em suas implementações. O nome reflete o fato de que a implementação do gerenciador de segurança é o JaasSecurityManager
.
JaasSecurityManagerService
é externalizar a implementação do gerenciador de segurança. Você pode alterar a implementação do gerenciador de segurança fornecendo uma implementação alternativa das interfaces AuthenticationManager
e RealmMapping
.
JaasSecurityManagerService
é fornecer uma implementação JNDI javax.naming.spi.ObjectFactory
para permitir um gerenciamento simples sem código do binding entre o nome JNDI e a implementação do gerenciador de segurança. Para habilitar a segurança, especifique o nome JNDI da implementação do gerenciador de segurança através do elemento descritor de implantação <security-domain>
.
JaasSecurityManagerService
efetua o bind no next naming system reference, nomeando-se como JNDI ObjectFactory
sob o nome java:/jaas
. Isto permite uma convenção de nomeação na forma de java:/jaas/XYZ
como valor para o elemento <security-domain>
e que a instância do gerenciador de segurança para o security domain XYZ
seja criada conforme o necessário. Tudo isto, pela criação de uma instância de classe especificada pelo atributo SecurityManagerClassName
, usando um construtor que leva o nome do security domain.
Nota
java:/jaas
em seu descritor da implantação. No entanto, você poderá incluí-lo para compatibilidade reversa, porém isto é ignorado.
O org.jboss.security.plugins.JaasSecurityDomain
é uma extensão do JaasSecurityManager
que adiciona a noção de um KeyStore
, KeyManagerFactory
e um TrustManagerFactory
para suporte do SSL e outros de uso de criptografia.
Por favor refira-se à Seção 14.5, “Java Authentication and Authorization Service (JAAS)” para maiores informações e exemplos práticos sobre a arquitetura de segurança.
14.5. Java Authentication and Authorization Service (JAAS)
Os grupos do servidor (num managed domain) e servidores (no servidor autônomo) incluem a configuração para os security domains. O security domain inclui a informação a respeito da combinação da autenticação, autorização, mapeamento e módulos de auditoria com detalhes de configuração. Um aplicativo especifica qual security domain ele requer, pelo nome no próprio jboss-web.xml
.
A configuração específica do aplicativo assume um ou mais dos seguintes arquivos:
Tabela 14.1. Arquivos de Configuração Específica do Aplicativo
Arquivo | Descrição |
---|---|
ejb-jar.xml |
O descritor da implantação para o aplicativo Enterprise JavaBean (EJB) localizado no diretório
META-INF do EJB. Use o ejb-jar.xml para especificar as funções e as mapeie aos principals no nível do aplicativo. Você pode também limitar os métodos específicos e as classes de certas funções. Isto é também utilizado para outra configuração específica do EJB não relacionada à segurança.
|
web.xml |
O descritor de implantação do aplicativo da web Java Enterprise Edition (EE). Use o
web.xml para declarar o security domain que o aplicativo usa para autenticação e autorização, assim como restrições de transporte e recurso para o aplicativo, tais como a limitação dos tipos de solicitações HTTP permitidas. Você pode configurar uma autenticação baseada na web simples neste arquivo. Isto é também usado para outra configuração específica do aplicativo não relacionada com a segurança.
|
jboss-ejb3.xml |
Contém as extensões específicas do JBoss para o descritor
ejb-jar.xml .
|
jboss-web.xml |
Contém as extensões específicas do JBoss ao descritor
web.xml .
|
Nota
ejb-jar.xml
e web.xml
estão definidos na especificação do Java Enterprise Edition (Java EE). O jboss-ejb3.xml
fornece extensões específicas do JBoss para o ejb-jar.xml
e o jboss-web.xml
fornece extensões específicas do JBoss para o web.xml
.
O Java Authentication and Authorization Service (JAAS) é um framework para segurança à nível do usuário nos aplicativos Java, usando os pluggable authentication modules (PAM - módulos de autenticação plugáveis). Ele está integrado no Java Runtime Environment (JRE). O componente ao lado do contêiner é o org.jboss.security.plugins.JaasSecurityManager
MBean no JBoss Enterprise Application Plataform. Ele fornece as implementações padrões das interfaces AuthenticationManager
e RealmMapping
.
O JaasSecurityManager usa os pacotes JAAS para implantar o comportamento da interface do AuthenticationManager e RealmMapping. Na realidade, seu comportamento deriva da execução das instâncias do módulo de login que são configuradas no security domain pelo qual o JaasSecurityManager foi determinado. Os módulos de login implementam a autenticação principal do security domain e comportamento de mapeamento de função. Você pode usar o JaasSecurityManager por todos os security domains pelo plugging em configurações para os domains.
EJBHome
. O EJB já foi implantado no servidor e seus métodos de interface EJBHome
foram assegurados usando os elementos <method-permission> no descritor ejb-jar.xml
. Ele usa o security domain jwdomain
, que é especificado no elemento <security-domain> do arquivo jboss-ejb3.xml
. A imagem abaixo apresenta as etapas que serão explicadas mais tarde:
Figura 14.1. Etapas da Invocação do Método EJB com Segurança
- O cliente executa o login JAAS para estabelecer o principal e credenciais para autenticação. Isto é o Client Side Login rotulado na figura. Isto pode ser também executado na forma de JNDI.Para executar um login JAAS, você cria uma instância de LoginContext e passa o nome de configuração para uso. Neste caso, o nome da configuração é
other
. Este login associa de uma vez só o principal do login e credenciais com todas as invocações de método EJB subsequente. Este processo não autentica o usuário necessariamente. A natureza do login ao lado do cliente depende da configuração do módulo de login que o cliente usa. Nesta amostra, a entrada da configuração de login ao lado do clienteother
usa o módulo de loginClientLoginModule
. Este módulo efetua o bind no nome do usuário e senha à camada de invocação EJB para autenticação mais tarde no servidor. A autenticação do cliente não é autenticado no cliente. - O cliente obtém o método
EJBHome
e o invoca no servidor. A invocação inclui os argumentos do método passados ao cliente, juntamente com a identidade do usuário e credenciais a partir do login JAAS ao lado do cliente. - No lado do servidor, o servidor de segurança autentica o usuário que invocou o método. Isto envolve outro login JAAS.
- O security domain na parte inferior determina a escolha dos módulos de login. O nome do security domain é passado ao construtor
LoginContext
como o nome de entrada da configuração do login. O security domain éjwdomain
. Caso a autenticação for bem sucedida, o JAAS Subject é criado. O JAAS subject inclui PrincipalSet, que inclui os seguintes credenciais:- A instância
java.security.Principal
que corresponde à identidade do cliente a partir do ambiente de segurança da implantação. - Um
java.security.acl.Group
chamadoRoles
que contém os nomes da função do domain do aplicativo do usuário. Os objetosorg.jboss.security.SimplePrincipal
do tipo representam os nomes da função. Essas funções validam o acesso aos métodos EJB de acordo com as restrições noejb-jar.xml
e implementação do métodoEJBContext.isCallerInRole(String)
. - O
java.security.acl.Group
opcional nomeadoCallerPrincipal
, que contém umorg.jboss.security.SimplePrincipal
único que corresponde à identidade do chamador do domain do aplicativo. O associado do grupo CallerPrincipal é o valor retornado pelo métodoEJBContext.getCallerPrincipal()
. Este mapeamento permite que o Principal no ambiente de segurança operacional mapeie um Principal conhecido pelo aplicativo. Na ausência do mapeamento CallerPrincipal, o principal operacional é o mesmo do principal do domain do aplicativo.
- O servidor verifica que o usuário chamando o método EJB possui permissão. A execução desta autorização envolve as seguintes etapas:
- Obtém os nomes de funções para acesso do método EJB a partir do contêiner EJB. Os nomes de funções são determinados pelos elementos <role-name> do descritor
ejb-jar.xml
de todos os elementos <method-permission> contendo o método invocado. - Caso nenhuma das funções seja determinada ou o método especificado num elemento de lista exclusivo, o acesso ao método é negado. Do contrário, o método
doesUserHaveRole
é invocado no gerenciador de segurança pelo interceptor de segurança para verificar se o chamador possui um dos nomes de função determinado. Esse método interage através dos nomes de função e verifica se o grupoSubject Roles
do usuário autenticado contém um SimplePrincipal com o nome da função determinado. O acesso é permitido caso o nome da função seja um associado do grupo Funções. O acesso é negado caso nenhum dos nomes de função seja associado. - Caso o EJB use um proxy de segurança personalizado, a invocação do método é delegada do proxy. Caso o proxy de segurança negar acesso ao chamador, ele lança um
java.lang.SecurityException
. Do contrário, o acesso ao método EJB é permitido e a invocação do método passa ao próximo interceptor do contêiner. O SecurityProxyInterceptor manuseia esta checagem e este interceptor não é apresentado. - Para as solicitações da conexão, o servidor da web verifica as restrições de segurança definidas no
web.xml
que combinam com o recurso solicitado e o método HTTP acessado.Caso a restrição existir para a solicitação, o servidor da web chama o JaasSecurityManager para executar a autenticação principal, que em troca garante que as funções do usuário são associadas com o objeto principal.
14.6. Uso do Security Domain em seu Aplicativo
Para uso de um security domain em seu aplicativo, primeiro você precisa configurar o domain tanto no arquivo de configuração do servidor ou arquivo descritor do aplicativo. Então, você deve adicionar as anotações requeridas ao EJB que usam isto. Este tópico descreve as etapas solicitadas para uso de um security domain em seu aplicativo.
Procedimento 14.1. Configure o seu Aplicativo para Uso de um Security Domain
Definição do Security Domain
Você pode definir o security domain tanto no arquivo de configuração do servidor ou arquivo descritor aplicativo.Configuração do security domain no arquivo de configuração do servidor.
O security domain é configurado no subsistemasecurity
do arquivo de configuração do servidor. Caso a instância do JBoss Enterprise Application Plataform estiver sendo executada num managed domain, este é o arquivodomain/configuration/domain.xml
. Caso a instância do JBoss Enterprise Application Plataform estiver sendo executada como um servidor autônomo, este é o arquivostandalone/configuration/standalone.xml
.Os security domainsother
,jboss-web-policy
ejboss-ejb-policy
são fornecidos por default no JBoss Enterprise Application Plataform 6. A seguinte amostra XML foi copiada a partir do subsistemasecurity
no arquivo de configuração do servidor.<subsystem xmlns="urn:jboss:domain:security:1.2"> <security-domains> <security-domain name="other" cache-type="default"> <authentication> <login-module code="Remoting" flag="optional"> <module-option name="password-stacking" value="useFirstPass"/> </login-module> <login-module code="RealmDirect" flag="required"> <module-option name="password-stacking" value="useFirstPass"/> </login-module> </authentication> </security-domain> <security-domain name="jboss-web-policy" cache-type="default"> <authorization> <policy-module code="Delegating" flag="required"/> </authorization> </security-domain> <security-domain name="jboss-ejb-policy" cache-type="default"> <authorization> <policy-module code="Delegating" flag="required"/> </authorization> </security-domain> </security-domains> </subsystem>
Você pode configurar os security domains adicionais conforme seja necessário usando o Management Console ou CLI.Configuração do security domain no arquivo do descritor do aplicativo
O security domain é especificado no elemento filho<security-domain>
do elemento<jboss-web>
no arquivoWEB-INF/jboss-web.xml
do aplicativo. A seguinte amostra configura o security domain nomeadomy-domain
.<jboss-web> <security-domain>my-domain</security-domain> </jboss-web>
Esta é uma das muitas configurações que você pode especificar no descritorWEB-INF/jboss-web.xml
.
Adição da Anotação Requerida para o EJB
Você configura a segurança no EJB usando as anotações@SecurityDomain
e@RolesAllowed
. A seguinte amostra de código EJB limita o acesso ao security domainother
por usuários na funçãoguest
.package example.ejb3; import java.security.Principal; import javax.annotation.Resource; import javax.annotation.security.RolesAllowed; import javax.ejb.SessionContext; import javax.ejb.Stateless; import org.jboss.ejb3.annotation.SecurityDomain; /** * Simple secured EJB using EJB security annotations * Allow access to "other" security domain by users in a "guest" role. */ @Stateless @RolesAllowed({ "guest" }) @SecurityDomain("other") public class SecuredEJB { // Inject the Session Context @Resource private SessionContext ctx; /** * Secured EJB method using security annotations */ public String getSecurityInfo() { // Session context injected using the resource annotation Principal principal = ctx.getCallerPrincipal(); return principal.toString(); } }
Para maiores amostras de código, consulte oejb-security
quickstart do pacote do JBoss Enterprise Application Plataform 6 Quickstarts, disponível a partir do Portal do Cliente Red Hat.
14.7. Uso da Segurança baseada na Função nos Servlets
jboss-web.xml
do WAR.
Antes de você usar a segurança baseada na função num servlet, o security domain usado para autenticar e autorizar o acesso precisa ser configurado no contêiner do JBoss Enterprise Application Plataform.
Procedimento 14.2. Adição da Segurança baseada na Função aos Servlets
Adição dos mapeamentos entre os padrões servlets e URL.
Use os elementos<servlet-mapping>
noweb.xml
para mapear os servlets individuais aos padrões URL. A seguinte amostra mapeia o servlet chamadoDisplayOpResult
ao/DisplayOpResult
default de URL.<servlet-mapping> <servlet-name>DisplayOpResult</servlet-name> <url-pattern>/DisplayOpResult</url-pattern> </servlet-mapping>
Adição das restrições de segurança nos padrões URL.
Para mapear o default URL a uma restrição de segurança, use o<security-constraint>
. A seguinte amostra de acesso às restrições a partir do/DisplayOpResult
default de URL a ser acessado pelos principals com oeap_admin
da função. A função necessita estar presente no security domain.<security-constraint> <display-name>Restrict access to role eap_admin</display-name> <web-resource-collection> <web-resource-name>Restrict access to role eap_admin</web-resource-name> <url-pattern>/DisplayOpResult/*</url-pattern> </web-resource-collection> <auth-constraint> <role-name>eap_admin</role-name> </auth-constraint> <security-role> <role-name>eap_admin</role-name> </security-role> </security-constraint>
Especificação do security domain no
jboss-web.xml
do WAR.Adicione o security domain aojboss-web.xml
do WAR com o objetivo de conectar os servlets ao security domain configurado, que sabe como autenticar e autorizar os principals em referências de segurança. A seguinte amostra usa o security domain chamadoacme_domain
.<jboss-web> ... <security-domain>acme_domain</security-domain> ... </jboss-web>
14.8. Uso do Sistema de Autenticação de Terceiros no seu Aplicativo
Nota
context.xml
. As válvulas são configuradas diretamente no descritor jboss-web.xml
. O context.xml
é ignorado agora.
Exemplo 14.1. Válvula de Autenticação Básica
<jboss-web> <valve> <class-name>org.jboss.security.negotiation.NegotiationAuthenticator</class-name> </valve> </jboss-web>
Exemplo 14.2. Conjunto de Atributos do Cabeçalho com a Válvula Personalizada
<jboss-web> <valve> <class-name>org.jboss.web.tomcat.security.GenericHeaderAuthenticator</class-name> <param> <param-name>httpHeaderForSSOAuth</param-name> <param-value>sm_ssoid,ct-remote-user,HTTP_OBLIX_UID</param-value> </param> <param> <param-name>sessionCookieForSSOAuth</param-name> <param-value>SMSESSION,CTSESSION,ObSSOCookie</param-value> </param> </valve> </jboss-web>
A gravação de seu próprio autenticador não encontra-se no contexto desta documentação. No entanto, o seguinte código Java é fornecido como uma amostra.
Exemplo 14.3. GenericHeaderAuthenticator.java
/* * JBoss, Home of Professional Open Source. * Copyright 2006, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.web.tomcat.security; import java.io.IOException; import java.security.Principal; import java.util.StringTokenizer; import javax.management.JMException; import javax.management.ObjectName; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.catalina.Realm; import org.apache.catalina.Session; import org.apache.catalina.authenticator.Constants; import org.apache.catalina.connector.Request; import org.apache.catalina.connector.Response; import org.apache.catalina.deploy.LoginConfig; import org.jboss.logging.Logger; import org.jboss.as.web.security.ExtendedFormAuthenticator; /** * JBAS-2283: Provide custom header based authentication support * * Header Authenticator that deals with userid from the request header Requires * two attributes configured on the Tomcat Service - one for the http header * denoting the authenticated identity and the other is the SESSION cookie * * @author <a href="mailto:Anil.Saldhana@jboss.org">Anil Saldhana</a> * @author <a href="mailto:sguilhen@redhat.com">Stefan Guilhen</a> * @version $Revision$ * @since Sep 11, 2006 */ public class GenericHeaderAuthenticator extends ExtendedFormAuthenticator { protected static Logger log = Logger .getLogger(GenericHeaderAuthenticator.class); protected boolean trace = log.isTraceEnabled(); // JBAS-4804: GenericHeaderAuthenticator injection of ssoid and // sessioncookie name. private String httpHeaderForSSOAuth = null; private String sessionCookieForSSOAuth = null; /** * <p> * Obtain the value of the <code>httpHeaderForSSOAuth</code> attribute. This * attribute is used to indicate the request header ids that have to be * checked in order to retrieve the SSO identity set by a third party * security system. * </p> * * @return a <code>String</code> containing the value of the * <code>httpHeaderForSSOAuth</code> attribute. */ public String getHttpHeaderForSSOAuth() { return httpHeaderForSSOAuth; } /** * <p> * Set the value of the <code>httpHeaderForSSOAuth</code> attribute. This * attribute is used to indicate the request header ids that have to be * checked in order to retrieve the SSO identity set by a third party * security system. * </p> * * @param httpHeaderForSSOAuth * a <code>String</code> containing the value of the * <code>httpHeaderForSSOAuth</code> attribute. */ public void setHttpHeaderForSSOAuth(String httpHeaderForSSOAuth) { this.httpHeaderForSSOAuth = httpHeaderForSSOAuth; } /** * <p> * Obtain the value of the <code>sessionCookieForSSOAuth</code> attribute. * This attribute is used to indicate the names of the SSO cookies that may * be present in the request object. * </p> * * @return a <code>String</code> containing the names (separated by a * <code>','</code>) of the SSO cookies that may have been set by a * third party security system in the request. */ public String getSessionCookieForSSOAuth() { return sessionCookieForSSOAuth; } /** * <p> * Set the value of the <code>sessionCookieForSSOAuth</code> attribute. This * attribute is used to indicate the names of the SSO cookies that may be * present in the request object. * </p> * * @param sessionCookieForSSOAuth * a <code>String</code> containing the names (separated by a * <code>','</code>) of the SSO cookies that may have been set by * a third party security system in the request. */ public void setSessionCookieForSSOAuth(String sessionCookieForSSOAuth) { this.sessionCookieForSSOAuth = sessionCookieForSSOAuth; } /** * <p> * Creates an instance of <code>GenericHeaderAuthenticator</code>. * </p> */ public GenericHeaderAuthenticator() { super(); } public boolean authenticate(Request request, HttpServletResponse response, LoginConfig config) throws IOException { log.trace("Authenticating user"); Principal principal = request.getUserPrincipal(); if (principal != null) { if (trace) log.trace("Already authenticated '" + principal.getName() + "'"); return true; } Realm realm = context.getRealm(); Session session = request.getSessionInternal(true); String username = getUserId(request); String password = getSessionCookie(request); // Check if there is sso id as well as sessionkey if (username == null || password == null) { log.trace("Username is null or password(sessionkey) is null:fallback to form auth"); return super.authenticate(request, response, config); } principal = realm.authenticate(username, password); if (principal == null) { forwardToErrorPage(request, response, config); return false; } session.setNote(Constants.SESS_USERNAME_NOTE, username); session.setNote(Constants.SESS_PASSWORD_NOTE, password); request.setUserPrincipal(principal); register(request, response, principal, HttpServletRequest.FORM_AUTH, username, password); return true; } /** * Get the username from the request header * * @param request * @return */ protected String getUserId(Request request) { String ssoid = null; // We can have a comma-separated ids String ids = ""; try { ids = this.getIdentityHeaderId(); } catch (JMException e) { if (trace) log.trace("getUserId exception", e); } if (ids == null || ids.length() == 0) throw new IllegalStateException( "Http headers configuration in tomcat service missing"); StringTokenizer st = new StringTokenizer(ids, ","); while (st.hasMoreTokens()) { ssoid = request.getHeader(st.nextToken()); if (ssoid != null) break; } if (trace) log.trace("SSOID-" + ssoid); return ssoid; } /** * Obtain the session cookie from the request * * @param request * @return */ protected String getSessionCookie(Request request) { Cookie[] cookies = request.getCookies(); log.trace("Cookies:" + cookies); int numCookies = cookies != null ? cookies.length : 0; // We can have comma-separated ids String ids = ""; try { ids = this.getSessionCookieId(); log.trace("Session Cookie Ids=" + ids); } catch (JMException e) { if (trace) log.trace("checkSessionCookie exception", e); } if (ids == null || ids.length() == 0) throw new IllegalStateException( "Session cookies configuration in tomcat service missing"); StringTokenizer st = new StringTokenizer(ids, ","); while (st.hasMoreTokens()) { String cookieToken = st.nextToken(); String val = getCookieValue(cookies, numCookies, cookieToken); if (val != null) return val; } if (trace) log.trace("Session Cookie not found"); return null; } /** * Get the configured header identity id in the tomcat service * * @return * @throws JMException */ protected String getIdentityHeaderId() throws JMException { if (this.httpHeaderForSSOAuth != null) return this.httpHeaderForSSOAuth; return (String) mserver.getAttribute(new ObjectName( "jboss.web:service=WebServer"), "HttpHeaderForSSOAuth"); } /** * Get the configured session cookie id in the tomcat service * * @return * @throws JMException */ protected String getSessionCookieId() throws JMException { if (this.sessionCookieForSSOAuth != null) return this.sessionCookieForSSOAuth; return (String) mserver.getAttribute(new ObjectName( "jboss.web:service=WebServer"), "SessionCookieForSSOAuth"); } /** * Get the value of a cookie if the name matches the token * * @param cookies * array of cookies * @param numCookies * number of cookies in the array * @param token * Key * @return value of cookie */ protected String getCookieValue(Cookie[] cookies, int numCookies, String token) { for (int i = 0; i < numCookies; i++) { Cookie cookie = cookies[i]; log.trace("Matching cookieToken:" + token + " with cookie name=" + cookie.getName()); if (token.equals(cookie.getName())) { if (trace) log.trace("Cookie-" + token + " value=" + cookie.getValue()); return cookie.getValue(); } } return null; } }
Capítulo 15. Migração
15.1. Configuração das Alterações de Segurança do Aplicativo
O UsersRolesLoginModule
sempre bloqueava os arquivos das propriedades no classpath. Nas versões anteriores do JBoss Enterprise Application Plataform, os arquivos das propriedades posicionados no diretório EAP_HOME/server/SERVER_NAME/conf/
encontravam-se no classpath e podiam ser facilmente encontrados pelo UsersRolesLoginModule
. No JBoss Enterprise Application Plataform 6, a estrutura do diretório foi alterada. Os arquivos das propriedades devem ser empacotados com o aplicativo e disponibilizá-los na classpath.
Importante
security-domains
para o standalone/configuration/standalone.xml
ou o arquivo de configuração do servidor domain/configuration/domain.xml
:
<security-domain name="example"> <authentication> <login-module code="UsersRoles" flag="required"> <module-option name="usersProperties" value="${jboss.server.config.dir}/example-users.properties"/> <module-option name="rolesProperties" value="${jboss.server.config.dir}/example-roles.properties"/> </login-module> </authentication> </security-domain>
${jboss.server.config.dir}
refere-se ao diretório EAP_HOME/standalone/configuration/
. Caso a instância estiver executando num managed domain, o ${jboss.server.config.dir}
refere-se ao diretório EAP_HOME/domain/configuration/
.
Os security domains não usam mais o prefixo java:/jaas/
no JBoss Enterprise Application Plataform 6.
- Você deve remover esse prefixo das configurações do security domain para os aplicativos da Web no
jboss-web.xml
. - Você deve remover esse prefixo das configurações do security domain para os aplicativos Enterprise no
jboss-web.xml
. Esse arquivo foi substituído pelojboss.xml
no JBoss Enterprise Application Plataform 6.
Capítulo 16. Autorização e Autenticação
16.1. Autenticação
16.2. Autorização
16.3. Java Authentication and Authorization Service (JAAS)
16.4. Java Authentication and Authorization Service (JAAS)
Os grupos do servidor (num managed domain) e servidores (no servidor autônomo) incluem a configuração para os security domains. O security domain inclui a informação a respeito da combinação da autenticação, autorização, mapeamento e módulos de auditoria com detalhes de configuração. Um aplicativo especifica qual security domain ele requer, pelo nome no próprio jboss-web.xml
.
A configuração específica do aplicativo assume um ou mais dos seguintes arquivos:
Tabela 16.1. Arquivos de Configuração Específica do Aplicativo
Arquivo | Descrição |
---|---|
ejb-jar.xml |
O descritor da implantação para o aplicativo Enterprise JavaBean (EJB) localizado no diretório
META-INF do EJB. Use o ejb-jar.xml para especificar as funções e as mapeie aos principals no nível do aplicativo. Você pode também limitar os métodos específicos e as classes de certas funções. Isto é também utilizado para outra configuração específica do EJB não relacionada à segurança.
|
web.xml |
O descritor de implantação do aplicativo da web Java Enterprise Edition (EE). Use o
web.xml para declarar o security domain que o aplicativo usa para autenticação e autorização, assim como restrições de transporte e recurso para o aplicativo, tais como a limitação dos tipos de solicitações HTTP permitidas. Você pode configurar uma autenticação baseada na web simples neste arquivo. Isto é também usado para outra configuração específica do aplicativo não relacionada com a segurança.
|
jboss-ejb3.xml |
Contém as extensões específicas do JBoss para o descritor
ejb-jar.xml .
|
jboss-web.xml |
Contém as extensões específicas do JBoss ao descritor
web.xml .
|
Nota
ejb-jar.xml
e web.xml
estão definidos na especificação do Java Enterprise Edition (Java EE). O jboss-ejb3.xml
fornece extensões específicas do JBoss para o ejb-jar.xml
e o jboss-web.xml
fornece extensões específicas do JBoss para o web.xml
.
O Java Authentication and Authorization Service (JAAS) é um framework para segurança à nível do usuário nos aplicativos Java, usando os pluggable authentication modules (PAM - módulos de autenticação plugáveis). Ele está integrado no Java Runtime Environment (JRE). O componente ao lado do contêiner é o org.jboss.security.plugins.JaasSecurityManager
MBean no JBoss Enterprise Application Plataform. Ele fornece as implementações padrões das interfaces AuthenticationManager
e RealmMapping
.
O JaasSecurityManager usa os pacotes JAAS para implantar o comportamento da interface do AuthenticationManager e RealmMapping. Na realidade, seu comportamento deriva da execução das instâncias do módulo de login que são configuradas no security domain pelo qual o JaasSecurityManager foi determinado. Os módulos de login implementam a autenticação principal do security domain e comportamento de mapeamento de função. Você pode usar o JaasSecurityManager por todos os security domains pelo plugging em configurações para os domains.
EJBHome
. O EJB já foi implantado no servidor e seus métodos de interface EJBHome
foram assegurados usando os elementos <method-permission> no descritor ejb-jar.xml
. Ele usa o security domain jwdomain
, que é especificado no elemento <security-domain> do arquivo jboss-ejb3.xml
. A imagem abaixo apresenta as etapas que serão explicadas mais tarde:
Figura 16.1. Etapas da Invocação do Método EJB com Segurança
- O cliente executa o login JAAS para estabelecer o principal e credenciais para autenticação. Isto é o Client Side Login rotulado na figura. Isto pode ser também executado na forma de JNDI.Para executar um login JAAS, você cria uma instância de LoginContext e passa o nome de configuração para uso. Neste caso, o nome da configuração é
other
. Este login associa de uma vez só o principal do login e credenciais com todas as invocações de método EJB subsequente. Este processo não autentica o usuário necessariamente. A natureza do login ao lado do cliente depende da configuração do módulo de login que o cliente usa. Nesta amostra, a entrada da configuração de login ao lado do clienteother
usa o módulo de loginClientLoginModule
. Este módulo efetua o bind no nome do usuário e senha à camada de invocação EJB para autenticação mais tarde no servidor. A autenticação do cliente não é autenticado no cliente. - O cliente obtém o método
EJBHome
e o invoca no servidor. A invocação inclui os argumentos do método passados ao cliente, juntamente com a identidade do usuário e credenciais a partir do login JAAS ao lado do cliente. - No lado do servidor, o servidor de segurança autentica o usuário que invocou o método. Isto envolve outro login JAAS.
- O security domain na parte inferior determina a escolha dos módulos de login. O nome do security domain é passado ao construtor
LoginContext
como o nome de entrada da configuração do login. O security domain éjwdomain
. Caso a autenticação for bem sucedida, o JAAS Subject é criado. O JAAS subject inclui PrincipalSet, que inclui os seguintes credenciais:- A instância
java.security.Principal
que corresponde à identidade do cliente a partir do ambiente de segurança da implantação. - Um
java.security.acl.Group
chamadoRoles
que contém os nomes da função do domain do aplicativo do usuário. Os objetosorg.jboss.security.SimplePrincipal
do tipo representam os nomes da função. Essas funções validam o acesso aos métodos EJB de acordo com as restrições noejb-jar.xml
e implementação do métodoEJBContext.isCallerInRole(String)
. - O
java.security.acl.Group
opcional nomeadoCallerPrincipal
, que contém umorg.jboss.security.SimplePrincipal
único que corresponde à identidade do chamador do domain do aplicativo. O associado do grupo CallerPrincipal é o valor retornado pelo métodoEJBContext.getCallerPrincipal()
. Este mapeamento permite que o Principal no ambiente de segurança operacional mapeie um Principal conhecido pelo aplicativo. Na ausência do mapeamento CallerPrincipal, o principal operacional é o mesmo do principal do domain do aplicativo.
- O servidor verifica que o usuário chamando o método EJB possui permissão. A execução desta autorização envolve as seguintes etapas:
- Obtém os nomes de funções para acesso do método EJB a partir do contêiner EJB. Os nomes de funções são determinados pelos elementos <role-name> do descritor
ejb-jar.xml
de todos os elementos <method-permission> contendo o método invocado. - Caso nenhuma das funções seja determinada ou o método especificado num elemento de lista exclusivo, o acesso ao método é negado. Do contrário, o método
doesUserHaveRole
é invocado no gerenciador de segurança pelo interceptor de segurança para verificar se o chamador possui um dos nomes de função determinado. Esse método interage através dos nomes de função e verifica se o grupoSubject Roles
do usuário autenticado contém um SimplePrincipal com o nome da função determinado. O acesso é permitido caso o nome da função seja um associado do grupo Funções. O acesso é negado caso nenhum dos nomes de função seja associado. - Caso o EJB use um proxy de segurança personalizado, a invocação do método é delegada do proxy. Caso o proxy de segurança negar acesso ao chamador, ele lança um
java.lang.SecurityException
. Do contrário, o acesso ao método EJB é permitido e a invocação do método passa ao próximo interceptor do contêiner. O SecurityProxyInterceptor manuseia esta checagem e este interceptor não é apresentado. - Para as solicitações da conexão, o servidor da web verifica as restrições de segurança definidas no
web.xml
que combinam com o recurso solicitado e o método HTTP acessado.Caso a restrição existir para a solicitação, o servidor da web chama o JaasSecurityManager para executar a autenticação principal, que em troca garante que as funções do usuário são associadas com o objeto principal.
16.5. Java Authorization Contract for Containers (JACC - Contrato de Autorização Java para Contêineres)
16.5.1. Java Authorization Contract for Containers (JACC)
16.5.2. Configuração do Java Authorization Contract for Containers (JACC) para Segurança
jboss-web.xml
para inclusão dos parâmetros corretos.
Para adição do suporte JACC ao security domain, adicione a política de autorização JACC
à pilha de autorização, com o conjunto do aviso required
. Segue abaixo uma amostra do security domain com o suporte JACC. No entanto, o security domain é configurado no Management Console ou Management CLI, ao invés do XML diretamente.
<security-domain name="jacc" cache-type="default"> <authentication> <login-module code="UsersRoles" flag="required"> </login-module> </authentication> <authorization> <policy-module code="JACC" flag="required"/> </authorization> </security-domain>
O jboss-web.xml
está localizado no diretório META-INF/
ou WEB-INF/
de sua implantação e contém substituições e uma configuração específica do JBoss adicional para o contêiner da web. Para uso do seu security domain habilitado do JACC, você precisa incluir o elemento <security-domain>
e também configurar o elemento <use-jboss-authorization>
para true
. O seguinte aplicativo está configurado de forma apropriada para uso do security domain JACC acima.
<jboss-web> <security-domain>jacc</security-domain> <use-jboss-authorization>true</use-jboss-authorization> </jboss-web>
A configuração dos EJBs para uso de um security domain e para uso do JACC difere-se dos Aplicativos da Web. Para um EJB, você pode declarar o method permissions num método ou grupo de métodos no descritor ejb-jar.xml
. Com o elemento <ejb-jar>
, quaisquer elementos <method-permission>
contém informações sobre as funções JACC. Refira-se à configuração de amostra para maiores informações. A classe EJBMethodPermission
faz parte do Java Enterprise Edition 6 API e está documentada no http://docs.oracle.com/javaee/6/api/javax/security/jacc/EJBMethodPermission.html.
Exemplo 16.1. Permissões do Método JACC no EJB
<ejb-jar> <method-permission> <description>The employee and temp-employee roles may access any method of the EmployeeService bean </description> <role-name>employee</role-name> <role-name>temp-employee</role-name> <method> <ejb-name>EmployeeService</ejb-name> <method-name>*</method-name> </method> </method-permission> </ejb-jar>
jboss-ejb3.xml
no elemento filho <security>
. Além do security domain, você pode especificar o run-as principal, que altera o principal do EJB sendo executado.
Exemplo 16.2. Amostra do Security Domain num EJB
<security> <ejb-name>*</ejb-name> <security-domain>myDomain</s:security-domain> <run-as-principal>myPrincipal</s:run-as-principal> </s:security>
16.6. Java Authentication SPI for Containers (JASPI - SPI de Autenticação Java para Contêineres)
16.6.1. Java Authentication SPI para Segurança (JASPI) de Contêiner
16.6.2. Configuração do Java Authentication SPI (JASPI) para Segurança de Contêineres
<authentication-jaspi>
ao seu security domain. A configuração é parecida ao módulo de autenticação default, porém os elementos do módulo de login são incluídos num elemento <login-module-stack>
. A estrutura da configuração é:
Exemplo 16.3. Estrutura do elemento authentication-jaspi
<authentication-jaspi> <login-module-stack name="..."> <login-module code="..." flag="..."> <module-option name="..." value="..."/> </login-module> </login-module-stack> <auth-module code="..." login-module-stack-ref="..."> <module-option name="..." value="..."/> </auth-module> </authentication-jaspi>
EAP_HOME/domain/configuration/domain.xml
ou EAP_HOME/standalone/configuration/standalone.xml
.
Apêndice A. Referência
A.1. Módulos de Autenticação Incluídos
Role
com o nome Code
.
Code
ou o nome completo (pacote qualificado) para referir-se ao módulo.
Módulos de Autenticação
Tabela A.1. Client
Código | Client
|
Classe | org.jboss.security.ClientLoginModule
|
Descrição |
O módulo de login é designado a estabelecer credenciais e a identidade do chamador quando o JBoss Enterprise Application Plataform estiver agindo como cliente. Isto nunca deve ser usado como parte de um security domain usado na autenticação do servidor atual.
|
Tabela A.2. Opções de Módulo do Cliente
Opções | Tipo | Default | Descrição |
---|---|---|---|
multi-threaded | true ou false
| false
|
Configure para verdadeiro caso cada thread possua o próprio storage credencial e principal. Configure para falso para indicar que todos os threads na MV compartilham a mesma identidade e credencial.
|
password-stacking
| useFirstPass ou false
| false
|
Configure para useFirstPass para indicar que este módulo de login deve buscar por informações stored no LoginContext para uso como a identidade. Esta opção pode ser usada quando empilhando outros módulos de login com este.
|
>restore-login-identity
| true ou false
| false
|
Configure para verdadeiro caso a identidade e credencial vistos no início do método login() devem ser restaurados após o método logout() ser invocado.
|
Tabela A.3. Certificate
Código | Certificate
|
Classe | org.jboss.security.auth.spi.BaseCertLoginModule
|
Descrição |
Este módulo de login é designado a autenticar os usuários baseados no
X509 Certificates . Um caso de usuário sobre isto é a autenticação CLIENT-CERT de um aplicativo da web.
|
Tabela A.4. Opções do Módulo Certificate
Opções | Tipo | Default | Descrição |
---|---|---|---|
securityDomain
| faixa |
nenhum
|
Nome do security domain que possui a configuração JSSE para o truststore que contém os certificados trusted.
|
verifier
| Classe |
nenhum
|
Nome de clouds para uso em importações.
org.jboss.security.auth.certs.X509CertificateVerifier
|
Tabela A.5. CertificateUsers
Código | CertificateUsers
|
Classe | org.jboss.security.auth.spi.UsersRolesLoginModule
|
Descrição |
Isto usa os recursos das propriedades. O primeiro mapeia os nomes dos usuários para senhas e o segundo mapeia os nomes do usuário para funções.
|
Tabela A.6. Opções de Módulo CertificateUsers
Opções | Tipo | Default | Descrição |
---|---|---|---|
unauthenticatedIdentity
| Sequência |
nenhum
|
Define o nome principal que deve ser determinado para solicitações que não contém informação da autenticação. Isto pode permitir que servlets não protegidos invocarem métodos nos EJBs que não requerem uma função específica. Tal principal não possui funções associadas e pode apenas acessar tanto métodos EJB ou EJBs que são associados com uma restrição
unchecked permission .
|
password-stacking
| useFirstPass ou false
| false
|
Configure para
useFirstPass para indicar que esse módulo de login deve buscar pela informação stored no LoginContext para uso como identidade. Esta opção pode ser usada quando empilhando outros módulos com este.
|
hashAlgorithm | Sequência |
nenhum
|
O nome do algoritmo
java.security.MessageDigest para efetuar o hash da senha. Não há default para isto, de forma que esta opção deve ser configurada explicitamente para habilitação do hash. Quando o hashAlgoritm for especificado, a senha de texto obtido do CallbackHandler obtém o hash antes de ser passada ao UsernamePasswordLoginModule.validatePassword como argumento inputPassword. O expectedPassword stored no arquivo users.properties deve possuir hash comparáveis. Refira-se ao http://docs.oracle.com/javase/6/docs/api/java/security/MessageDigest.html para informações sobre o java.security.MessageDigest e algoritmos que essa classe suporta.
|
hashEncoding
| base64 ou hex
| base64
|
O formato desta sequência para a senha com hash, caso o
hashAlgorithm seja também configurado.
|
hashCharSet
| Sequência |
A codificação default configurada no ambiente do contêiner.
|
A codificação usada para converter a senha de texto limpo para um byte array.
|
usersProperties
|
O caminho de arquivo inteiramente qualificado e nome do arquivo ou recurso de propriedades.
| users.properties
|
O arquivo contendo os mapeamentos entre os usuários e senhas. Cada propriedade no arquivo possui o formato
username=password .
|
rolesProperties
| O caminho de arquivo inteiramente qualificado e nome do arquivo ou recurso de propriedades. | roles.properties
|
O arquivo contendo os mapeamentos entre os usuários e funções. Cada propriedade do arquivo possui o formato
username=role1,role2,...,roleN .
|
ignorePasswordCase
| true ou false
| false
|
Se é que a comparação da senha deve ignorar o caso. Isto é útil para a codificação de senha com hash onde o caso da senha com hash não é significante.
|
principalClass
| O nome da classe inteiramente qualificado. |
nenhum
|
A classe de implementação
Principal que contém um condutor que leva um argumento de Sequência para o nome principal.
|
roleGroupSeparator
|
Um caractere único
| . (um período único)
|
O caractere usado para separar o nome do usuário a partir do nome do grupo de função no arquivo
rolesGroup .
|
defaultUsersProperties
| faixa | defaultUsers.properties
|
O nome do recurso ou arquivo de retrocedência caso o arquivo usersProperties não possa ser encontrado.
|
defaultRolesProperties
| faixa | defaultRoles.properties
|
O nome do recurso ou arquivo de retrocedência caso o arquivo
rolesProperties não possa ser encontrado.
|
hashUserPassword
| true ou false
| true
|
Se é que efetuar o hash na senha inserida pelo usuário, quando o
hashAlgorithm for especificado. O default é true .
|
hashStorePassword
| true ou false
| true
|
Se é que a senha do store retornada do
getUsersPassword() deve possuir o hash, quando o hashAlgorithm for especificado.
|
digestCallback
| O nome da classe inteiramente qualificado. |
nenhum
|
O nome da classe da implementação
org.jboss.crypto.digest.DigestCallback que inclui o conteúdo de resumo pré ou pós tal como valores salt. Isto é apenas usado caso o hashAlgorithm seja especificado.
|
storeDigestCallback
| O nome da classe inteiramente qualificado. |
nenhum
|
O nome da classe da implementação
org.jboss.crypto.digest.DigestCallback que inclui o conteúdo de resumo pré/pós como salts para o hashing da senha stored. Isto é apenas usado caso o hashStorePassword for verdadeiro e o hashAlgorithm for especificado.
|
callback.option.STRING
| Diversos | nenhum |
Todas as opções pré-fixadas com
callback.option. são passadas para o método DigestCallback.init(Map) . O nome do usuário inserido é sempre passado através da opção javax.security.auth.login.name e a senha de entrada/store é passada através da opção javax.security.auth.login.password ao digestCallback ou storeDigestCallback .
|
Tabela A.7. CertificateRoles
Código | CertificateRoles
|
Classe | org.jboss.security.auth.spi.CertRolesLoginModule
|
Descrição |
O módulo de login estende o módulo de login do certificado para adicionar as capacidades de mapeamento de função a partir do arquivo de propriedades. Isto leva tudo de mesmas opções como o módulo de login do Certificado e adiciona as seguintes opções:
|
Tabela A.8. CertificateRoles
Module Options
Opções | Tipo | Default | Descrição |
---|---|---|---|
rolesProperties
| Sequência | roles.properties
|
O nome do recurso ou arquivo contendo as funções para determinação de cada usuário. O arquivo de propriedades de função no formato username=role1,role2 onde o nome do usuário é o DN do certificado, escapando qualquer sinal de
= (igual) e caracteres com espaço. A seguinte amostra está no formato correto:
CN\=unit-tests-client,\ OU\=Red\ Hat\ Inc.,\ O\=Red\ Hat\ Inc.,\ ST\=North\ Carolina,\ C\=US=JBossAdmin |
defaultRolesProperties
| Sequência | defaultRoles.properties
|
O nome do recurso ou arquivo de retrocedência caso o arquivo
rolesProperties não possa ser encontrado.
|
roleGroupSeparator
| Um caractere único | . (um período único)
|
Qual caractere de uso conforme o separador de grupo de função no arquivo
roleProperties .
|
Tabela A.9. Database
Código | Database |
Classe | org.jboss.security.auth.spi.DatabaseServerLoginModule
|
Descrição |
O módulo de login baseado no JDBC que suporta o mapeamento de função e autenticação. Isto é baseado em duas tabelas lógicas, com as seguintes definições:
|
Tabela A.10. Database
Module Options
Opções | Tipo | Default | Descrição |
---|---|---|---|
dsJndiName
| Recurso JNDI |
nenhum
|
O nome do storing do recurso JNDI da informação de autenticação. Esta opção é requerida.
|
principalsQuery
| Uma declaração SQL preparada | select Password from Principals where PrincipalID=?
|
A fila SQL preparada para obtenção da informação sobre o principal.
|
rolesQuery
| Uma declaração SQL preparada | select Role, RoleGroup from Roles where PrincipalID=?
|
A fila SQL preparada para obtenção da informação sobre as funções. Isto deve ser equivalente ao
select Role, RoleGroup from Roles where PrincipalID=? , onde Role (Função) é o nome da Função e o valor de coluna RoleGroup deve sempre ser tanto Roles com letra maiúscula R ou CallerPrincipal .
|
Tabela A.11. DatabaseCertificate
Código | DatabaseCertificate
|
Classe | org.jboss.security.auth.spi.DatabaseCertLoginModule
|
Descrição |
O módulo de login estende o módulo de login do Certificado para adicionar as capacidades de mapeamento de função a partir da tabela da fonte de dados. Isto possui as mesmas opções, além das opções adicionais:
|
Tabela A.12. Opções de Módulo DatabaseCertificate
Opções | Tipo | Default | Descrição |
---|---|---|---|
dsJndiName
| Recurso JNDI |
|
O nome do storing do recurso JNDI da informação de autenticação. Esta opção é requerida.
|
rolesQuery
| Uma declaração SQL preparada | select Role,RoleGroup from Roles where PrincipalID=?
|
A declaração preparada SQL a ser executada em ordem das funções a serem mapeadas. Isto deve ser equivalente ao
select Role, RoleGroup from Roles where PrincipalID=? , onde Role (Função) é o nome da Função e o valor de coluna RoleGroup deve sempre ser tanto Roles com letra maiúscula R ou CallerPrincipal .
|
suspendResume
| true ou false
| true
|
Se é que a transação JTA existente deve ser suspendida durante as operações de fonte de dados.
|
Tabela A.13. Identity
Código | Identity
|
Classe | org.jboss.security.auth.spi.IdentityLoginModule
|
Descrição |
Associa o principal especificado nas opções de módulo com qualquer sujeito autenticado em relação ao módulo. O tipo de classe Principal usado é
org.jboss.security.SimplePrincipal. . Caso nenhuma opção seja especificada, um principal com o nome de guest será usado.
|
Tabela A.14. Opções de Módulo Identity
Opções | Tipo | Default | Descrição |
---|---|---|---|
principal
| Sequência | guest
|
O nome a ser usado pelo principal.
|
roles
| A lista de vírgula separada das sequências |
nenhum
|
A lista de vírgula delimitada das funções a serem determinadas ao sujeito.
|
Tabela A.15. Ldap
Código | Ldap
|
Classe | org.jboss.security.auth.spi.LdapLoginModule
|
Descrição |
Autentica em relação ao servidor LDAP, quando o nome do usuário e senha forem stored num servidor LDAP que é acessível usando um provedor JNDI LDAP. Muitas das opções não são requeridas, uma vez que elas são determinadas pelo provedor LDAP ou o ambiente.
|
Tabela A.16. Opções do Módulo Ldap
Opções | Tipo | Default | Descrição |
---|---|---|---|
java.naming.factory.initial
| nome da classe | com.sun.jndi.ldap.LdapCtxFactory
|
O nome da classe de implementação
InitialContextFactory .
|
java.naming.provider.url
| ldap:// URL
|
nenhum
|
URL para o servidor LDAP.
|
java.naming.security.authentication
| none , simple , or the name of a SASL mechanism
| simple
|
O nível de segurança para uso para efetuar o bind no servidor LDAP.
|
java.naming.security.protocol
| O protocolo de transporte |
Caso não especificado, determinado pelo provedor.
|
O protocolo de transporte para uso do acesso de segurança, tal como o SSL.
|
java.naming.security.principal
| Sequência |
nenhum
|
O nome do principal para autenticação do chamador para o serviço. Isto é construído a partir de outras propriedades descritas abaixo.
|
java.naming.security.credentials
| O tipo de credencial |
nenhum
|
O tipo de credencial usado pelo esquema de autenticação. Alguns exemplos, incluindo a senha com hash, senha de texto limpo, chave ou certificado. Caso a propriedade não estiver especificada, o comportamento é determinado pelo provedor do serviço.
|
principalDNPrefix
| Sequência |
nenhum
|
O prefixo adicionado para o nome do usuário para formar o DN. Você pode solicitar o nome do usuário e construir o DN inteiramente qualificado usando o
principalDNPrefix e principalDNSuffix .
|
principalDNSuffix
| faixa |
|
O sufixo adicionado para o nome do usuário para formar o DN. Você pode solicitar o nome do usuário e construir o DN inteiramente qualificado usando o
principalDNPrefix e principalDNSuffix .
|
useObjectCredential
| true ou false
|
falso
|
Se é que o credencial deve ser obtido como um Objeto Opaco usando o tipo
org.jboss.security.auth.callback.ObjectCallback de Callback ao invés de uma senha char[] usando um JAAS PasswordCallback. Isto permite a passagem de informação de credencial non-char[] ao servidor LDAP.
|
rolesCtxDN
| Um DN inteiramente qualificado |
nenhum
|
O DN inteiramente qualificado para o contexto para busca das funções do usuário.
|
userRolesCtxDNAttributeName
|
Atributo
|
nenhum
|
O atributo no objeto do usuário que contém o DN para o contexto para pesquisa das funções do usuário. Isto difere-se do
rolesCtxDN no que se refere ao contexto de busca das funções do usuário, que poderão ser únicas para cada usuário.
|
rolesAttributeID
| Atributo | roles
|
Nome do atributo contendo funções do usuário.
|
rolesAttributeIsDN
| true ou false
| false
|
Se é que o
roleAttributeID contém o DN inteiramente qualificado do objeto da função. Caso seja falso, o nome da função é obtida do valor do atributo roleNameAttributeId do nome do contexto. Certos esquemas do diretório, tais como o Microsoft Active Directory, requerem que este atributo seja configurado para true .
|
rolesNameAttributeID
| Atributo | group
|
O nome do atributo com o contexto
roleCtxDN que contém o nome da função. Caso a propriedade roleAttributeIsDN seja configurada para true , esta propriedade será usada para buscar o atributo do nome do objeto de função.
|
uidAttributeID
| Atributo | uid
|
O nome do atributo no
UserRolesAttributeDN que corresponde à ID do usuário. Isto é usado para localizar as funções do usuário.
|
matchOnUserDN
| true ou false
| false
|
Se é que a busca das funções do usuário devem coincidir com o DN inteiramente distinguido do usuário ou apenas nome do usuário. Caso seja
true , o DN completo de usuário é usado como valor de combinação. Caso seja false , apenas o nome do usuário é usado para combinar o valor em referência ao atributo uidAttributeName .
|
allowEmptyPasswords
| true ou false
| true
|
Se é que permitir as senhas vazias. A maioria dos servidores LDAP tratam senhas vazias com tentativas de login anônimas. Configure isto para falso, com o objetivo de rejeitar senhas vazias.
|
Tabela A.17. LdapExtended
Código | LdapExtended
|
Classe | org.jboss.security.auth.spi.LdapExtLoginModule
|
Descrição |
Uma implementação de módulo de login que usa buscas para localizar o usuário bind e funções associadas. A fila das funções segue recursivamente os DNs para navegar a uma estrutura de função hierárquica. Isto usa as mesmas opções
java.naming como o módulo Ldap e usa as seguintes opções ao invés de outras opções do módulo Ldap.
A autenticação acontece em duas etapas:
|
Tabela A.18. Opções de Módulo LdapExtended
Opções | Tipo | Default | Descrição |
---|---|---|---|
baseCtxDN
| Um DN inteiramente qualificado |
nenhum
|
O DN fixado do contexto de nível superior para iniciar a busca do usuário.
|
bindDN
| Um DN inteiramente qualificado |
nenhum
|
O DN usado para efetuar o bind no servidor LDAP para as solicitações de funções e dos usuários. Este DN precisa ler e buscar permissões nos valores
baseCtxDN e rolesCtxDN .
|
bindCredential
| Uma sequência, opcionalmente criptografada |
nenhum
|
A senha para o
bindDN . Ela pode ser criptografada caso o jaasSecurityDomain seja especificado.
|
jaasSecurityDomain
| JMX ObjectName |
nenhum
|
O JMX
ObjectName do JaasSecurityDomain de uso para descriptografar o bindCredential . A forma criptografada da senha é o formato retornado pelo método JaasSecurityDomain.encrypt64(byte[]) .
|
baseFilter
| Sequência do filtro LDAP |
nenhum
|
O filtro de busca para localizar o contexto do usuário para autenticação. O nome do usuário ou userDN obtido da chamada de retorno do módulo de login é substituído no filtro em qualquer local onde uma expressão
{0} for usada. Uma amostra comum de busca do filtro é (uid={0}) .
|
rolesCtxDN
| DN inteiramente qualificado |
nenhum
|
O DN fixado do contexto de busca para as funções do usuário. Este não é o DN onde as funções atuais se encontram, mas o DN onde os objetos contendo as funções do usuário estão. Por exemplo, num servidor Microsoft Active Directory, este é o DN onde a conta do usuário se encontra.
|
roleFilter
| Sequência do filtro LDAP |
|
A busca do filtro usada para localizar as funções associadas com o usuário de autenticação. O nome do usuário de entrada ou userDN obtido pela chamada de retorno do módulo de login é substituído no filtro em qualquer local onde a expressão
{0} for usada. O uderDN autenticado é substituído no filtro em qualquer lugar onde um {1} for usado. Uma amostra da busca do filtro que combina com o nome do usuário de entrada é (member={0}) . Uma alternativa que combina com o userDN autenticado é o (member={1}) .
|
roleAttributeIsDN | true ou false
| false
|
Se é que o
roleAttributeID contém o DN inteiramente qualificado do objeto da função. Caso seja falso, o nome da função é obtida do valor do atributo roleNameAttributeId do nome do contexto. Certos esquemas do diretório, tais como o Microsoft Active Directory, requerem que este atributo seja configurado para true .
|
defaultRole
|
Nome da função
|
nenhum
|
A função incluída para todos os usuários autenticados.
|
parseRoleNameFromDN
| true ou false
| false
|
O sinalizador indicando se o DN retornado por uma fila contém o roleNameAttributeID. Caso configurado para
true , o DN é checado pelo roleNameATtributeID. Caso configurado para false , o DN não é checado pelo roleNameAttributeID. Este sinalizador pode melhorar o desempenho das filas LDAP.
|
parseUsername
| true ou false
| false
|
Um sinalizador indicando se o DN deve ser pesquisado pelo nome do usuário. Caso configurado para
true , o DN pelo nome do usuário. Caso configurado para false o DN pelo nome do usuário. Esta opção é usada juntamente com o usernameBeginString e usernameEndString.
|
usernameBeginString
|
uma sequência
|
nenhum
|
Define a sequência que está prestes a ser removida a partir do início do DN para revelar o nome do usuário. Esta opção é usada juntamente com o
usernameEndString .
|
usernameEndString
|
uma sequência
|
nenhum
|
Define a sequência que está prestes a ser removida a partir do final do DN para revelar o nome do usuário. Esta opção é usada juntamente com o
usernameBeginString .
|
roleNameAttributeID
| Atributo | group
|
O nome do atributo com o contexto
roleCtxDN que contém o nome da função. Caso a propriedade roleAttributeIsDN seja configurada para true , esta propriedade será usada para buscar o atributo do nome do objeto de função.
|
distinguishedNameAttribute
| Atributo | distinguishedName
|
O nome do atributo na entrada do usuário que contém o DN do usuário. Isto deve ser necessário caso o próprio DN do usuário conter caracteres especiais (barra invertida, por exemplo) que previne o mapeamento do usuário correto. Caso o atributo não existir, o DN de entrada será usado.
|
roleRecursion
| O número | 0
|
Os números de níveis de recursão de busca da função serão inferiores ao do contexto de combinação. Desabilite a recursão configurando-a para
0 .
|
searchTimeLimit
| O número | 10000 (10 segundos)
|
O intervalo em milésimos de segundos para buscas do usuário e funções.
|
searchScope
|
Um dos:
OBJECT_SCOPE, ONELEVEL_SCOPE, SUBTREE_SCOPE
| SUBTREE_SCOPE
|
O escopo de busca para uso.
|
allowEmptyPasswords
| true ou false
| true
|
Se é que permitir as senhas vazias. A maioria dos servidores LDAP tratam senhas vazias com tentativas de login anônimas. Configure isto para falso, com o objetivo de rejeitar senhas vazias.
|
Tabela A.19. RoleMapping
Código | RoleMapping
|
Classe | org.jboss.security.auth.spi.RoleMappingLoginModule
|
Descrição |
Mapeia a função que é o resultado final do processo de autenticação a uma função declarativa. Este módulo deve ser sinalizado como
optional quando você adicioná-lo ao security domain.
|
Tabela A.20. Opções de Módulo RoleMapping
Opções | Tipo | Default | Descrição |
---|---|---|---|
rolesProperties
| O caminho de arquivo inteiramente qualificado e nome do arquivo ou recurso de propriedades. | roles.properties
|
O caminho do arquivo inteiramente qualificado e nome do arquivo de propriedades ou recurso que mapeia funções para substituição das funções. O formato é
original_role=role1,role2,role3 .
|
replaceRole
| true ou false
| false
|
Se é que adicionar às funções atuais ou substituir as funções atuais pelas mapeadas. Isto é substituído caso configurado para
true .
|
Tabela A.21. RunAs
Código | RunAs
|
Classe | Class: org.jboss.security.auth.spi.RunAsLoginModule
|
Descrição |
O módulo ajudante que envia uma função
run as à pilha para a duração da fase de login da autenticação e tira a função run as da pilha tanto na fase de confirmação ou anulação. Este módulo de login fornece uma função para os demais módulos que devem acessar os recursos de segurança com o objetivo de executar suas autenticações, tais como o módulo de login que acessa o EJB de segurança. O RunAsLoginModule deve ser configurado antes dos módulos de login que requerem a função run as a ser estabelecida.
|
Tabela A.22. Opções RunAs
Opções | Tipo | Default | Descrição |
---|---|---|---|
roleName
| Nome da função | nobody
|
O nome da função de uso como a função
run as durante a fase de login.
|
Tabela A.23. Simple
Código | Simple
|
Classe | org.jboss.security.auth.spi.SimpleServerLoginModule
|
Descrição |
O módulo para montagem rápida de segurança para propósitos de testes. Ele implementa o seguinte algoritmo simples:
|
Simple
O módulo Simple
não possui opções.
Tabela A.24. ConfiguredIdentity
Código | ConfiguredIdentity
|
Classe | org.picketbox.datasource.security.ConfiguredIdentityLoginModule
|
Descrição |
Associa o principal especificado nas opções do módulo com qualquer sujeito autenticado em referência ao módulo. O tipo de classe Principal usada é
org.jboss.security.SimplePrincipal .
|
Tabela A.25. Opções de Módulo ConfiguredIdentity
Opções | Tipo | Default | Descrição |
---|---|---|---|
principal
| Nome do principal. | guest
|
O principal que será associado com qualquer sujeito autenticado em referência ao módulo.
|
Tabela A.26. SecureIdentity
Código | SecureIdentity
|
Classe | org.picketbox.datasource.security.SecureIdentityLoginModule
|
Descrição |
Este módulo é fornecido para propósitos de legacia. Isto permite você criptografar a senha e então usar a senha criptografada com um principal estatístico. Caso o seu aplicativo usar
SecureIdentity , considere o uso de um mecanismo de vault da senha.
|
Tabela A.27. Opções do Módulo SecureIdentity
Opções | Tipo | Default | Descrição |
---|---|---|---|
username
| faixa | nenhum | O nome do usuário para autenticação. |
password
| sequência criptografada | nenhum |
A senha de uso para autenticação. Para criptografar a senha, use o módulo diretamente na linha de comando.
Copie o resultado deste comando no campo do valor da opção do módulo.
|
managedConnectionFactoryName
| Recurso JCA | nenhum |
O nome da conexão JCA para a fonte de dados.
|
Tabela A.28. PropertiesUsers
Código | PropertiesUsers
|
Classe | org.jboss.security.auth.spi.PropertiesUsersLoginModule
|
Descrição |
Usa o arquivo das propriedades para aplicar o store dos nomes do usuário e senhas para autenticação. Nenhuma autorização (mapeamento de função) é fornecido. Este módulo é apenas apropriado para testes.
|
Tabela A.29. Opções de Módulo PropertiesUsers
Opções | Tipo | Default | Descrição |
---|---|---|---|
properties
| O caminho e nome do arquivo inteiramente qualificado do arquivo ou recurso das propriedades Java. | nenhum |
O arquivo da propriedade contendo os nomes do usuário e senhas de texto limpo a serem usados para a autenticação.
|
Tabela A.30. SimpleUsers
Código | SimpleUsers
|
Classe | org.jboss.security.auth.spi.SimpleUsersLoginModule
|
Descrição |
O módulo de login efetua o store do nome do usuário e senha de texto limpo no arquivo de propriedades Java. Isto está incluído para testes apenas e não é apropriado para um ambiente de produção.
|
Tabela A.31. Opções do Módulo SimpleUsers
Opções | Tipo | Default | Descrição |
---|---|---|---|
username
| faixa | nenhum | O nome de usuário para uso da autenticação. |
password
| faixa | nenhum | A senha de texto limpo para uso da autenticação. |
Tabela A.32. LdapUsers
Código | LdapUsers
|
Classe | org.jboss.security.auth.spi.LdapUsersLoginModule
|
Descrição |
O módulo
LdapUsers é substituído pelos módulos ExtendedLDAP e AdvancedLdap .
|
Tabela A.33. Kerberos
Código | Kerberos
|
Classe | com.sun.security.auth.module.Krb5LoginModule
|
Descrição |
Executa a autenticação de login do Kerberos, usando GSSAPI. Este módulo faz parte do framework de segurança a partir do API fornecido pelo Sun Microsystems. Maiores informações podem ser encontradas no http://docs.oracle.com/javase/1.4.2/docs/guide/security/jaas/spec/com/sun/security/auth/module/Krb5LoginModule.html. Este módulo precisa ser emparelhado com outro módulo que manuseia o mapeamento de funções e autenticação.
|
Tabela A.34. Opções de Módulo Kerberos
Opções | Tipo | Default | Descrição |
---|---|---|---|
storekey
| true ou false
| falso |
Se é que ou não adicionar o
KerberosKey aos credenciais privados do sujeito.
|
doNotPrompt
| true ou false
| falso |
Caso configurado para
true , não haverá solicitação de senha ao usuário.
|
useTicketCache
|
Valor Booliano de
. true ou false
| falso |
Caso
true , o GTG é obtido a partir do cache do tíquete. Caso false , o cache do tíquete não será usado.
|
ticketcache
| Um arquivo ou recurso representando um cache de tíquete Kerberos. |
O default depende do sistema operacional em que você está utilizando.
| A localização do cache do tíquete do cache. |
useKeyTab
| true ou false
| falso | Se é que obter a chave principal a partir de um arquivo de tabela de chave. |
keytab
| O arquivo ou recurso representando o Kerberos keytab. |
a localização do arquivo de configuração Kerberos do sistema operacional ou
/home/user/krb5.keytab
| A localização do arquivo da tabela da chave. |
principal
| Sequência | nenhum |
O nome do principal. Isto pode ser tanto um nome de usuário ou um nome de serviço tal como
host/testserver.acme.com . Use isto ao invés de obter o principal a partir da tabela chave ou quando a tabela chave conter mais de um principal.
|
useFirstPass
| true ou false
| falso |
Se é que recuperar o nome do usuário e senha a partir do estado compartilhado do módulo, usando o
javax.security.auth.login.name e javax.security.auth.login.password como chaves. Caso a autenticação falhar, nenhuma nova tentativa é realizada.
|
tryFirstPass
| true ou false
| falso |
O mesmo ao do
useFirstPass , mas se a autenticação falhar, o módulo usa o CallbackHandler para recuperar uma nova senha e nome do usuário. Caso uma segunda autenticação falhar, a falha é relatada ao aplicativo de chamada.
|
storePass
| true ou false
| falso |
Se é que realizar o store no nome do usuário e senha no estado compartilhado do módulo. Isto não acontece caso as chaves já existirem no estado compartilhado ou se a autenticação falhar.
|
clearPass
| true ou false
| falso |
Defina isto para
true para limpar o nome do usuário e senha do estado compartilhado após ambas as fases de autenticação forem completadas.
|
Tabela A.35. SPNEGOUsers
Código | SPNEGOUsers
|
Classe | org.jboss.security.negotiation.spnego.SPNEGOLoginModule
|
Descrição |
Permite a autenticação SPNEGO ao servidor Microsoft Active Directory ou de outro ambiente que suporta o SPNEGO. O SPNEGO pode levar as credenciais do Kerberos. Este módulo precisa ser emparelhado com outro módulo que manuseia o mapeamento de função e autenticação.
|
Tabela A.36. Opções de Módulo SPNEGO
Opções | Tipo | Default | Descrição |
---|---|---|---|
storeKey
| true ou false
| false
|
Se é que ou não aplicar o store na chave.
|
useKeyTab
| true ou false
| false
|
Se é que usar uma tabela de chave.
|
principal
|
Sequência representando o principal para a autenticação Kerberos.
|
nenhum
|
O nome do principal para autenticação.
|
keyTab
|
O arquivo ou recurso de representação da keytab.
| none
|
A localização da tabela da chave.
|
doNotPrompt
| true ou false
| false
|
Se é que solicitar a senha.
|
debug
| true ou false
| false
|
Se é que gravar as mensagens mais verbosas para propósitos de depuração.
|
Tabela A.37. AdvancedLdap
Código | AdvancedLdap |
Classe | org.jboss.security.negotiation.AdvancedLdapLoginModule
|
Descrição |
O módulo que fornece funcionalidade adicional, tal como SASL e uso do JAAS security domain.
|
Tabela A.38. Opções de Módulo AdvancedLdap
Opções | Tipo | Default | Descrição |
---|---|---|---|
bindAuthentication
|
faixa
|
nenhum
|
O tipo de autenticação SASL para uso do binding para o servidor do diretório.
|
jassSecurityDomain
| string
|
nenhum
|
O nome do JAAS security domain para uso.
|
java.naming.provider.url
| string
|
nenhum
|
O URI do servidor do diretório.
|
baseCtxDN
|
O Distinguished Name (DN - Nome Distinguido) inteiramente qualificado.
|
nenhum
|
O nome distinguido para uso como base para as pesquisas.
|
baseFilter
|
A sequência representando um filtro de busca LDAP.
|
nenhum
|
O filtro para uso para diminuir os resultados de busca.
|
roleAttributeID
|
Uma sequência representando um atributo LDAP.
|
nenhum
|
O atributo LDAP que contém os nomes das funções de autorização.
|
roleAttributeIsDN
| true ou false
| false
|
Se é que o atributo da função é um Distinguished Name (DN - Nome Distinguido).
|
roleNameAttributeID
|
A sequência representando um atributo LDAP.
|
nenhum
|
O atributo contido com o
RoleAttributeId que contém o atributo de função atual.
|
recurseRoles
| true ou false
| false
|
Se é que buscar de recursivamente o
RoleAttributeId para funções.
|
Tabela A.39. AdvancedADLdap
Código | AdvancedADLdap |
Classe | org.jboss.security.negotiation.AdvancedADLoginModule
|
Descrição |
Este módulo estende o módulo de login
AdvancedLdap e adiciona parâmetros extra que são relevantes ao Microsoft Active Directory.
|
Tabela A.40. UsersRoles
Código | UsersRoles |
Classe | org.jboss.security.auth.spi.UsersRolesLoginModul
|
Descrição |
O módulo de login simples que suporta usuários múltiplos e funções de usuários stored em dois arquivos de propriedades diferentes.
|
Tabela A.41. Opções de Módulo UsersRoles
Opções | Tipo | Default | Descrição |
---|---|---|---|
usersProperties
|
Caminho a um arquivo ou recurso.
| users.properties
|
O arquivo ou recurso que contém os mapeamentos do usuário-à-senha. O formato do arquivo é
user=hashed-password
|
rolesProperties
|
Caminho a um arquivo ou recurso.
| roles.properties
|
O arquivo ou recurso que contém os mapeamentos do usuário-à-função. O formato do arquivo é
username=role1,role2,role3
|
password-stacking
| useFirstPass ou false
| false
|
O valor do
useFirstPass indica que este módulo de login deve primeiramente observar a informação stored no LoginContext para a identidade. Esta opção pode ser usada quando empilhando outros módulos de login com este.
|
hashAlgorithm
|
A sequência representando um algoritmo hashing da senha.
| none
|
O nome do algoritmo
java.security.MessageDigest para efetuar o hash na senha. Não há default de forma que esta opção deve ser explicitamente configurada para habilitar o hashing. Quando o hashAlgorithm for especificado, a senha de texto limpo obtido a partir do CallbackHandler contém hash antes de ser passado ao UsernamePasswordLoginModule.validatePassword como um argumento inputPassword . A senha stored no arquivo users.properties deve ser um hash comparável.
|
hashEncoding
| base64 ou hex
| base64
|
O formato da sequência para a senha com hash, caso o hashAlgoritmo for também configurado.
|
hashCharset
|
Sequência
|
A codificação default determinada no ambiente do período de execução do contêiner.
|
A codificação usada para converter a senha de texto limpo para um byte array.
|
unauthenticatedIdentity
|
O nome principal
|
nenhum
|
Define o nome principal determinado para solicitações que não contém informação de autenticação. Isto pode permitir que servlets não protegidos invoquem métodos nos EJBs que não solicitem uma função específica. Tal principal não possui funções associadas e podem apenas acessar métodos EJB e EJBs que são associados com a restrição
unchecked permission .
|
Os módulos de autenticação são implementações do org.jboss.security.LoginModule
. Refira-se à documentação API para maiores informações sobre a criação de um módulo de autenticação personalizado.
A.2. Módulos de Autorização Incluída
Código | Classe |
---|---|
DenyAll | org.jboss.security.authorization.modules.AllDenyAuthorizationModule |
PermitAll | org.jboss.security.authorization.modules.AllPermitAuthorizationModule |
Delegação | org.jboss.security.authorization.modules.DelegatingAuthorizationModule |
Web | org.jboss.security.authorization.modules.WebAuthorizationModule |
JACC | org.jboss.security.authorization.modules.JACCAuthorizationModule |
A.3. Módulos de Mapeamento de Segurança Incluída
Código | Classe |
---|---|
PropertiesRoles | org.jboss.security.mapping.providers.role.PropertiesRolesMappingProvider |
SimpleRoles | org.jboss.security.mapping.providers.role.SimpleRolesMappingProvider |
DeploymentRoles | org.jboss.security.mapping.providers.DeploymentRolesMappingProvider |
DatabaseRoles | org.jboss.security.mapping.providers.role.DatabaseRolesMappingProvider |
LdapRoles | org.jboss.security.mapping.providers.role.LdapRolesMappingProvider |
A.4. Módulos do Fornecedor de Auditoria de Segurança Incluídos
Código | Classe |
---|---|
LogAuditProvider | org.jboss.security.audit.providers.LogAuditProvider |
A.5. Referência da Configuração jboss-web.xml
O jboss-web.xml
é um arquivo com o seu diretório WEB-INF
ou META-INF
da implantação. Ele contém informação de configuração sobre os recursos que o contêiner do JBoss Web adiciona à especificação Servlet 3.0. As configurações específicas à especificação Servlet 3.0 são posicionadas no web.xml
do mesmo diretório.
jboss-web.xml
é o elemento <jboss-web>
.
Muitos dos requerimentos de mapeamento da configuração disponíveis configurados no web.ml
do aplicativo aos recursos locais. As explicações das configurações web.xml
podem ser encontradas no http://docs.oracle.com/cd/E13222_01/wls/docs81/webapp/web_xml.html.
web.xml
solicitar o jdbc/MyDataSource
, o jboss-web.xml
poderá mapear o java:/DefaultDS
da fonte de dados global para preencher esta necessidade para o jdbc/MyDataSource
.
Tabela A.42. Os atributos de Nível Superior Comuns
Função | Descrição |
---|---|
env-entry |
O mapeamento a um
env-entry solicitado pelo web.xml .
|
ejb-ref |
O mapeamento a um
ejb-ref solicitado pelo web.xml .
|
ejb-local-ref |
Um mapeamento a um
ejb-local-ref solicitado pelo web.xml .
|
service-ref |
O mapeamento a um
service-ref solicitado pelo web.xml .
|
resource-ref |
O mapeamento a um
resource-ref solicitado pelo web.xml .
|
resource-env-ref |
O mapeamento a um
resource-env-ref solicitado pelo web.xml .
|
message-destination-ref |
O mapeamento a um
message-destination-ref solicitado pelo web.xml .
|
persistence-context-ref |
O mapeamento a um
persistence-context-ref solicitado pelo web.xml .
|
persistence-unit-ref |
O mapeamento a um
persistence-unit-ref solicitado pelo web.xml .
|
post-construct |
O mapeamento a um
post-context solicitado pelo web.xml .
|
pre-destroy |
O mapeamento a um
pre-destroy solicitado pelo web.xml .
|
data-source |
O mapeamento a um
data-source solicitado pelo web.xml .
|
context-root | O contexto raiz do aplicativo. O valor default é o nome da implantação sem o sufixo .war . |
virtual-host | O nome do host virtual HTTP que o aplicativo aceita as solicitações. Isto refere-se aos conteúdos do cabeçalho HTTP Host . |
anotação | Descreve uma anotação usada pelo aplicativo. Refira-se ao <annotation> para maiores informações. |
listener (ouvinte) | Descreve um ouvinte usado pelo aplicativo. Refira-se ao <listener> para maiores informações. |
session-config | O elemento preenche a mesma função ao do elemento <session-config> do web.xml e é incluído apenas para compatibilidade. |
valve | Descreve a válvula usada pelo aplicativo. Refira-se ao <valve> para maiores informações. |
overlay | O nome da sobreposição para adição ao aplicativo. |
security-domain | O nome do security domain usado pelo aplicativo. O próprio security domain é configurado no console baseado na web ou no Management CLI. |
security-role | Este elemento preenche a mesma função como o elemento <security-role> do web.xml e é incluído apenas para a compatibilidade. |
use-jboss-authorization | Caso este elemento estiver presente e conter o valor de insensibilidade do caso como "verdadeiro", a pilha de autorização do JBoss web será usada. Caso ele não estiver presente ou conter qualquer valor que não é "verdadeiro", apenas os mecanismos da autorização especificados nas especificações do Java Enterprise Edition serão usados. Este elemento é novo para o JBoss Enterprise Application Plataform 6. |
disable-audit | Caso este elemento vazio estiver presente, a auditoria de segurança da web será desabilitada. Do contrário, isto será habilitado. A auditoria de segurança da web não faz parte da especificação do Java EE. Este elemento é novo no JBoss Enterprise Application Plataform 6. |
disable-cross-context | Caso false , o aplicativo está apto a chamar outro contexto de aplicativo. O default é true . |
Descreve uma anotação usada pelo aplicativo. A seguinte tabela lista os elementos filho de um <annotation>
.
Tabela A.43. Elementos de Configuração da Anotação
Função | Descrição |
---|---|
class-name |
Nome da classe de anotação
|
servlet-security |
O elemento, tal como
@ServletSecurity , que representa a segurança servlet.
|
run-as |
O elemento, tal como
@RunAs , que representa a informação run-as.
|
multi-part |
O elemento, tal como
@MultiPart , que representa a informação múltipla em partes.
|
Descreve um ouvinte. A seguinte tabela lista os elementos filhos de um <listener>
.
Tabela A.44. Elementos de Configuração Ouvinte
Função | Descrição |
---|---|
class-name |
O nome da classe do ouvinte.
|
listener-type |
Lista os elementos
condition que indicam qual o tipo de ouvinte deve ser adicionado ao Contexto do aplicativo. As escolhas válidas são:
|
module |
O nome do módulo contendo a classe ouvinte.
|
param |
O parâmetro. Isto contém dois elementos filhos,
<param-name> e <param-value> .
|
Descreve a válvula do aplicativo. Ele contém os mesmos elementos de configuração como o <listener>.
A.6. Referência do Parâmetro de Segurança EJB
Tabela A.45. Elementos do parâmetro de segurança EJB
Elemento | Descrição |
---|---|
<security-identity>
|
Contém elementos filhos relativos à identidade de segurança de um EJB.
|
<use-caller-identity />
|
Indica que o EJB usa a mesma identidade de segurança à do chamador.
|
<run-as>
|
Contém um elemento
<role-name> .
|
<run-as-principal>
|
Caso presente, indica o principal assinalado para chamadas de saída. Caso não esteja presente, as chamadas de saída são determinadas a um principal nomeado
anonymous .
|
<role-name>
|
Especifica que a função do EJB deve ser executada.
|
<description>
|
Descreve a função nomeada no
. <role-name>
|
Exemplo A.1. Amostras da identidade de segurança
<servlet>
.
<ejb-jar> <enterprise-beans> <session> <ejb-name>ASessionBean</ejb-name> <security-identity> <use-caller-identity/> </security-identity> </session> <session> <ejb-name>RunAsBean</ejb-name> <security-identity> <run-as> <description>A private internal role</description> <role-name>InternalRole</role-name> </run-as> </security-identity> </session> <session> <ejb-name>RunAsBean</ejb-name> <security-identity> <run-as-principal>internal</run-as-principal> </security-identity> </session> </enterprise-beans> </ejb-jar>
Apêndice B. Histórico de Revisão
Histórico de Revisões | |||
---|---|---|---|
Revisão 1.0.0-2 | Mon Oct 13 2014 | CS Builder Robot | |
|