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:
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:
|
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:
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:
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:
|
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:
|
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:
|
Procedimento
Resultados
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.