Amigos,
Não estou conseguindo assinar os Rps e, após, o lote do meu Xml. Assinatura esta que é necessária para processamento deste arquivo no webservice da notaCarioca.
Segue minha classe java para assinatura:
[code]public class AssinarXML {
/**
* Assina um XML de acordo com os parametros abaixo
*
* @param caminhoKeyStore
* ex: arquivo.p12
* @param senha
* @param tipoKeystore
* ex: TiposKeyStore.PKCS12
* @param caminhoXML
* @param idTagParaAssinar
* @return
* @throws Exception
*/
public String assinarXML(String caminhoKeyStore, char[] senha,
TiposKeyStore tipoKeystore, String caminhoXML,
String idTagParaAssinar) throws Exception {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(true);
DocumentBuilder builder = dbf.newDocumentBuilder();
Document doc = builder.parse(new FileInputStream(caminhoXML));
KeyStore ks = KeyStore.getInstance(tipoKeystore.getValue());
ks.load(new java.io.FileInputStream(caminhoKeyStore), senha);
PrivateKey chavePrivada = null;
Certificate chavePublica = null;
Enumeration<String> enum1 = ks.aliases();
while (enum1.hasMoreElements()) {
String alias = enum1.nextElement();
if (ks.isKeyEntry(alias)) {
chavePrivada = (PrivateKey) ks.getKey(alias, senha);
chavePublica = ks.getCertificate(alias);
}
}
DOMSignContext dsc = new DOMSignContext(chavePrivada,
doc.getDocumentElement());
XMLSignatureFactory fac = XMLSignatureFactory.getInstance("DOM");
Reference ref = fac.newReference("#" + idTagParaAssinar, fac
.newDigestMethod(DigestMethod.SHA1, null), Collections
.singletonList(fac.newTransform(Transform.ENVELOPED,
(TransformParameterSpec) null)), null, null);
SignedInfo si = fac
.newSignedInfo(fac.newCanonicalizationMethod(
CanonicalizationMethod.INCLUSIVE_WITH_COMMENTS,
(C14NMethodParameterSpec) null), fac
.newSignatureMethod(SignatureMethod.RSA_SHA1, null),
Collections.singletonList(ref));
KeyInfoFactory kif = fac.getKeyInfoFactory();
KeyValue kv = kif.newKeyValue(chavePublica.getPublicKey());
KeyInfo ki = kif.newKeyInfo(Collections.singletonList(kv));
XMLSignature signature = fac.newXMLSignature(si, ki);
signature.sign(dsc);
OutputStream os = new ByteArrayOutputStream();
TransformerFactory tf = TransformerFactory.newInstance();
Transformer trans = tf.newTransformer();
trans.transform(new DOMSource(doc), new StreamResult(os));
return os.toString();
}
/**
* @param args
*/
public static void main(String[] args) throws Exception {
char[] senha = "231221".toCharArray();
String caminhoKeyStore = "C:\\Documents and Settings\\rasouza\\Meus documentos\\Coppetec\\Nfse\\temp\\cets_exportado_todosOsCaminhoscomChaveprimaria.pfx";
String caminhoXML = "C:\\dev\\rafael\\wsp\\Nfse\\WebContent\\resources\\xmlEnvio\\EnviarLoteRps.xml";
String idTagParaAssinar = "Rps1";
String retornoXML = new AssinarXML().assinarXML(caminhoKeyStore, senha,
TiposKeyStore.PKCS12, caminhoXML, idTagParaAssinar);
TratarArquivo salvar = new TratarArquivo();
salvar.salvarEmXmlExistente(retornoXML, "EnviarLoteRpsEnvio", true);
}
}[/code]
Classe auxiliar
[code]package br.com.nfse.util;
public enum TiposKeyStore {
PKCS12(“PKCS12”),
JKS(“JKS”),
CMS(“CMS”),
JCEKS(“JCEKS”);
private String value;
private TiposKeyStore(String value) {
this.value = value;
}
public String getValue(){
return this.value;
}
}
[/code]
Meu xml:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<EnviarLoteRpsEnvio xmlns:ns2="http://www.w3.org/2000/09/xmldsig#" xmlns="http://www.abrasf.org.br/ABRASF/arquivos/nfse.xsd">
<LoteRps Id="Lote1">
<NumeroLote>1</NumeroLote>
<Cnpj>72060999000175</Cnpj>
<InscricaoMunicipal>01119923</InscricaoMunicipal>
<QuantidadeRps>2</QuantidadeRps>
<ListaRps>
<Rps>
<InfRps Id="Rps1">
<IdentificacaoRps>
<Numero>9</Numero>
<Serie>00001</Serie>
<Tipo>1</Tipo>
</IdentificacaoRps>
<DataEmissao>2013-02-19T13:00:00</DataEmissao>
<NaturezaOperacao>1</NaturezaOperacao>
<OptanteSimplesNacional>2</OptanteSimplesNacional>
<IncentivadorCultural>2</IncentivadorCultural>
<Status>1</Status>
<Servico>
<Valores>
<ValorServicos>1000.00</ValorServicos>
<ValorDeducoes>0</ValorDeducoes>
<ValorPis>10.00</ValorPis>
<ValorCofins>10.00</ValorCofins>
<ValorInss>10.00</ValorInss>
<ValorIr>10.00</ValorIr>
<ValorCsll>10.00</ValorCsll>
<IssRetido>2</IssRetido>
<ValorIss>10.00</ValorIss>
<OutrasRetencoes>10.00</OutrasRetencoes>
<Aliquota>0.05</Aliquota>
<DescontoIncondicionado>10.00</DescontoIncondicionado>
<DescontoCondicionado>10.00</DescontoCondicionado>
</Valores>
<ItemListaServico>0102</ItemListaServico>
<CodigoTributacaoMunicipio>010201</CodigoTributacaoMunicipio>
<Discriminacao>Teste</Discriminacao>
<CodigoMunicipio>3304557</CodigoMunicipio>
</Servico>
<Prestador>
<Cnpj>72060999000175</Cnpj>
<InscricaoMunicipal>01119923</InscricaoMunicipal>
</Prestador>
<Tomador>
<IdentificacaoTomador>
<CpfCnpj>
<Cnpj>99999999000191</Cnpj>
</CpfCnpj>
</IdentificacaoTomador>
<RazaoSocial>INSCRICAO DE TESTE</RazaoSocial>
<Endereco>
<Endereco>AV RIO BRANCO</Endereco>
<Numero>1234</Numero>
<Complemento>SALA 1001 E 1002</Complemento>
<Bairro>CENTRO</Bairro>
<CodigoMunicipio>3304557</CodigoMunicipio>
<Uf>RJ</Uf>
<Cep>20040001</Cep>
</Endereco>
</Tomador>
</InfRps>
</Rps>
<Rps>
<InfRps Id="Rps2">
<IdentificacaoRps>
<Numero>10</Numero>
<Serie>00001</Serie>
<Tipo>1</Tipo>
</IdentificacaoRps>
<DataEmissao>2013-02-19T13:05:00</DataEmissao>
<NaturezaOperacao>1</NaturezaOperacao>
<OptanteSimplesNacional>2</OptanteSimplesNacional>
<IncentivadorCultural>2</IncentivadorCultural>
<Status>1</Status>
<Servico>
<Valores>
<ValorServicos>1000.00</ValorServicos>
<ValorDeducoes>0</ValorDeducoes>
<ValorPis>10.00</ValorPis>
<ValorCofins>10.00</ValorCofins>
<ValorInss>10.00</ValorInss>
<ValorIr>10.00</ValorIr>
<ValorCsll>10.00</ValorCsll>
<IssRetido>2</IssRetido>
<ValorIss>10.00</ValorIss>
<OutrasRetencoes>10.00</OutrasRetencoes>
<Aliquota>0.05</Aliquota>
<DescontoIncondicionado>10.00</DescontoIncondicionado>
<DescontoCondicionado>10.00</DescontoCondicionado>
</Valores>
<ItemListaServico>0102</ItemListaServico>
<CodigoTributacaoMunicipio>010201</CodigoTributacaoMunicipio>
<Discriminacao>TESTE</Discriminacao>
<CodigoMunicipio>3304557</CodigoMunicipio>
</Servico>
<Prestador>
<Cnpj>72060999000175</Cnpj>
<InscricaoMunicipal>01119923</InscricaoMunicipal>
</Prestador>
<Tomador>
<IdentificacaoTomador>
<CpfCnpj>
<Cnpj>99999990000191</Cnpj>
</CpfCnpj>
</IdentificacaoTomador>
<RazaoSocial>INSCRICAO DE TESTE2</RazaoSocial>
<Endereco>
<Endereco>AV RIO BRANCO</Endereco>
<Numero>1235</Numero>
<Complemento>SALA 2002 E 2005</Complemento>
<Bairro>CENTRO</Bairro>
<CodigoMunicipio>3304557</CodigoMunicipio>
<Uf>RJ</Uf>
<Cep>20040001</Cep>
</Endereco>
</Tomador>
</InfRps>
</Rps>
</ListaRps>
</LoteRps>
</EnviarLoteRpsEnvio>
Alguém pode me ajudar?
Abraço