Verificando a Assinatura Usando a API WSSVerification
É 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 verificar as informações de assinatura para as seções de ligação do consumidor do pedido do cliente, use a API WSSVerification. Você também deve especificar quais métodos de algoritmo e quais partes da assinatura da mensagem SOAP devem ser verificados. A API WSSVerification faz parte do pacote com.ibm.websphere.wssecurity.wssapi.verification.
Antes de Iniciar
Use as APIs WSS ou configure os conjuntos de política usando o console administrativo para verificar as informações de assinatura. Para oferecer segurança às mensagens SOAP, você deve ter concluído as seguintes tarefas de assinatura:
- Configure as informações de assinatura.
- Escolha os métodos de algoritmo para a verificação de assinatura e da assinatura.
- Verifique as informações de assinatura.
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.
A tabela a seguir mostra as informações obrigatórias e opcionais sobre ligação quando a restrição de segurança de assinatura digital (integridade) for definida.
Partes da Verificação | Description |
---|---|
keywords | Inclui partes obrigatórias da assinatura como destinos da verificação usando palavras-chave. Partes de mensagens diferentes podem ser especificadas na proteção de mensagem para pedido no gerador.
Use as seguintes palavras-chave para as partes obrigatórias da verificação de assinatura:
|
xpath | Inclui partes da verificação usando uma expressão XPath. |
part | Inclui o objeto WSSVerifyPart como uma parte da verificação. |
header | Inclui o cabeçalho, especificado por QName, como uma parte da verificação. |
Para informações de verificação de assinatura, determinados comportamentos ocorrem. A forma mais simples de usar a API WSSVerification é usar o comportamento padrão.
Os valores padrão são definidos pela API WSS para o método de compilação, o método de transformação, o token de segurança e as partes obrigatórias da verificação.
Decisões da Verificação de Assinatura | Comportamento Padrão |
---|---|
Qual método de assinatura usar (algorithm) | Configura o método do algoritmo de assinatura. Tanto a criptografia de dados quanto a assinatura e a canonicalização podem ser especificadas. 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 (algorithm) | Configura o método do algoritmo de canonicalização.
Tanto a criptografia de dados quanto a assinatura e a canonicalização podem ser especificadas. O método de assinatura 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 | Se a API WSSSignature especificar que a confirmação de assinatura é requerida, a API WSSVerification verificará então o valor de confirmação da assinatura na mensagem de resposta que tem o valor de confirmação da assinatura anexado a ela quando recebido. A confirmação de assinatura é definida na especificação do OASIS Web Services Security Versão 1.1. A configuração de assinatura padrão é false. |
Qual token de segurança especificar (securityToken) | Inclui o objeto securityToken como uma parte da assinatura. O WebSphere Application Server configura as informações de token a serem utilizadas para verificação. O WebSphere Application Server suporta os seguintes tokens pré-configurados para assinatura:
|
Procedimento
Resultados
Exemplo
O seguinte exemplo fornece o código de amostra que usa métodos que são definidos na API WSSVerification:
// 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 o armazenamento de certificados
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 de WSSVerification (etapa: d)
WSSVerification ver = factory.newWSSVerification(X509Token.class, callbackHandler);
// Configurar a parte a ser verificada (etapa: e)
// PADRÃO: WSSVerification.BODY, WSSSignature.ADDRESSING_HEADERS,
// e WSSSignature.TIMESTAMP.
// Configurar a parte no cabeçalho SOAP a ser especificado por QName (etapa: e)
ver.addRequiredVerifyHeader(new QName("http://www.w3.org/2005/08/addressing", "MessageID"));
// Configurar a parte a ser especificada pela palavra-chave (etapa: e)
ver.addRequiredVerifyPart(WSSVerification.BODY);
// Configurar a parte a ser especificada pelo WSSVerifyPart (etapa: e)
WSSVerifyPart verPart = factory.newWSSVerifyPart();
verPart.setRequiredVerifyPart(WSSVerification.BODY);
verPart.addAllowedDigestMethod(WSSVerifyPart.SHA256);
ver.addRequiredVerifyPart(verPart);
// 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']");
ver.addRequiredVerifyPartByXPath(sb.toString());
// Configurar um ou mais candidatos de métodos de canonicalização para verificação (etapa: f)
// DEFAULT : WSSVerification.EXC_C14N
ver.addAllowedCanonicalizationMethod(WSSVerification.C14N);
ver.addAllowedCanonicalizationMethod(WSSVerification.EXC_C14N);
// Configurar um ou mais candidatos de métodos de assinatura para verificação (etapa: g)
// DEFAULT : WSSVerification.RSA_SHA1
ver.addAllowedSignatureMethod(WSSVerification.HMAC_SHA1);
// Configurar o token de segurança do candidato para verificação (etapa: h)
X509ConsumeCallbackHandler callbackHandler2 = getCallbackHandler2();
ver.addToken(X509Token.class, callbackHandler2);
// Configurar o sinalizador para solicitar a confirmação de assinatura (etapa: i)
ver.requireSignatureConfirmation();
// 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
Depois de verificar a assinatura e configurar os métodos do algoritmo para a mensagem SOAP, você pode configurar o método de compilação ou transformação. Se desejar configurar esses métodos, use a API WSSVerifyPart ou configure os conjuntos de política usando o console administrativo.