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.
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:
Informações das Partes de Verificação | Description |
---|---|
keyword | Configure as partes de verificação utilizando as seguintes palavras-chave:
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.
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:
|
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:
|
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:
|
Procedimento
Resultados
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);