É 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).
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
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.
- 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>
- 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
- 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
- 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
- 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.
- 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
- 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
- Configure o SSL com Thin Client for JAX-RS 2.0.
Para chamar uma URL criptografada, prossiga com as etapas a seguir:
- 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.
- Para chamar uma URL criptografada, a partir da linha de comandos, execute o exemplo de código a seguir:
![[HP-UX]](../images/hpux.gif)
![[Linux]](../images/linux.gif)
![[Solaris]](../images/solaris.gif)
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]](../images/windows.gif)
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>