Verificando Partes Assinadas Utilizando a API WSSVerifyPart

Para proteger as mensagens SOAP no lado do consumidor, utilize as WSS APIs (Web Services Security APIs) para configurar as informações das partes de verificação para a ligação do consumidor no consumidor de resposta (lado do cliente). É possível especificar quais métodos de algoritmo e quais partes da mensagem SOAP devem ser verificadas. Utilize a API WSSVerifyPart para alterar o método de compilação ou o método de transformação. A API WSSVerifyPart é parte do pacote com.ibm.websphere.wssecurity.wssapi.verification.

Antes de Iniciar

Para proteger as mensagens SOAP utilizando as informações de verificação de assinatura, é necessário concluir uma das seguintes tarefas:

  • Configure as informações de verificação de assinatura utilizando a API WSSVerification.
  • Configure as partes de verificação utilizando a API WSSVerifyPart, conforme necessário.
A WSSVerifyPart é utilizada para especificar os métodos de transformação ou de compilação para a verificação. Utilize a API WSSVerifyPart ou configure os conjuntos de política utilizando o console administrativo.

Sobre Esta Tarefa

O WebSphere Application Server utiliza as informações sobre assinatura do consumidor padrão para verificar as partes assinadas da mensagem. A API WSSVerifyPart é suportada apenas no consumidor de resposta (solicitante).

A tabela a seguir mostra as partes de verificação necessárias quando as restrições de segurança de assinatura digital (integridade) forem definidas:

Tabela 1. Informações das Partes de Verificação. Utilize as partes verificadas para proteger mensagens com informações de verificação de assinatura.
Informações das Partes de Verificação Description
keyword Configure as partes de verificação utilizando as seguintes palavras-chave:
  • BODY
  • ADDRESSING_HEADERS
  • TIMESTAMP

Os cabeçalhos WS-Addressing não são decriptografados, mas podem ser assinados e verificados.

xpath Configure as partes de verificação utilizando uma expressão XPath.
header Configura o cabeçalho, especificado por QName, como uma parte de verificação.

Para verificação de assinatura, ocorrem determinados comportamentos padrão. A maneira mais simples de utilizar a API WSSVerification é utilizar o comportamento padrão (consulte o código de exemplo). Os valores padrão são definidos pela WSS API para o algoritmo de assinatura e o algoritmo de canonicalização e as partes de verificação.

Tabela 2. Comportamentos Padrão das Partes de Verificação. Várias características das partes de verificação são configuradas por padrão.
Decisões das Partes de Verificação Comportamento Padrão
Quais Palavras-chave Especificar

As diferentes partes da mensagem SOAP a serem assinadas e utilizadas para proteção de mensagens. O WebSphere Application Server suporta as seguintes palavras-chave:

  • WSSVerification.BODY
  • WSSVerification.ADDRESSING_HEADERS
  • WSSVerification.TIMESTAMP
Qual Método de Transformação Utilizar (Algoritmo) Inclui o método de transformação. O algoritmo de transformação é especificado no elemento <Transform> e especifica o algoritmo de transformação para a assinatura. O método de transformação padrão é TRANSFORM_EXC_C14N.

O WebSphere Application Server suporta os seguintes algoritmos de transformação pré-configurados:

  • WSSVerifyPart.TRANSFORM_EXC_C14N (o valor padrão): http://www.w3.org/2001/10/xml-exc-c14n#
  • WSSVerifyPart.TRANSFORM_XPATH2_FILTER: http://www.w3.org/2002/06/xmldsig-filter2

    Use esse método de transformação para garantir a conformidade com o BSP (Basic Security Profile).

  • WSSVerifyPart.TRANSFORM_STRT10: http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#STR-Transform
  • WSSVerifyPart.TRANSFORM_ENVELOPED_SIGNATURE: http://www.w3.org/2000/09/xmldsig#enveloped-signature
Qual Método de Compilação Utilizar (Algoritmo) Configura o método de algoritmo de compilação. O algoritmo do método de compilação especificado no elemento <DigestMethod> é utilizado no elemento <SigningInfo>. O método de compilação padrão é SHA1.
O WebSphere Application Server suporta os seguintes algoritmos do método de compilação:
  • WSSVerifyPart.SHA1: http://www.w3.org/2000/09/xmldsig#sha1
  • WSSVerifyPart.SHA256: http://www.w3.org/2001/04/xmlenc#sha256
  • WSSVerifyPart.SHA512: http://www.w3.org/2001/04/xmlenc#sha512

Procedimento

  1. Para verificar as partes assinadas utilizando a API WSSVerifyPart, primeiro assegure-se de que o servidor de aplicativos esteja instalado.
  2. Utilize a API do Web Services Security para verificar a verificação em uma mensagem SOAP. O processo WSS API para verificar a assinatura segue estas etapas do processo:
    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. Assegura que o WSSConsumingContext seja chamado na classe de implementação do Provedor JAX-WS. Devido à natureza do modelo de programação JAX-WS, um provedor JAX-WS precisa ser implementado e deve chamar o WSSConsumingContext para verificar a assinatura da mensagem SOAP.
    3. Cria o CallbackHandler a ser utilizado para verificação.
    4. Cria o objeto WSSVerification a partir da instância do WSSFactory.
    5. Cria WSSVerifyPart a partir da instância do WSSFactory.
    6. Configura a parte a ser verificada, se o padrão não for apropriado.
    7. Configura os candidatos para o método de compilação, se o padrão não for apropriado.
    8. Configura os candidatos para o método de transformação, se o padrão não for apropriado.
    9. Inclui WSSVerifyPart no WSSVerification.
    10. Inclui WSSVerification no WSSConsumingContext.
    11. Chama WSSConsumingContext.process() com o SOAPMessageContext.

Resultados

Você concluiu as etapas para verificar as partes assinadas no lado do consumidor. Se ocorrer uma condição de erro ao verificar as informações sobre assinatura, será fornecida uma WSSException. Se bem-sucedido, o WSSConsumingContext.process() será chamado e o Web Services Security será verificado para a mensagem SOAP.

Exemplo

O exemplo a seguir fornece o código de amostra para o processo da API WSSVerification para verificar as informações sobre assinatura em uma 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 concont = factory.newWSSConsumingContext();

// Gerar a lista de certificado
   String certpath = 
   "c:/WebSphere/AppServer/etc/ws-security/samples/intca2.cer";
// O local do arquivo de certificado X509
   X509Certificate x509cert = null;
      try {
          InputStream is = new FileInputStream(certpath);
          CertificateFactory cf = CertificateFactory.getInstance("X.509");
          x509cert = (X509Certificate)cf.generateCertificate(is);
      } catch(FileNotFoundException e1){
            throw new WSSException(e1);
      } catch (CertificateException e2) {
            throw new WSSException(e2);
      }

      Set<Object> eeCerts = new HashSet<Object>();
      eeCerts.add(x509cert);  
// criar certStore
      java.util.List<CertStore> certList = new 
          java.util.ArrayList<CertStore>();
      CollectionCertStoreParameters certparam = new 
          CollectionCertStoreParameters(eeCerts);
      CertStore cert = null;
      try {
	        cert = CertStore.getInstance("Collection", 
              certparam, "IBMCertPath");
      } catch (NoSuchProviderException e1) {
           throw new WSSException(e1);
      } catch (InvalidAlgorithmParameterException e2) {
           throw new WSSException(e2);
      } catch (NoSuchAlgorithmException e3) {
           throw new WSSException (e3);
      }
      if(certList != null ){
      certList.add(cert);
      }

// gerar manipulador de retorno de chamada (etapa: c)  
   X509ConsumeCallbackHandler callbackHandler = new 
       X509ConsumeCallbackHandler(
                                  "dsig-receiver.ks", 
                                  "jks",
                                  "server".toCharArray(), 
                                  certList, 
       java.security.Security.getProvider("IBMCertPath")
);

// Gerar a instância de WSSVerification (etapa: d)
   WSSVerification ver = factory.newWSSVerification(X509Token.class, 
       callbackHandler);

// Configurar a parte a ser especificada pelo WSSVerifyPart (etapa: e)
   WSSVerifyPart verPart = factory.newWSSVerifyPart();

// Configurar a parte a ser especificada pela palavra-chave (etapa: f)
   verPart.setRequiredVerifyPart(WSSVerification.BODY);

// Configurar os candidatos para o método de compilação para verificação (etapa: g)
// DEFAULT : WSSVerifyPart.SHA1
   verPart.addAllowedDigestMethod(WSSVerifyPart.SHA256);

// Configurar os candidatos para o método de transformação para verificação (etapa: h)
// DEFAULT : WSSVerifypart.TRANSFORM_EXC_C14N : String
   verPart.addAllowedTransform(WSSVerifyPart.TRANSFORM_STRT10);

// Configurar WSSVerifyPart para WSSVerification (etapa: i)
   ver.addRequiredVerifyPart(verPart);

// Incluir WSSVerification em WSSConsumingContext (etapa: j)
   concont.add(ver);

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

O que Fazer Depois

Você concluiu a configuração da parte assinada a ser verificada.

Í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_confsignaturepartcon
Nome do arquivo: twbs_confsignaturepartcon.html