Protegendo thin client JAX-RS usando SSL

É possível proteger as comunicações entre o seu aplicativo e os clientes do Java™ API for RESTful Web Services (JAX-RS) que chamam o aplicativo usando a segurança de camada de transporte Secure Sockets Layer (SSL).

Antes de Iniciar

Esta tarefa assume que você concluiu as seguintes etapas:
  • Você definiu um perfil de célula para um servidor de aplicativos ou para um servidor de aplicativos que está federado a um gerenciador de implementação de rede. Consulte sobre a criação de perfis para saber como criar perfis de célula que contêm um nó de servidor de aplicativos associado e um gerenciador de implementação.
  • Você instalou o seu aplicativo JAX-RS no servidor de aplicativos.

Sobre Esta Tarefa

Os programas clientes JAX-RS podem obter vantagem da segurança de transporte usando o Secure Socket Layer (SSL), para proteger as solicitações e as respostas dos recursos JAX-RS.

Se você configurou o aplicativo JAX-RS para usar um canal SSL para segurança de nível de transporte ao iniciar os recursos REST, será necessário o seu cliente JAX-RS para usar a conexão SSL, para permitir que o cliente interaja com um recurso JAX-RS implementado no ambiente WebSphere Application Server. Por exemplo, se o seu aplicativo JAX-RS está configurado para usar autenticação básica, é uma prática comum usar o SSL para que as credenciais do usuário sejam transportadas sobre conexões seguras.

Para ilustrar esse cenário, suponha que você tenha um servidor de aplicativos em sua célula, e que implementou recursos JAX-RS nesse servidor. Os recursos JAX-RS nesse servidor requerem o uso de SSL. Suponha que você esteja usando o Thin Client para JAX-RS, um cliente independente baseado em Java que é fornecido com este produto, para chamar um desses recursos protegidos que requer o uso de SSL. O Thin Client para JAX-RS permite executar aplicativos clientes de serviços da web JAX-RS RESTful não gerenciados em um ambiente não WebSphere, para chamar serviços da web JAX-RS RESTful que são hospedados pelo servidor de aplicativos.

Figura 1. Protegendo thin client JAX-RS usando SSL
É possível configurar o SSL para aplicativos clientes JAX-RS para ativar o thin client para interagir com os recursos de aplicativos JAX-RS que requerem SSL.
Importante: Se você estiver chamando recursos JAX-RS de um aplicativo em execução em um ambiente do WebSphere Application Server, como quando você está fazendo uma chamada de recebimento de dados, nenhuma configuração adicional para SSL será necessária. Não é necessário configurar conexões SSL para esse recurso porque o tempo de execução e a configuração SSL do servidor de aplicativos são usados.

Use as seguintes etapas para configurar SSL com o Thin Client para JAX-RS.

Procedimento

  1. Ative a segurança para o seu aplicativo JAX-RS e configure-o para usar um canal SSL, para transportar quando chamar recursos REST.

    No desenvolvimento de aplicativo ou no momento da implementação, edite o arquivo web.xml para incluir uma restrição de segurança que requeira o uso de SSL para seus recursos. Consulte Protegendo os aplicativos JAX-RS dentro das informações do contêiner da Web para obter detalhes adicionais sobre a ativação do SSL para o seu aplicativo.

    O seguinte elemento no elemento security-constraint especifica impor o SSL para seu aplicativo:
    <user-data-constraint id="UserDataConstraint_1">
        <transport-guarantee>CONFIDENTIAL</transport-guarantee>
     </user-data-constraint>
  2. Edite o arquivo ssl.client.props e defina a keystore e as propriedades do armazenamento confiável.
    O arquivo ssl.client.props é usado para configurar o SSL para clientes. O seguinte exemplo de código ilustra a definição do keystore e as propriedades do armazenamento confiável:
    # informações do keystore
    com.ibm.ssl.keystoreName=ClientDefaultKeyStore
    com.ibm.ssl.keyStore= path/to/keystore/file 
    com.ibm.ssl.keyStorePassword=xxxxxxx
    com.ibm.ssl.keyStoreType=PKCS12
    com.ibm.ssl.keyStoreProvider=IBMJCE
    com.ibm.ssl.keyStoreFileBased=true
    
    # truststore information
    com.ibm.ssl.trustStoreName=ClientDefaultTrustStore
    com.ibm.ssl.trustStore=path/to/truststore/file
    com.ibm.ssl.trustStorePassword=xxxxxx
    com.ibm.ssl.trustStoreType=PKCS12
    com.ibm.ssl.trustStoreProvider=IBMJCE
    com.ibm.ssl.trustStoreFileBased=true
    com.ibm.ssl.trustStoreReadOnly=false
  3. Ative ou desative a verificação de nome de host.

    A propriedade com.ibm.ssl.performURLHostNameVerification impõe a verificação de nome de host de URL quando o valor está configurado para true. Quando as conexões da URL HTTP são estabelecidas para servidores de destino, o nome comum (CN) do certificado do servidor deve corresponder ao nome do host de destino. Sem uma correspondência, o verificador do nome do host rejeita a conexão. O valor padrão, false, omite essa verificação.

    A propriedade com.ibm.ssl.validationEnabled valida cada configuração de SSL conforme ela é carregada quando o valor está configurado para true. O valor padrão, false, omite essa verificação.

    com.ibm.ssl.performURLHostNameVerification=false
    com.ibm.ssl.validationEnabled=false
  4. Garanta que cada assinante do certificado do servidor esteja no armazenamento confiável do cliente.

    Use a ferramenta IBM® ikeyman ou o utilitário keytool Java para determinar se o certificado já está no truststore. Se o certificado não estiver no armazenamento confiável, importe o certificado para ele.

    Por exemplo, para listar os certificados que estão contidos no armazenamento confiável trust.p12 digite o seguinte comando e certifique-se de incluir o caminho completo para o seu armazenamento confiável:

    keytool -list -v -storetype pkcs12 -keystore trust.p12
  5. Importe o certificado.

    Se o assinante do certificado do servidor não estiver no armazenamento confiável do cliente, ou se o servidor tiver um certificado autoassinado que não está no armazenamento confiável do cliente, importe o certificado.

    Para importar o certificado, é possível usar a ferramentas preferencial do utilitário IBM ikeyman ou Java keytool. Os seguintes exemplos usam o utilitário Java keytool.

    1. Exporte o certificado do assinante para o seu servidor para um arquivo.

      Por exemplo, use o seguinte comando para exportar um certificado de assinante de um armazenamento confiável existente, servertrust.p12, na entrada que corresponde ao nome alternativo default_signer no arquivo mycert.cer:

      keytool -export -storetype pkcs12 -alias default_signer -file mycert.cer -keystore servertrust.p12
    2. Importe o certificado de assinante no armazenamento confiável usado pelo seu Thin Client para JAX-RS.

      Por exemplo, use o seguinte comando para exportar um certificado de assinante de um armazenamento confiável existente, servertrust.p12, na entrada que corresponde ao nome alternativo default_signer no arquivo mycert.cer:

      keytool -export -storetype pkcs12 -alias default_signer -file mycert.cer -keystore servertrust.p12
  6. Configure o SSL com Thin Client for JAX-RS 2.0.

    Para chamar uma URL criptografada, prossiga com as etapas a seguir:

    1. Para ativar o SSL cliente ao desenvolver seu aplicativo thin client, inclua a propriedade do cliente em seu código do aplicativo thin client.

      Configure a chave da propriedade do cliente para com.ibm.ws.jaxrs.client.ssl.config e seu valor para o alias SSL do servidor. Veja o fragmento de código a seguir como referência:

      ClientBuilder cb = ClientBuilder.newBuilder();
      cb.property("com.ibm.ws.jaxrs.client.ssl.config", "NodeDefaultSSLSettings");
      Dica: O valor da propriedade é igual ao alias SSL do servidor que você configurou. Para obter mais informações, acesse Servidores de aplicativos->servidor n, em que n é o número que você designou ao servidor de aplicativos.->Canais de transporte do contêiner da web->WCInboundDefaultSecure->Canal de entrada SSL (SSL_2) para verificá-lo sob o campo de configuração de SSL.
    2. Para chamar uma URL criptografada, a partir da linha de comandos, execute o exemplo de código a seguir:
      [HP-UX][Linux][Solaris]
      java -Dcom.ibm.SSL.ConfigURL=file:///$WAS_HOME/AppServer/profiles/AppSrv01/properties/ssl.client.props -cp .:$WAS_HOME/AppServer/runtimes/com.ibm.jaxrs2.0.thinclient_$VERSION.jar:$WAS_HOME/AppServer/runtimes/com.ibm.jaxws.thinclient_$VERSION.jar:$WAS_HOME/AppServer/com.ibm.ws.admin.client_$VERSION.jar:$WAS_HOME/AppServer/plugins/com.ibm.ws.security.crypto.jar your_package.SSLThinClientProgram <An encrypted URL>
      [Windows]
      java -Dcom.ibm.SSL.ConfigURL=file:///$WAS_HOME/AppServer/profiles/AppSrv01/properties/ssl.client.props -cp .;$WAS_HOME/AppServer/runtimes/com.ibm.jaxrs2.0.thinclient_$VERSION.jar;$WAS_HOME/AppServer/runtimes/com.ibm.jaxws.thinclient_$VERSION.jar your_package.SSLThinClientProgram <An encrypted URL>

Resultados

Você definiu uma conexão segura entre o cliente e o servidor de destino usando o SSL para ativar a integridade e confidencialidade da comunicação entre o aplicativo JAX-RS e seu thin client.

Exemplo

O seguinte fragmento der código demonstra um arquivo ssl.client.props de 6amostra:
# informações do keystore
com.ibm.ssl.keyStoreName=ClientDefaultKeyStore
com.ibm.ssl.keyStore=c:/jaxrs/test/config/keystore.p12 
com.ibm.ssl.keyStorePassword=testpasswd
com.ibm.ssl.keyStoreType=PKCS12
com.ibm.ssl.keyStoreProvider=IBMJCE
com.ibm.ssl.keyStoreFileBased=true

# truststore information
com.ibm.ssl.trustStoreName=ClientDefaultTrustStore
com.ibm.ssl.trustStore= c:/jaxrs/test/config/truststore.p12
com.ibm.ssl.trustStorePassword=testpasswd
com.ibm.ssl.trustStoreType=PKCS12
com.ibm.ssl.trustStoreProvider=IBMJCE
com.ibm.ssl.trustStoreFileBased=true
com.ibm.ssl.trustStoreReadOnly=false

# Informações da verificação do nome de host
com.ibm.ssl.performURLHostNameVerification=false
com.ibm.ssl.validationEnabled=false

Ícone que indica o tipo de tópico Tópico de Tarefa



Ícone de registro de data e hora Última atualização: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=twbs_jaxrs_impl_securejaxrs2
Nome do arquivo: twbs_jaxrs_impl_securejaxrs2.0_thinclientssl.html