Tutorial de Segurança do Java SE - Etapa 6

A seguinte etapa explica como uma camada de segurança pode ser ativada para comunicação entre os terminais do ambiente.

Antes de Iniciar

Certifique-se de ter concluído do Tutorial de Segurança do Java SE - Etapa 5 antes de continuar com esta tarefa.

Sobre Esta Tarefa

A topologia do eXtreme Scale suporta Transport Layer Security/Secure Sockets Layer (TLS/SSL) para comunicação segura entre terminais do ObjectGrid (cliente, servidores de contêineres e servidores de catálogos). Esta etapa do tutorial é baseada nas etapas anteriores para ativar a segurança do transporte.

Procedimento

  1. Criar chaves TLS/SSL e key stores
    Para ativar a segurança do transporte, é necessário criar um key store e um trust store. Este exercício cria apenas um par de chave e trust-store. Estes armazéns são utilizados para clientes do ObjectGrid, servidores de contêineres e servidores de catálogos, e são criados com o JDK keytool.
    • Criar uma chave privada no key store

      keytool -genkey -alias ogsample -keystore key.jks -storetype JKS -keyalg rsa -dname "CN=ogsample, OU=OGSample, O=acme, L=Your City, S=Your State, C=Your Country" -storepass ogpass -keypass ogpass -validity 3650

      Utilizando este comando, um key store key.jks é criado com uma chave "ogsample" armazenada nele. Esta key store key.jks será utilizada como o key store SSL.

    • Exportar o certificado público

      keytool -export -alias ogsample -keystore key.jks -file temp.key -storepass ogpass

      Utilizando este comando, o certificado público da chave "ogsample" é extraído e armazenado no arquivo temp.key.

    • Importar o certificado público do cliente para o trust store

      keytool -import -noprompt -alias ogsamplepublic -keystore trust.jks -file temp.key -storepass ogpass

      Utilizando este comando, o certificado público foi incluído no key store trust.jks. Este trust.jks é utilizado como o trust store SSL.

  2. Configurando arquivos de propriedades do ObjectGrid

    Neste etapa, é necessário configurar os arquivos de propriedades do ObjectGrid para ativar a segurança do transporte.

    Primeiro, copie os arquivos key.jks e trust.jks no diretório objectgridRoot/security.

    Configure as seguintes propriedades nos arquivos client.properties e server.properties.

    transportType=SSL-Required
    
    alias=ogsample
    contextProvider=IBMJSSE2
    protocol=SSL
    keyStoreType=JKS
    keyStore=../security/key.jks
    keyStorePassword=ogpass
    trustStoreType=JKS
    trustStore=../security/trust.jks
    trustStorePassword=ogpass

    transportType: O valor de transportType é configurado como "SSL-Required", o que significa que o transporte requer SSL. Assim, todos os terminais do ObjectGrid (clientes, servidores de catálogos e servidores de contêineres) devem ter a configuração SSL definida e toda a comunicação de transporte será criptografada.

    As outras propriedades são utilizadas para definir as configurações SSL. Consulte o Transport Layer Security e Secure Sockets Layer para obter uma explicação detalhada. Certifique-se de seguir as seguintes instruções neste tópico para atualizar o arquivo orb.properties.

    Certifique-se de seguir essa página para atualizar o arquivo orb.properties.

    No arquivo server.properties, é necessário incluir uma propriedade adicional clientAuthentication e configurá-la para false. No lado do servidor, não é necessário confiar o cliente.

    clientAuthentication=false

  3. Execute o aplicativo

    Os comandos são os mesmos que os comandos no tópico Tutorial de Segurança do Java SE - Etapa 3.

    Utilize os seguintes comandos para iniciar um servidor de catálogos.
    1. Navegue até o diretório bin: cd objectgridRoot/bin
    2. Inicie o servidor de catálogos:
      • [Linux][Unix]
        startOgServer.sh catalogServer -clusterSecurityFile ../security/security.xml 
        -serverProps ../security/server.properties -JMXServicePort 11001 
        -jvmArgs -Djava.security.auth.login.config="../security/og_jaas.config"
      • [Windows]
        startOgServer.bat catalogServer -clusterSecurityFile ../security/security.xml 
        -serverProps ../security/server.properties -JMXServicePort 11001 -jvmArgs 
        -Djava.security.auth.login.config="../security/og_jaas.config"

      Os arquivos security.xml e server.properties foram criados na página Tutorial de Segurança do Java SE - Etapa 2.

      Use a opção -JMXServicePort para especificar explicitamente a porta JMX para o servidor. Essa opção é necessária para usar o comando xscmd.

      Execute um servidor de contêiner ObjectGrid:

    3. Navegue até o diretório bin novamente: cd objectgridRoot/bin
      • [Linux][Unix]
        startOgServer.sh c0 -objectGridFile ../xml/SecureSimpleApp.xml 
        -deploymentPolicyFile ../xml/SimpleDP.xml -catalogServiceEndPoints 
        localhost:2809 -serverProps ../security/server.properties 
        -JMXServicePort 11002 -jvmArgs 
        -Djava.security.auth.login.config="../security/og_jaas.config" 
        -Djava.security.auth.policy="../security/og_auth.policy"
      • [Windows]
        startOgServer.bat c0 -objectGridFile ../xml/SecureSimpleApp.xml 
        -deploymentPolicyFile ../xml/SimpleDP.xml -catalogServiceEndPoints localhost:2809 
        -serverProps ../security/server.properties -JMXServicePort 11002 
        -jvmArgs -Djava.security.auth.login.config="../security/og_jaas.config" 
        -Djava.security.auth.policy="../security/og_auth.policy"
    Observe as seguintes diferenças do comando para iniciar o servidor de contêiner anterior:
    • Use a propriedade SecureSimpleApp.xml em vez dos arquivos SimpleApp.xml.
    • Incluir outro -Djava.security.auth.policy para configurar o arquivo de políticas de autorização ao processo do servidor de contêiner.

    Execute o seguinte comando para autenticação de cliente:

    1. cd objectgridRoot/bin
    2. javaHome/java -classpath ../lib/objectgrid.jar;../applib/sec_sample.jar 
      com.ibm.websphere.objectgrid.security.sample.guide.SecureSimpleApp 
      ../security/client.properties manager manager1

      Como o usuário "manager" tem permissão para todos os mapas no ObjectGrid de contabilidade, o aplicativo é executado com êxito.

    Também é possível usar o utilitário xscmd para mostrar os tamanhos de mapa da grade "accounting".
    • Navegue até o diretório objectgridRoot/bin
    • Use o comando xscmd para mostrar os tamanhos de mapa:
      • [Unix][Linux]
        xscmd.sh -c showMapsizes -g accounting -m customer -prot SSL
        -ts .\security\trust.jks -tsp ogpass -tst jks 
        -user manager -pwd manager1 -ks ..\security\key.jks -ksp ogpass -kst JKS
        -cxpv IBMJSSE2 -tt SSL-Required
      • [Windows]
        xscmd.bat -c showMapsizes -g accounting -m customer -prot SSL
        -ts ..\security\trust.jks -tsp ogpass -tst jks 
        -user manager -pwd manager1 -ks ..\security\key.jks -ksp ogpass -kst JKS
        -cxpv IBMJSSE2 -tt SSL-Required

      Observe que especificamos a porta JMX do serviço de catálogo usando -p 11001 aqui.

      A seguinte saída será exibida.

      This administrative utility is provided as a sample only and is not to 
      be considered a fully supported component of the WebSphere eXtreme Scale product.
      Connecting to Catalog service at localhost:1099
      *********** Displaying Results for Grid - accounting, MapSet - customer ***********
      *** Listing Maps for c0 ***
      Map Name: customer Partition #: 0 Map Size: 1 Shard Type: Primary
      Server Total: 1
      Total Domain Count: 1

    Executando o aplicativo com um key store incorreto

    Se o seu trust store não contiver o certificado público da chave privada no key store, será obtida uma exceção reclamando que a chave pode não ser confiável.

    Para mostrar isso, crie outro key store, key2.jks.

    keytool -genkey -alias ogsample -keystore key2.jks -storetype JKS -keyalg rsa -dname "CN=ogsample, OU=Your Organizational Unit, O=Your Organization, L=Your City, S=Your State, C=Your Country" -storepass ogpass -keypass ogpass -validity 3650

    Em seguida, modifique o arquivo server.properties para que o keyStore aponte para esse novo armazenamento de chaves key2.jks:

    keyStore=../security/key2.jks

    Execute o seguintes comando para iniciar o servidor de catálogos:

    1. Navegue até o bin: cd objectgridRoot/bin
    2. Inicie o servidor de catálogos:
      [Linux][Unix]
      startOgServer.sh c0 -objectGridFile ../xml/SecureSimpleApp.xml 
      -deploymentPolicyFile ../xml/SimpleDP.xml -catalogServiceEndPoints localhost:2809 
      -serverProps ../security/server.properties -jvmArgs 
      -Djava.security.auth.login.config="../security/og_jaas.config" 
      -Djava.security.auth.policy="../security/og_auth.policy"
      [Windows]
      startOgServer.bat c0 -objectGridFile ../xml/SecureSimpleApp.xml 
      -deploymentPolicyFile ../xml/SimpleDP.xml -catalogServiceEndPoints localhost:2809
       -serverProps ../security/server.properties -jvmArgs 
      -Djava.security.auth.login.config="../security/og_jaas.config" 
      -Djava.security.auth.policy="../security/og_auth.policy"

      A seguinte exceção será exibida:

      Caused by: com.ibm.websphere.objectgrid.ObjectGridRPCException:
          com.ibm.websphere.objectgrid.ObjectGridRuntimeException:
              SSL connection fails and plain socket cannot be used.

      Por fim, altere o arquivo server.properties de volta para usar o arquivo key.jks.