Configurando Informações sobre Assinatura Utilizando a API WSSSignature
É 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 as informações sobre assinatura para as seções de ligação de gerador para o pedido do lado do cliente, utilize a API WSSSignature. A API WSSSignature faz parte do pacote com.ibm.websphere.wssecurity.wssapi.signature.
Antes de Iniciar
Você pode usar a API WSS ou configurar os conjuntos de política usando o console administrativo para ativar as informações de assinatura. Para proteger mensagens SOAP, você deve concluir as seguintes tarefas de assinatura:
- Configure as informações sobre assinatura.
- Escolha os métodos de assinatura.
- Inclua ou altere partes assinadas, conforme necessário.
Sobre Esta Tarefa
O WebSphere Application Server utiliza as informações sobre assinatura para o gerador padrão para assinar partes da mensagem e utiliza a assinatura digital XML com os algoritmos existentes, como RSA-SHA1 e HMAC-SHA1.
A assinatura XML define muitos métodos para descrever informações-chave e permite a definição de um novo método. A canonicalização XML (C14N) geralmente é necessária ao usar a assinatura XML. As informações podem ser representadas de várias maneiras dentro de documentos XML serializados. O processo C14N é usado para efetuar canonicalização de informações XML. Selecione um algoritmo de C14N apropriado porque as informações que são convertidas para a forma canônica dependem desse algoritmo.
As informações de assinatura especificam as restrições de integridade que são aplicadas às mensagens geradas. As restrições incluem a especificação de quais partes da mensagem gerada devem ser assinadas digitalmente e as partes da mensagem nas quais devem ser anexados os elementos Nonce e de registro de data e hora assinados. As seguintes informações de partes de assinatura relacionada e assinatura são configuradas:
Partes da Assinatura | Description |
---|---|
keyword | Inclui a parte da assinatura usando palavras-chave. Use as seguintes palavras-chave para as partes da assinatura:
|
xpath | Inclui uma parte da assinatura usando uma expressão XPath. |
part | Inclui um objeto WSSSignPart como um destino da parte da assinatura. |
timestamp | Inclui um objeto WSSTimestamp como um destino da parte da assinatura. Quando especificadas, as informações do registro de data e hora também especificarão quando a mensagem será gerada e expirada. |
header | Inclui o cabeçalho, especificado por QName, como um destino da parte da assinatura. |
securityToken | Inclui um objeto SecurityToken como um destino da parte da assinatura. |
Para informações de assinatura, determinados comportamentos padrão ocorrem. A forma mais simples de usar a API WSSSignature é usar o comportamento padrão (veja o código de exemplo). Os valores padrão são definidos pela API WSS para o método de assinatura, o método de canonicalização, as referência do token de segurança e as partes da assinatura.
Decisões de Assinatura | Comportamento Padrão |
---|---|
Quais palavras-chave usar | Configura as palavras-chave. O WebSphere Application Server suporta as seguintes palavras-chave por padrão:
|
Qual método de assinatura usar | Configura o algoritmo de assinatura. O método de assinatura padrão é RSA SHA1. O WebSphere Application
Server suporta os seguintes métodos de assinatura pré-configurados:
|
Qual método de canonicalização usar | Configura o algoritmo de canonicalização. O método de canonicalização padrão é EXC C14N. O WebSphere Application Server suporta os seguintes métodos de canonicalização pré-configurados:
|
A confirmação de assinatura é ou não solicitada | Configura se a confirmação de assinatura será ou não solicitada. O valor padrão é false. A confirmação de assinatura é definida na especificação do OASIS Web Services Security Versão 1.1. Se requerido, o valor de confirmação da sua assinatura será armazenado para validar a confirmação de assinatura depois de receber novamente a mensagem que gerou a confirmação de assinatura na mensagem de resposta. Este método destina-se ao solicitante. |
Qual token de segurança usar | Configura SecurityToken. O tipo de token especifica qual tipo de token usar para assinar e validar mensagens. O token X.509 é o tipo de token padrão. O WebSphere Application Server fornece os seguintes tipos de token de consumidor pré-configurados:
Também é possível criar tipos de token customizados, conforme necessário. |
Qual referência de token configurar | Configura refType. SecurityToken.REF_STR é o valor padrão para o tipo de referência de token. O WebSphere Application Server suporta estes tipos de referências de token pré-configuradas:
|
Se WSSSignature.requireSignatureConfirmation() for chamado, a API WSSSignature esperará que a mensagem de resposta inclua a confirmação de assinatura.
Procedimento
Resultados
Exemplo
O seguinte exemplo fornece o código de amostra que usa métodos que são definidos na API WSSignature.
// Obter o contexto da mensagem
Object msgcontext = getMessageContext();
// Generate the com.ibm.websphere.wssecurity.wssapi.WSSFactory instance (step: a)
WSSFactory factory = com.ibm.websphere.wssecurity.wssapi.WSSFactory.getInstance();
// Gerar a instância WSSGenerationContext (etapa: b)
WSSGenerationContext gencont = factory.newWSSGenerationContext();
// Gerar o manipulador de retorno de chamada
X509GenerateCallbackHandler callbackHandler = new
X509GenerateCallbackHandler(
"",
"dsig-sender.ks",
"jks",
"client".toCharArray(),
"soaprequester",
"client".toCharArray(),
"CN=SOAPRequester, OU=TRL, O=IBM, ST=Kanagawa, C=JP", null);
// Gerar o token de segurança a ser usado para a assinatura (etapa: c)
SecurityToken token = factory.newSecurityToken(X509Token.class,
callbackHandler);
// Gerar a instância WSSSignature (etapa: d)
WSSSignature sig = factory.newWSSSignature(token);
// Configurar a parte a ser assinada (etapa: e)
// PADRÃO: WSSSignature.BODY, WSSSignature.ADDRESSING_HEADERS,
// e WSSSignature.TIMESTAMP.
// Configurar a parte no cabeçalho de SOAP especificado por QName (etapa: e)
sig.addSignHeader(new
QName("http://www.w3.org/2005/08/addressing",
"MessageID"));
// Configurar a parte especificada pela palavra-chave (etapa: e)
sig.addSignPart(WSSSignature.BODY);
// Configurar a parte especificada por SecurityToken (etapa: e)
UNTGenerateCallbackHandler untCallbackHandler = new
UNTGenerateCallbackHandler("Chris", "sirhC");
SecurityToken unt = factory.newSecurityToken(UsernameToken.class,
untCallbackHandler);
sig.addSignPart(unt);
// Configurar a parte especificada por WSSSignPart (etapa: e)
WSSSignPart sigPart = factory.newWSSSignPart();
sigPart.setSignPart(WSSSignature.TIMESTAMP);
sigPart.setDigestMethod(WSSSignPart.SHA256);
sig.addSignPart(sigPart);
// Configurar a parte especificada por WSSTimestamp (etapa: e)
WSSTimestamp timestamp = factory.newWSSTimestamp();
sig.addSignPart(timestamp);
// 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']");
sig.addSignPartByXPath(sb.toString());
// Configurar para aplicar a confirmação de assinatura (etapa: f)
sig.requireSignatureConfirmation();
// Configurar o método de canonicalização (etapa: g)
// PADRÃO: WSSSignature.EXC_C14N
sig.setCanonicalizationMethod(WSSSignature.C14N);
// Configurar o método de assinatura (etapa: h)
// PADRÃO: WSSSignature.RSA_SHA1
sig.setSignatureMethod(WSSSignature.HMAC_SHA1);
// Configurar a referência do token (etapa: i)
// PADRÃO: SecurityToken.REF_STR
sig.setTokenReference(SecurityToken.REF_KEYID);
// Incluir WSSSignature em WSSGenerationContext (etapa: j)
gencont.add(sig);
// Gerar o cabeçalho de WS-Security (etapa: k)
gencont.process(msgctx);
O que Fazer Depois
Em seguida, escolha os métodos de algoritmo se quiser um método diferente dos valores padrão. Se os métodos de algoritmo não precisarem ser alterados, use a API WSSVerification para verificar a assinatura e especifique os métodos de algoritmo na seção do consumidor da ligação. Observe que a API WSSVerification só é suportada no consumidor da resposta (cliente).