Fechando os Métodos de Verificação de Partes que Utilizam a WSSVerifyPart API
É possível configurar as informações sobre verificação de assinatura para a ligação do consumidor utilizando a WSS API. Os métodos de compilação e de algoritmo de transformação são utilizados para a ligação do consumidor. Utilize a WSSVerifyPart API para configurar os métodos de algoritmo. A WSSVerifyPart API é fornecida no pacote com.ibm.websphere.wssecurity.wssapi.verification.
Para configurar informações sobre verificação de partes do consumidor para proteger a integridade da mensagem, primeiro assine digitalmente e verifique a assinatura e as partes assinadas para a mensagem SOAP. A integridade refere-se à assinatura digital, enquanto que a confidencialidade refere-se à criptografia. A integridade diminui o risco de modificação de dados quando você transmite dados pela rede.
Métodos
- Método de Compilação
- Configura o método de compilação.
- Método de Transformação
- Configura o método do algoritmo de transformação.
Algoritmos de Compilação
O algoritmo do método de compilação é especificado dentro do elemento utilizado no elemento <Digest>. O WebSphere Application Server suporta os seguintes algoritmos de compilação pré-configurados:
Método de Compilação | Description |
---|---|
WSSVerifyPart.SHA1 (o valor padrão) | Um URI do algoritmo de compilação, SHA1: http://www.w3.org/2000/09/xmldsig#sha1 |
WSSVerifyPart.SHA256 | Um URI do algoritmo de compilação, SHA256: http://www.w3.org/2001/04/xmlenc#sha256 |
WSSVerifyPart.SHA512 | Um URI do algoritmo de compilação, SHA256: http://www.w3.org/2001/04/xmlenc#sha512 |
Algoritmos de Transformação
O algoritmo de transformação é especificado dentro do elemento <Transform> e especifica o algoritmo de transformação para a parte assinada. O WebSphere Application Server suporta os seguintes algoritmos de transformação pré-configurados:
Método de Compilação | Description |
---|---|
WSSVerifyPart.TRANSFORM_ENVELOPED_SIGNATURE | Um URI do algoritmo de transformação, assinatura envelopada: http://www.w3.org/2000/09/xmldsig#enveloped-signature |
WSSVerifyPart.TRANSFORM_STRT10 | Um URI do algoritmo de transformação, STR-Transform: http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#STR-Transform |
WSSVerifyPart.TRANSFORM_EXC_C14N (o valor padrão) | Um URI do algoritmo de transformação, Exc-C14N: http://www.w3.org/2001/10/xml-exc-c14n# |
WSSVerifyPart.TRANSFORM_XPATH2_FILTER | Um URI do algoritmo de transformação, filtro XPath2: http://www.w3.org/2002/06/xmldsig-filter2 |
- http://www.w3.org/TR/1999/REC-xpath-19991116
- http://www.w3.org/2002/07/decrypt#XML
O exemplo a seguir fornece o código de amostra da WSS API que verifica o corpo que utiliza SHA256 como o método de compilação e TRANSFORM_EXC_14N e TRANSFORM_STRT10C14n como os métodos de transformação:
// obter o contexto da mensagem
Object msgcontext = getMessageContext();
// gerar a instância WSSFactory
WSSFactory factory = WSSFactory.getInstance();
// generate WSSConsumingContext instance
WSSConsumingContext concont = factory.newWSSConsumingContext();
// gera a lista de certificados
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 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
X509ConsumeCallbackHandler callbackHandler = new
X509ConsumeCallbackHandler(
"dsig-receiver.ks",
"jks",
"server".toCharArray(),
certList,
java.security.Security.getProvider("IBMCertPath")
);
//gera a instância de WSSVerification
WSSVerification ver = factory.newWSSVerification(X509Token.class,
callbackHandler);
//configura um ou mais candidatos do método de assinatura utilizado para a
//verificação (etapa. 1)
// DEFAULT : WSSVerification.RSA_SHA1
ver.addAllowedSignatureMethod(WSSVerification.HMAC_SHA1);
//configura um ou mais candidatos do método de canonicalização utilizado
//para a verificação (etapa. 2)
// DEFAULT : WSSVerification.EXC_C14N
ver.addAllowedCanonicalizationMethod(WSSVerification.C14N);
ver.addAllowedCanonicalizationMethod(WSSVerification.EXC_C14N);
//configura a parte a ser especificada por WSSVerifyPart
WSSVerifyPart verPart = factory.newWSSVerifyPart();
//configura a parte a ser especificada pela palavra-chave
verPart.setRequiredVerifyPart(WSSVerification.BODY);
//configura os candidatos de métodos de compilação a ser utilizado para verificação (etapa. 3)
// PADRÃO : WSSVerifypart.TRANSFORM_EXC_C14N
verPart.addAllowedTransform(WSSVerifyPart.TRANSFORM_EXC_C14N);
verPart.addAllowedTransform(WSSVerifyPart.TRANSFORM_STRT10);
//configura os candidatos de métodos de compilação a ser utilizado para verificação (etapa. 4)
// DEFAULT : WSSVerifyPart.SHA1
verPart.addAllowedDigestMethod(WSSVerifyPart.SHA256);
//configura WSSVerifyPart para WSSVerification
ver.addRequiredVerifyPart(verPart);
//inclui a WSSVerification na WSSConsumingContext
concont.add(ver);
//valida o cabeçalho de WS-Security
concont.process(msgcontext);