É 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 for configurado para usar autenticação básica, é uma prática comum para usar o SSL, de forma 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 clientes JAX-RS usando SSL
Importante: Se você estiver chamando recursos JAX-RS de dentro 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.jaxrs1.1.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.jaxrs1.1.thinclient_$VERSION.jar;$WAS_HOME/AppServer/runtimes/com.ibm.jaxws.thinclient_$VERSION.jar;$WAS_HOME/AppServer/runtimes/com.ibm.ws.security.crypto.jar;$WAS_HOME/AppServer/plugins/com.ibm.ws.security.crypto.jar your_package.SSLThinClientProgram <An encrypted URL>