Configurando Métodos de Verificação de Assinatura de Resposta para o Cliente

Utilize as APIs WSSVerification e WSSVerifyPart para escolher os métodos de verificação de assinatura. Os métodos de verificação de assinatura de pedido incluem o algoritmo de compilação e os métodos de transporte.

Antes de Iniciar

Para concluir a configuração das informações de verificação de assinatura para proteger as mensagens SOAP, é necessário executar as seguintes tarefas de algoritmo:
  • Utilize a API WSSVerification para configurar os métodos de assinatura e de canonicalização.
  • Utilize a API WSSVerifyPart para configurar os métodos de compilação e transformação.
Para configurar os métodos de algoritmo a serem utilizados ao configurar o cliente para assinatura de pedido.

Sobre Esta Tarefa

A tabela a seguir descreve a finalidade dessas informações. Algumas dessas definições são baseadas na especificação de assinatura XML, que está localizada no seguinte website http://www.w3.org/TR/xmldsig-core.

Tabela 1. Assinando Métodos de Verificação. Utilize informações de verificação de assinatura para proteger mensagens.
Nome do Método Finalidade
Algoritmo de Compilação Aplica-se aos dados depois das transformações serem aplicadas, se especificado, para liberar o elemento <DigestValue>. A assinatura do elemento <DigestValue> liga o conteúdo do recurso à chave do assinante. O algoritmo selecionado para a configuração do emissor do pedido do cliente deve corresponder ao algoritmo selecionado na configuração do receptor do pedido do cliente.
Algoritmo de Transformação Aplica-se ao elemento <Transform>.
Algoritmo de assinatura Especifica os URIs (Uniform Resource Identifiers) do método de verificação de assinatura.
Algoritmo de Canonicalização Especifica os URIs (Uniform Resource Identifiers) do método de canonicalização.

Depois de configurar o cliente para assinar a mensagem digitalmente, você deve configurar o cliente para verificar a assinatura digital. É possível utilizar as WSS APIs ou configurar os conjuntos de política utilizando o console administrativo para verificar a assinatura digital e escolher a verificação e verificar os algoritmos de parte. Se estiver utilizando as WSS APIs para configuração, utilize as APIs WSSVerification e WSSVerifyPart para especificar quais partes da mensagem digitalmente assinadas verificar e para especificar quais métodos de algoritmo utilizar ao configurar o cliente para assinatura do pedido.

As APIs WSSVerification e WSSVerifyPart executam as seguintes etapas para configurar a verificação de assinatura e verificar os métodos do algoritmo de partes:

Procedimento

  1. Para a ligação do consumidor, a API WSSVerification especifica os métodos de assinatura para permitir a verificação de assinatura. O WebSphere Application Server suporta os seguintes métodos de assinatura pré-configurados:
    • WSSVerification.RSA_SHA1 (valor padrão): http://www.w3.org/2000/09/xmldsig#rsa-sha1
    • WSSVerification.HMAC_SHA1: http://www.w3.org/2000/09/xmldsig#hmac-sha1
    O método de assinatura digital DSA-SHA1 (http://www.w3.org/2000/09/xmldsig#dsa-sha1) não é suportado.
  2. Para a ligação do consumidor, a API WSSVerification especifica o método de canonicalização para permitir a verificação de assinatura. O WebSphere Application Server suporta os seguintes métodos de canonicalização pré-configurados por padrão:
    • WSSVerification.EXC_C14N (valor padrão): http://www.w3.org/2001/10/xml-exc-c14n#
    • WSSVerification.C14N: http://www.w3.org/2001/10/xml-c14n#
  3. Para a ligação do consumidor, a API WSSVerifyPart especifica o método de compilação, conforme necessário. O WebSphere Application Server suporta os seguintes algoritmos do método de compilação para verificação de partes assinadas:
    • WSSVerifyPart.SHA1 (valor padrão): 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
  4. Para ligação do consumidor, a API WSSVerifyPart especifica o método de transformação. O WebSphere Application Server suporta os seguintes algoritmos de transformação para verificação de partes:
    • 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
    • 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

    Para as APIs do WSS, o WebSphere Application Server não suporta estes algoritmos:

    • http://www.w3.org/2002/07/decrypt#XML
    • http://www.w3.org/TR/1999/REC-xpath-19991116

Resultados

Você especificou qual método utilizar ao verificar uma assinatura digital quando o cliente envia uma mensagem.

Exemplo

O seguinte exemplo fornece o código de amostra WSS API que especifica as informações de verificação, o corpo como uma parte a ser verificada, o HMAC_SHA1 como um método de assinatura, C14N e EXC_C14N como os candidatos dos métodos de canonicalização, TRANSFORM_STRT10 como um método de transformação e SHA256 como um método de compilação.

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

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

// Gerar a instância do WSSConsumingContext
   WSSConsumingContext concont = factory.newWSSConsumingContext();

// Gerar a lista de certificado
   String certpath = "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 o 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 o manipulador de retorno de chamada
   X509ConsumeCallbackHandler callbackHandler = new 
      X509ConsumeCallbackHandler(
                                 "dsig-receiver.ks", 
                                 "jks",
                                 "server".toCharArray(), 
                                 certList, 
                                 java.security.Security.getProvider(
                                       "IBMCertPath")
                                 );

// Gerar a instância do WSSVerification
   WSSVerification ver = factory.newWSSVerification(X509Token.class, 
                                                    callbackHandler);

// Configurar um ou mais candidatos do método de assinatura utilizado para 
//    verificação (etapa. 1)
// DEFAULT : WSSVerification.RSA_SHA1
      ver.addAllowedSignatureMethod(WSSVerification.HMAC_SHA1);

// Configurar um ou mais candidatos do método de canonicalização utilizado para 
//    verificação (etapa. 2)
// DEFAULT : WSSVerification.EXC_C14N 
      ver.addAllowedCanonicalizationMethod(WSSVerification.C14N);
      ver.addAllowedCanonicalizationMethod(WSSVerification.EXC_C14N);

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

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

// Configurar os candidatos dos métodos de compilação a serem utilizados para verificação (etapa. 3)
// DEFAULT : WSSVerifypart.TRANSFORM_EXC_C14N : String
      verPart.addAllowedTransform(WSSVerifyPart.TRANSFORM_STRT10);

// Configurar os candidatos dos métodos de compilação a serem utilizados para verificação (etapa. 4)
// DEFAULT : WSSVerifyPart.SHA1
      verPart.addAllowedDigestMethod(WSSVerifyPart.SHA256);

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

// Incluir o WSSVerification no WSSConsumingContext
   concont.add(ver);

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

O que Fazer Depois

Você concluiu a configuração dos algoritmos de verificação de assinatura. Em seguida, configure os algoritmos de criptografia ou decriptografia, se ainda não estiverem configurados. Ou, configure as informações do token de segurança, conforme necessário.


Í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_confwssverifyalgorithms
Nome do arquivo: twbs_confwssverifyalgorithms.html