Configurando Métodos de Verificação de Assinatura de Resposta para o Cliente
Utilize as APIs WSSVerification e WSSVerifyPart para escolher os métodos de verificação de assinatura. Os métodos de verificação de assinatura de pedido incluem o algoritmo de compilação e os métodos de transporte.
Antes de Iniciar
- Utilize a API WSSVerification para configurar os métodos de assinatura e de canonicalização.
- Utilize a API WSSVerifyPart para configurar os métodos de compilação e transformação.
Sobre Esta Tarefa
A tabela a seguir descreve a finalidade dessas informações. Algumas dessas definições são baseadas na especificação de assinatura XML, que está localizada no seguinte website http://www.w3.org/TR/xmldsig-core.
Nome do Método | Finalidade |
---|---|
Algoritmo de Compilação | Aplica-se aos dados depois das transformações serem aplicadas, se especificado, para liberar o elemento <DigestValue>. A assinatura do elemento <DigestValue> liga o conteúdo do recurso à chave do assinante. O algoritmo selecionado para a configuração do emissor do pedido do cliente deve corresponder ao algoritmo selecionado na configuração do receptor do pedido do cliente. |
Algoritmo de Transformação | Aplica-se ao elemento <Transform>. |
Algoritmo de assinatura | Especifica os URIs (Uniform Resource Identifiers) do método de verificação de assinatura. |
Algoritmo de Canonicalização | Especifica os URIs (Uniform Resource Identifiers) do método de canonicalização. |
Depois de configurar o cliente para assinar a mensagem digitalmente, você deve configurar o cliente para verificar a assinatura digital. É possível utilizar as WSS APIs ou configurar os conjuntos de política utilizando o console administrativo para verificar a assinatura digital e escolher a verificação e verificar os algoritmos de parte. Se estiver utilizando as WSS APIs para configuração, utilize as APIs WSSVerification e WSSVerifyPart para especificar quais partes da mensagem digitalmente assinadas verificar e para especificar quais métodos de algoritmo utilizar ao configurar o cliente para assinatura do pedido.
As APIs WSSVerification e WSSVerifyPart executam as seguintes etapas para configurar a verificação de assinatura e verificar os métodos do algoritmo de partes:
Procedimento
Resultados
Exemplo
O seguinte exemplo fornece o código de amostra WSS API que especifica as informações de verificação, o corpo como uma parte a ser verificada, o HMAC_SHA1 como um método de assinatura, C14N e EXC_C14N como os candidatos dos métodos de canonicalização, TRANSFORM_STRT10 como um método de transformação e SHA256 como um método de compilação.
// Obter o contexto da mensagem
Object msgcontext = getMessageContext();
// Gerar a instância do WSSFactory
WSSFactory factory = WSSFactory.getInstance();
// Gerar a instância do WSSConsumingContext
WSSConsumingContext concont = factory.newWSSConsumingContext();
// Gerar a lista de certificado
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 o 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 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 do WSSVerification
WSSVerification ver = factory.newWSSVerification(X509Token.class,
callbackHandler);
// Configurar um ou mais candidatos do método de assinatura utilizado para
// verificação (etapa. 1)
// DEFAULT : WSSVerification.RSA_SHA1
ver.addAllowedSignatureMethod(WSSVerification.HMAC_SHA1);
// Configurar um ou mais candidatos do método de canonicalização utilizado para
// verificação (etapa. 2)
// DEFAULT : WSSVerification.EXC_C14N
ver.addAllowedCanonicalizationMethod(WSSVerification.C14N);
ver.addAllowedCanonicalizationMethod(WSSVerification.EXC_C14N);
// Configurar a parte a ser especificada pelo WSSVerifyPart
WSSVerifyPart verPart = factory.newWSSVerifyPart();
// Configurar a parte a ser especificada pela palavra-chave
verPart.setRequiredVerifyPart(WSSVerification.BODY);
// Configurar os candidatos dos métodos de compilação a serem utilizados para verificação (etapa. 3)
// DEFAULT : WSSVerifypart.TRANSFORM_EXC_C14N : String
verPart.addAllowedTransform(WSSVerifyPart.TRANSFORM_STRT10);
// Configurar os candidatos dos métodos de compilação a serem utilizados para verificação (etapa. 4)
// DEFAULT : WSSVerifyPart.SHA1
verPart.addAllowedDigestMethod(WSSVerifyPart.SHA256);
// Configurar WSSVerifyPart para WSSVerification
ver.addRequiredVerifyPart(verPart);
// Incluir o WSSVerification no WSSConsumingContext
concont.add(ver);
// Validar o cabeçalho do WS-Security
concont.process(msgcontext);
O que Fazer Depois
Você concluiu a configuração dos algoritmos de verificação de assinatura. Em seguida, configure os algoritmos de criptografia ou decriptografia, se ainda não estiverem configurados. Ou, configure as informações do token de segurança, conforme necessário.