Decriptografando Mensagens SOAP Utilizando a API WSSDecryption

É possível proteger as mensagens SOAP, sem usar os conjuntos de política para configuração, utilizando as WSS APIs (Web Services Security APIs). Para configurar o cliente para decriptografia no consumidor de resposta (cliente), utilize a API WSSDecryption para decriptografar as mensagens SOAP. A API WSSDecryption especifica quais partes da mensagem SOAP do pedido serão decriptografadas ao configurar o cliente.

Antes de Iniciar

É possível usar a API WSS ou os conjuntos de políticas no console administrativo para ativar a decriptografia e incluir tokens de segurança de consumidor na mensagem SOAP. Para oferecer segurança às mensagens SOAP, você deve ter concluído as seguintes tarefas de descrição:

  • Criptografado a mensagem SOAP.
  • Escolhido o método de decriptografia.

Sobre Esta Tarefa

As informações de decriptografia no consumidor são usadas para decriptografar uma mensagem SOAP recebida para ligações do consumidor de resposta (cliente). A configuração do consumidor cliente deve corresponder à configuração do gerador fornecedor.

As configurações de sigilo necessitam que as restrições de sigilo sejam aplicadas às mensagens geradas.

As seguintes partes da decriptografia podem ser configuradas:

Tabela 1. Partes da Decriptografia. Utilize as partes de decriptografia para proteger mensagens.
Partes da Decriptografia Description
part Inclui o objeto WSSDecryptPart como um destino da decriptografia.
keyword Inclui a parte da decriptografia usando palavras-chave. O WebSphere Application Server suporta as seguintes palavras-chave:
  • BODY_CONTENT
  • SIGNATURE
  • USERNAME_TOKEN
xpath Inclui a parte da decriptografia usando uma expressão XPath.
verificação Inclui a instância WSSVerification como um destino da parte da decriptografia.
header Inclui o cabeçalho SOAP, especificado por QName, como um destino da parte da decriptografia.

Na decriptografia, determinados comportamentos padrão ocorrem. A forma mais simples de usar a API WSS para a decriptografia é usar o comportamento padrão (veja o código de exemplo). WSSDecryption fornece padrões para o algoritmo de criptografia de chaves, o algoritmo de criptografia de dados e partes da decriptografia, como o conteúdo do corpo e a assinatura de SOAP. Os comportamentos padrão da decriptografia incluem:

Tabela 2. Decisões de Decriptografia. Várias características das partes de decriptografia são configuradas por padrão.
Decisões de Decriptografia Comportamento Padrão
Quais partes decriptografar

As partes padrão da decriptografia são BODY_CONTENT e SIGNATURE. O WebSphere Application Server suporta o uso destas palavras-chave:

  • WSSDecryption.BODY_CONTENT
  • WSSDecryption.SIGNATURE
  • WSSDecryption.USERNAME_TOKEN

Depois de especificar quais partes da mensagem decriptografar, você deve especificar qual método utilizar para decriptografar a mensagem do pedido do consumidor. Por exemplo, se a assinatura e o conteúdo do corpo forem aplicados para a criptografia, as partes da mensagem SOAP decriptografadas incluirão as mesmas partes.

Criptografar ou não a chave (isEncrypt) O valor padrão é criptografar a chave (true).
Qual algoritmo de decriptografia de dados escolher (method)

O método do algoritmo de decriptografia de dados é AES128. O WebSphere Application Server suporta estes métodos de criptografia de dados:

  • WSSDecryption.AES128: http://www.w3.org/2001/04/xmlenc#aes128-cbc
  • WSSDecryption.AES192: http://www.w3.org/2001/04/xmlenc#aes192-cbc
  • WSSDecryption.AES256: http://www.w3.org/2001/04/xmlenc#aes256-cbc
  • WSSDecryption.TRIPLE_DES: http://www.w3.org/2001/04/xmlenc#tripledes-cbc
Qual método de decriptografia de chaves escolher (algorithm)

O método de algoritmo de decriptografia de chaves padrão é o agrupamento de chaves RSA OAEP. O WebSphere Application Server suporta estes métodos de criptografia de chaves:

  • WSSDecryption.KW_AES128: http://www.w3.org/2001/04/xmlenc#kw-aes128
  • WSSDecryption.KW_AES192: http://www.w3.org/2001/04/xmlenc#kw-aes192
  • WSSDecryption.KW_AES256: http://www.w3.org/2001/04/xmlenc#kw-aes256
  • WSSDecryption.KW_RSA_OAEP: http://www.w3.org/2001/04/xmlenc#rsa-oaep-mgf1p
  • WSSDecryption.KW_RSA15: http://www.w3.org/2001/04/xmlenc#rsa-1_5
  • WSSDecryption.KW_TRIPLE_DES: http://www.w3.org/2001/04/xmlenc#kw-tripledes
Qual token de segurança especificar

O tipo de token de segurança padrão é o token X509. O WebSphere Application Server fornece os seguintes tipos de token de consumidor pré-configurados:

  • Token de chave derivado
  • Tokens X509

Procedimento

  1. Para decriptografar a mensagem SOAP utilizando a API WSSDecryption, primeiro assegure-se de que o servidor de aplicativos esteja instalado.
  2. O processo da API WSS para decriptografia desempenha estas etapas:
    1. Usa WSSFactory.getInstance() para obter a instância de implementação da API WSS.
    2. Cria a instância do WSSConsumingContext a partir da instância do WSSFactory. WSSConsumingContext deve sempre ser chamado em um aplicativo cliente JAX-WS.
    3. Cria um manipulador de retorno de chamada para o consumidor.
    4. Cria WSSDecryption com a classe para o token de segurança e o manipulador de retorno de chamada a partir da instância WSSFactory. O comportamento padrão de WSSDecryption é assumir que a assinatura e o conteúdo do corpo sejam criptografados.
    5. Inclui as partes que serão decriptografadas, se o padrão não for adequado.
    6. Inclui os candidatos dos métodos de criptografia de dados para usar para a decriptografia.
    7. Inclui os candidatos dos métodos de criptografia de chaves para usar para a decriptografia.
    8. Inclui os candidatos dos tokens de segurança para usar para a decriptografia.
    9. Chama WSSDecryption.encryptKey(false), se o aplicativo não quiser que a chave seja criptografada na mensagem recebida.
    10. Inclui WSSDecryption em WSSConsumingContext.
    11. Chama WSSConsumingContext.process() com SOAPMessageContext

Resultados

Se houver uma condição de erro durante a decriptografia, WSSException será fornecida. Em caso de êxito, WSSConsumingContext.process() será chamado e a segurança dos serviços da Web será aplicada à mensagem SOAP.

Exemplo

O exemplo a seguir fornece o código de amostra para a decriptografia do conteúdo do corpo da mensagem SOAP:

// Obter o contexto da mensagem
   Object msgcontext = getMessageContext();

// Gerar a instância do WSSFactory (etapa: a)
   WSSFactory factory = WSSFactory.getInstance();

// Gerar a instância do WSSConsumingContext (etapa: b)
   WSSConsumingContext gencont = factory.newWSSConsumingContext();

// Gerar o manipulador de retorno de chamada (etapa: c)
   X509ConsumeCallbackHandler callbackHandler = new 
       X509ConsumeCallbackHandler(
                                  "",
                                  "enc-sender.jceks",
                                  "jceks", 
                                  "storepass".toCharArray(), 
                                  "alice", 
                                  "keypass".toCharArray(), 
	"CN=Alice, O=IBM, C=US");

// Gerar a instância do WSSDecryption (etapa: d)
   WSSDecryption dec = factory.newWSSDecryption(X509Token.class, 
                                                callbackHandler);

// Configurar a parte a ser criptografada (etapa: e)
// PADRÃO: WSSEncryption.BODY_CONTENT e WSSEncryption.SIGNATURE

// Configurar a parte a ser criptografada (etapa: e)
// PADRÃO: WSSEncryption.BODY_CONTENT e WSSEncryption.SIGNATURE

// Configurar a parte especificada pela palavra-chave (etapa: e)
      dec.addRequiredDecryptPart(WSSDecryption.BODY_CONTENT);

// Configurar a parte no cabeçalho de SOAP especificado por QName (etapa: e)
    dec.addRequiredDecryptHeader(new 
       QName("http://www.w3.org/2005/08/addressing", 
       "MessageID"));

// Configurar a parte especificada por WSSVerification  (etapa: e)
   X509ConsumeCallbackHandler verifyCallbackHandler = 
      getCallbackHandler();
   WSSVerification ver = factory.newWSSVerification(X509Token.class, 
                                                    verifyCallbackHandler);
      dec.addRequiredDecryptPart(ver);

// Configurar a parte especificada pela expressão XPath (etapa: e)
      StringBuffer sb = new StringBuffer();
         sb.append("/*[namespace-uri()='http://schemas.xmlsoap.org/soap/envelope/' 
            e local-name()='Envelope']");
         sb.append("/*[namespace-uri()='http://schemas.xmlsoap.org/soap/envelope/' 
            e local-name()='Body']");
         sb.append("/*[namespace-uri()='http://xmlsoap.org/Ping' 
            e local-name()='Ping']");
         sb.append("/*[namespace-uri()='http://xmlsoap.org/Ping' 
            e local-name()='Text']");
      dec.addRequiredDecryptPartByXPath(sb.toString());

// Configurar a parte no cabeçalho de SOAP a ser decriptografada, especificada por QName (etapa: e)
      dec.addRequiredDecryptHeader(new 
          QName("http://www.w3.org/2005/08/addressing", 
          "MessageID"));

// Configurar os candidatos para o método de criptografia de dados (etapa: f)
// DEFAULT : WSSDecryption.AES128
      dec.addAllowedEncryptionMethod(WSSDecryption.AES128);
      dec.addAllowedEncryptionMethod(WSSDecryption.AES192);

// Configurar os candidatos para o método de criptografia de chaves (etapa: g)
// DEFAULT : WSSDecryption.KW_RSA_OAEP
      dec.addAllowedKeyEncryptionMethod(WSSDecryption.KW_TRIPLE_DES);

// Configurar o token de segurança do candidato a ser usado para a decriptografia (etapa: h)
   X509ConsumeCallbackHandler callbackHandler2 = getCallbackHandler2();
      dec.addToken(X509Token.class, callbackHandler2);

// Configurar se a chave deve ou não ser criptografada na mensagem SOAP recebida (etapa: i) 
// PADRÃO: true
      dec.encryptKey(true);

// Incluir WSSDecryption em WSSConsumingContext (etapa: j)
   concont.add(dec);

// Validar o cabeçalho de WS-Security (etapa: k)
concont.process(msgcontext);

O que Fazer Depois

A seguir, use a API WSSDecryptPart ou configure os conjuntos de políticas usando o console administrativo para incluir partes decriptografadas para a mensagem do consumidor.


Í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_confwssdecryption
Nome do arquivo: twbs_confwssdecryption.html