GUJ Discussões   :   últimos tópicos   |   categorias   |   GUJ Respostas

Erro Após Atualização Java. Problema Deles ou Meu? (RESOLVIDO)

Como é no servidor da empresa (Conecto via TS) não tenho a possibilidade de desinstalar tudo do java, senão paro todo o desenvolvimento.
Vou verificar com os superiores a possibilidade de iniciar o servidor em outra máquina.
No servidor está instalado duas versões do Java a 7 update 25 e a 6 update 33, mas creio que não seja esse o problema. Vou verificar a possibilidade de deixar apenas uma versão instalada.

Grato até o momento, e qualquer novidade ou a instalação em outra maquina não resolver, volto a comentar por aqui.

Pessoal, estou com o mesmo problema, mas no CT-e. No caso, estou rodando no Mac (Java 6 u51), mas a mensagem de erro é exatamente a mesma. Já adicionei as linhas mencionadas, e nada.

Alguma idéia?

Obrigado

Cinglez Boa Tarde.

Não como como vc gerencia suas assinaturas, mas eu possuo um metodo para cada uma: Envio , Evento, cancelamento, inutilização… etc.

Dai tive que colocar essa propriedade em cada metodo!

Talvez seja isso o pq de funcionar nas outras funçoes e nesta não!

Verifique se isso acontece com vc tbm, e se não coloque seu codigo da assinatura para verificarmos!

Obrigado pelo retorno. Na verdade funcionava e parou de funcionar após o upgrade do java. O código é

package cte.xmlSigner;

import java.io.File;
import java.io.FileInputStream;
import java.io.StringReader;

import java.io.StringWriter;

import java.security.KeyStore;
import java.security.Provider;
import java.security.cert.X509Certificate;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import javax.xml.crypto.dsig.CanonicalizationMethod;
import javax.xml.crypto.dsig.DigestMethod;
import javax.xml.crypto.dsig.Reference;
import javax.xml.crypto.dsig.SignatureMethod;
import javax.xml.crypto.dsig.SignedInfo;
import javax.xml.crypto.dsig.Transform;
import javax.xml.crypto.dsig.XMLSignature;
import javax.xml.crypto.dsig.XMLSignatureFactory;
import javax.xml.crypto.dsig.dom.DOMSignContext;
import javax.xml.crypto.dsig.dom.DOMValidateContext;
import javax.xml.crypto.dsig.keyinfo.KeyInfo;
import javax.xml.crypto.dsig.keyinfo.KeyInfoFactory;
import javax.xml.crypto.dsig.keyinfo.X509Data;
import javax.xml.crypto.dsig.spec.C14NMethodParameterSpec;
import javax.xml.crypto.dsig.spec.TransformParameterSpec;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;

import java.util.Enumeration;

import javax.xml.parsers.DocumentBuilder;

import org.w3c.dom.Node;

import org.xml.sax.InputSource;

public class cteXmlSigner{
    
    
    private static final String C14N_TRANSFORM_METHOD = "http://www.w3.org/TR/2001/REC-xml-c14n-20010315";
    
    private static final String PROVIDER_CLASS_NAME = "org.jcp.xml.dsig.internal.dom.XMLDSigRI";
    private static final String PROVIDER_NAME = "jsr105Provider";
        
    public String cteAssinar(String xmlFile, String tipo, String certPath, String certPasswd) throws Exception
    {
    // tipo
    // 'CTE' - CTE  
    // 'CAN' - CANCELAMENTO
    // 'INU' - INUTILIZACAO
    //

      String tag = "";
    
      if(tipo.equals("CTE"))
        tag = "infCte";
      else if (tipo.equals("CAN"))
        tag = "infCanc";
      else if (tipo.equals("INU"))
        tag = "infInut";
      
//      System.setProperty("org.jcp.xml.dsig.secureValidation", "false"); 
    
      DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
      factory.setNamespaceAware(false);
      DocumentBuilder builder = factory.newDocumentBuilder();
      Document docs = builder.parse(new InputSource(new StringReader(xmlFile)));
      
      NodeList elements = docs.getElementsByTagName(tag);
      Element el = (Element) elements.item(0);

      String id = el.getAttribute("Id");
      
      el.setIdAttribute("Id", true);
      
      String providerName = System.getProperty(PROVIDER_NAME, PROVIDER_CLASS_NAME);
      XMLSignatureFactory fac = XMLSignatureFactory.getInstance("DOM", (Provider) Class.forName(providerName).newInstance());
    
      ArrayList transformList = new ArrayList();
      TransformParameterSpec tps = null;
      Transform envelopedTransform = fac.newTransform(Transform.ENVELOPED,tps);
      Transform c14NTransform = fac.newTransform(C14N_TRANSFORM_METHOD, tps);
      transformList.add(envelopedTransform);
      transformList.add(c14NTransform);
    
      Reference ref = fac.newReference("#" + id, fac.newDigestMethod(DigestMethod.SHA1, null), transformList, null, null);
    
      SignedInfo si = fac
      .newSignedInfo(fac.newCanonicalizationMethod(
      CanonicalizationMethod.INCLUSIVE,
      (C14NMethodParameterSpec) null), fac
      .newSignatureMethod(SignatureMethod.RSA_SHA1, null),
      Collections.singletonList(ref));
    
      KeyStore ks = KeyStore.getInstance("PKCS12");
      ks.load(new FileInputStream(certPath), certPasswd.toCharArray());
      Enumeration aliasesEnum = ks.aliases();
      String alias = "";
      while (aliasesEnum.hasMoreElements()) {
        alias = (String) aliasesEnum.nextElement();
        if (ks.isKeyEntry(alias)) {
        break;
        }
      }
    
      KeyStore.PrivateKeyEntry keyEntry = (KeyStore.PrivateKeyEntry) ks.getEntry(alias, new KeyStore.PasswordProtection(certPasswd.toCharArray()));
    
      X509Certificate cert = (X509Certificate) keyEntry.getCertificate();
    
      KeyInfoFactory kif = fac.getKeyInfoFactory();
      List x509Content = new ArrayList();
    
      x509Content.add(cert);
      X509Data xd = kif.newX509Data(x509Content);
      KeyInfo ki = kif.newKeyInfo(Collections.singletonList(xd));
    

      DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
      dbf.setNamespaceAware(true);
      Document doc = dbf.newDocumentBuilder().parse(new InputSource(new StringReader(xmlFile)));


      DOMSignContext dsc = new DOMSignContext(keyEntry.getPrivateKey(), doc.getDocumentElement());
    
      XMLSignature signature = fac.newXMLSignature(si, ki);
    
      signature.sign(dsc);
    
      
      StringWriter stringWriter = new StringWriter(); 
      Transformer transformer = TransformerFactory.newInstance().newTransformer(); 
      transformer.transform(new DOMSource(doc), new StreamResult(stringWriter)); 
      String signedXml = stringWriter.toString();
      
      NodeList nl = doc.getElementsByTagNameNS(XMLSignature.XMLNS, "Signature");
    
      if (nl.getLength() == 0) {
      throw new Exception("Cannot find Signature element");
      }

      DOMValidateContext valContext = new DOMValidateContext( new X509KeySelector(ks), nl.item(0));

      XMLSignature signatures = fac.unmarshalXMLSignature(valContext);

      boolean coreValidity = signatures.validate(valContext);

      if (coreValidity == false) {
        return "Falha na Assinatura!";
      } else {
        return signedXml;
      }
    }


} 

Obrigado

Coisa feia cara!

Edita isso ai e coloca como “[code]”

nem perco tempo decifrando isso ai…

[quote=samuk]Coisa feia cara!

Edita isso ai e coloca como “[code]”

nem perco tempo decifrando isso ai…[/quote]

Falha minha, na verdade nem sabia como fazer… rsrs

Obrigado!

Primeiro… a TAg certa não seria : “infEvento”

Troque isso:

135 DOMSignContext dsc = new DOMSignContext(keyEntry.getPrivateKey(), doc.getDocumentElement());
Por isso…

135 DOMSignContext dsc = new DOMSignContext(keyEntry.getPrivateKey(), doc.getDocumentElement().getElementsByTagName(tag));

Obrigado pela resposta. Tentei o que você sugeriu, mas recebo ao compilar:

Error(142,30): cannot find constructor DOMSignContext(java.security.PrivateKey,org.w3c.dom.NodeList)

A classe que estou importanto é:

import javax.xml.crypto.dsig.dom.DOMSignContext;

Mais uma vez obrigado

Ta certo eu que dei bobeira…
Faz assim: DOMSignContext dsc = new DOMSignContext(keyEntry.getPrivateKey(), doc.getDocumentElement().getElementsByTagName(tag).item(0));

O getElementsByTagName(tag) Traz uma lista de elementos, mas vc só precisa do elemento Especifico. Que Acredito ser o primeiro.

Tenta ai!

É, meu amigo, infelizmente não adiantou não. Na verdade, quando faço

NodeList elements = docs.getElementsByTagName(tag);
Element el = (Element) elements.item(0);
String id = el.getAttribute("Id");      

eu consigo exibir a String id, ele consegue pegar o elemento. Mas a mensagem de erro persiste. Não há algo de estranho no fato da mensagem colocar ID em maiúscula? O atributo na verdade é “Id”, mas a mensagem vem:

Cannot resolve element with ID 1

Realmente por enquanto teremos que manter nossos clients no 7u21 para continuar funcionando, o problema é minha estação de trabalho, que é Mac e não é simples fazer o downgrade.

Mais alguma idéia?

Abs

Resolvido!

O problema era um furo no código. Para assinar, era criada uma nova instância do documento, ao invés de utilizar a que havia sido colocado o atributo Id. Por isso na hora de assinar, o atributo não era encontrado.

Agora está funcionando.

Obrigado pela ajuda.

1 Curtida

Bom dia,

Estou tendo o mesmo problema com assinatura, porém o meu sistema efetua a assinatura de qualquer tipo de documentos. Tentei efetuar a solução sugerida por vocês porém o programa sempre dispara um NOT_FOUND_ERR.

Segue o código que utilizo para efetuar assinatura:

	public void sign(String uri, InputStream in, CadeiaCertificados cadeia, KeyPair kp, OutputStream out) throws GeneralSecurityException, ParserConfigurationException, MarshalException, XMLSignatureException, TransformerException, IOException, SAXException {
		
		doc = dbf.newDocumentBuilder().parse(in);

		//		NodeList nl = doc.getElementsByTagNameNS(XMLSignature.XMLNS, "Signature");
		signatureCount = System.currentTimeMillis();
		
		refs.clear();
		objs.clear();
		
		List<Transform> transformList = new ArrayList<Transform>();
		transformList.add(fac.newTransform(CanonicalizationMethod.INCLUSIVE_WITH_COMMENTS, (TransformParameterSpec) null));
		transformList.add(fac.newTransform(Transform.ENVELOPED, (TransformParameterSpec) null));
		
		refs.add(fac.newReference(uri, fac.newDigestMethod(DigestMethod.SHA1, null), transformList, null, null));
		
		this.generateSigningProperties(cadeia);
		
		
		// Create the SignedInfo
		si = fac.newSignedInfo(fac.newCanonicalizationMethod(CanonicalizationMethod.INCLUSIVE_WITH_COMMENTS,(C14NMethodParameterSpec) null),fac.newSignatureMethod(SignatureMethod.RSA_SHA1, null),refs);
		
		// Create the XMLSignature (but don't sign it yet)
		//signature = fac.newXMLSignature(si, this.generateKeyInfo(cadeia));
		signature = fac.newXMLSignature(si, this.generateKeyInfo(cadeia), objs, "assinatura"+signatureCount, null);
		
		// Create a DOMSignContext and specify the DSA PrivateKey for signing
		// and the document location of the XMLSignature		
		DOMSignContext dsc = new DOMSignContext(kp.getPrivate(), doc.getDocumentElement());
		dsc.putNamespacePrefix(XMLSignature.XMLNS,xmlSignaturePrefix);
		dsc.putNamespacePrefix(xadesNamespace, xadesPrefix);

		// Lastly, generate the enveloping signature using the PrivateKey
		java.lang.System.setProperty("org.jcp.xml.dsig.secureValidation", "false");  
		signature.sign(dsc);
		java.lang.System.setProperty("org.jcp.xml.dsig.secureValidation", "true");  
		TransformerFactory tf = TransformerFactory.newInstance();
		Transformer trans = tf.newTransformer();
		trans.transform(new DOMSource(doc), new StreamResult(out));
		
	}

A exception retornada é:

Detalhes: javax.xml.crypto.URIReferenceException: com.sun.org.apache.xml.internal.security.utils.resolver.ResourceResolverException: Cannot resolve element with ID idSignedProperties1373294188333

Você tentou logo após

doc = dbf.newDocumentBuilder().parse(in);

colocar algo do tipo

NodeList elements = doc.getElementsByTagName(tag);
Element el = (Element) elements.item(0);
String id = el.getAttribute("Id");
el.setIdAttribute("Id", true);

onde tag é a tag a ser assinada? É como funcionou para mim.

Galera, Vocês são ninjas.
Tentei de tudo aqui e ainda não encontrei a resolução desse problema.
Segue o meu código, agradeço muito se puderem me ajudar.

Obrigado

[code]
private void assinar(String arquivoXML, String arquivoCertificado,
String password, String operacao) throws Exception {

    /*
     * operacao 
     * '1' - NFE 
     * '2' - CANCELAMENTO 
     * '3' - INUTILIZACAO
     */

    String tag = "";
    String alias = null;
    KeyStore.PrivateKeyEntry keyEntry;
    switch (operacao) {
        case "1":
            tag = "infNFe";
            break;
        case "2":
            tag = "infEvento";
            break;
        case "3":
            tag = "infInut";
            break;
    }

    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    factory.setNamespaceAware(false);
    DocumentBuilder builder = factory.newDocumentBuilder();
    Document docs = builder.parse(new File(arquivoXML));

    NodeList elements = docs.getElementsByTagName(tag);

    Element el = (Element) elements.item(0);
    
    String id = el.getAttribute("Id");
    el.setIdAttribute("Id", true); 

    // Cria um DOM do tipo XMLSignatureFactory que será utilizado
    // para gerar a assinatura envelopada (enveloped signature)
    String providerName = System.getProperty(PROVIDER_NAME,
            PROVIDER_CLASS_NAME);

    XMLSignatureFactory fac = XMLSignatureFactory.getInstance("DOM",
            (Provider) Class.forName(providerName).newInstance());

    // Define os algoritmos de transformação
    ArrayList transformList = new ArrayList();
    TransformParameterSpec tps = null;
    Transform envelopedTransform = fac.newTransform(Transform.ENVELOPED,
            tps);
    Transform c14NTransform = fac.newTransform(C14N_TRANSFORM_METHOD, tps);
    transformList.add(envelopedTransform);
    transformList.add(c14NTransform);

    // Cria o objeto Reference
    Reference ref = fac.newReference("#" + id, fac.newDigestMethod(
            DigestMethod.SHA1, null), transformList, null, null);

    // Cria o elemento SignedInfo
    SignedInfo si = fac.newSignedInfo(fac.newCanonicalizationMethod(
            CanonicalizationMethod.INCLUSIVE,
            (C14NMethodParameterSpec) null), fac.newSignatureMethod(SignatureMethod.RSA_SHA1, null),
            Collections.singletonList(ref));

    //verifica o tipo de certificado
    KeyStore ks = null;
    if (certificado.getTipo().equalsIgnoreCase("a1")) {

        // Carrega o KeyStore e obtem a chave do certificado
        ks = KeyStore.getInstance("PKCS12");
        ks.load(new FileInputStream(arquivoCertificado), password.toCharArray());
        Enumeration aliasesEnum = ks.aliases();
        while (aliasesEnum.hasMoreElements()) {
            alias = (String) aliasesEnum.nextElement();
            if (ks.isKeyEntry(alias)) {
                break;
            }
        }

        if (alias.isEmpty()) {
            throw new Exception(" Alias não reconhecido!");
        }

        keyEntry = (KeyStore.PrivateKeyEntry) ks.getEntry(alias, new KeyStore.PasswordProtection(password.toCharArray()));

    } else {

    }

// KeyStore.PrivateKeyEntry keyEntry = (KeyStore.PrivateKeyEntry) ks.getEntry(alias, new KeyStore.PasswordProtection(password.toCharArray()));
// KeyStore.PrivateKeyEntry keyEntry = Certificado.getPrivateKey();

    // Instancia um certificado do tipo X509
    X509Certificate cert = (X509Certificate) keyEntry.getCertificate();

    // Cria o elemente KeyInfo contendo a X509Data.
    KeyInfoFactory kif = fac.getKeyInfoFactory();
    List<X509Certificate> x509Content = new ArrayList<>();
    x509Content.add(cert);
    X509Data xd = kif.newX509Data(x509Content);
    KeyInfo ki = kif.newKeyInfo(Collections.singletonList(xd));

    // Instancia o documento que será assinado
    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    dbf.setNamespaceAware(true);

    Document doc = dbf.newDocumentBuilder().parse(
            new FileInputStream(arquivoXML));

    // Cria o DOMSignContext especificando a chave e o nó pai
    DOMSignContext dsc = new DOMSignContext(keyEntry.getPrivateKey(), 
            tag.equals("infEvento") ? doc.getElementsByTagName("evento").item(0) : doc.getDocumentElement());

    // Cria a XMLSignature, mas não assina ainda
    XMLSignature signature = fac.newXMLSignature(si, ki);

    // Empacota (marshal), gera e assina
    signature.sign(dsc);

    // Arquivo novo assinado
    OutputStream os = new FileOutputStream(arquivoXML);
    TransformerFactory tf = TransformerFactory.newInstance();
    Transformer trans = tf.newTransformer();
    trans.transform(new DOMSource(doc), new StreamResult(os));


    // Encontra o elemente Signature
    NodeList nl = doc.getElementsByTagNameNS(XMLSignature.XMLNS,
            "Signature");

    if (nl.getLength() == 0) {
        throw new Exception("Não foi possível encontrar o elemente Signature");
    }

    // Cria um DOMValidateContext
    DOMValidateContext valContext = new DOMValidateContext(
            new X509KeySelector(ks), nl.item(0));

    // Dsempacota (unmarshal) a XMLSignature
    XMLSignature signatures = fac.unmarshalXMLSignature(valContext);

    // Valida a XMLSignature.
    boolean coreValidity = signatures.validate(valContext);

    // Checa o status da validação
    if (!coreValidity) {
        throw new Exception("Falha na Assinatura!");
    }
}[/code]

Muito obrigado

Cara, é o mesmo problema que eu tinha. Vc passa o ID para “docs” e depois assina “doc”. É outra instância. Por isso não funciona. Igualzinho eu tinha feito no início…

Mandando a mensagem só para informar que no meu caso a linha: el.setIdAttribute(“Id”, true); também funcionou!

Trabalho na Alezzia que usa um ERP Open Source chamado Adempiere e tive exatamente o mesmo problema.

Obrigado a todos pela contribuição!

Tudo certo galera.
Esta tudo funcionando comigo também!

Estou tendo o mesmo erro reportado pelo outros usuário de cannot resolve element ID
Segue o código se alguém puder ajudar


import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.security.InvalidAlgorithmParameterException;
import java.security.KeyStore;
import java.security.NoSuchAlgorithmException;
import java.security.PrivateKey;
import java.security.cert.X509Certificate;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Enumeration;
import java.util.List;

import javax.xml.crypto.dsig.CanonicalizationMethod;
import javax.xml.crypto.dsig.DigestMethod;
import javax.xml.crypto.dsig.Reference;
import javax.xml.crypto.dsig.SignatureMethod;
import javax.xml.crypto.dsig.SignedInfo;
import javax.xml.crypto.dsig.Transform;
import javax.xml.crypto.dsig.XMLSignature;
import javax.xml.crypto.dsig.XMLSignatureFactory;
import javax.xml.crypto.dsig.dom.DOMSignContext;
import javax.xml.crypto.dsig.keyinfo.KeyInfo;
import javax.xml.crypto.dsig.keyinfo.KeyInfoFactory;
import javax.xml.crypto.dsig.keyinfo.X509Data;
import javax.xml.crypto.dsig.spec.C14NMethodParameterSpec;
import javax.xml.crypto.dsig.spec.TransformParameterSpec;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

public class AssinarXMLsCertfificadoA1 {

	private static final String INFINUT = "infInut";
	private static final String INFCANC = "infCanc";
	private static final String RPS = "tipos:Rps";

	private PrivateKey privateKey;
	private KeyInfo keyInfo;

	public static void main(String[] args) {
		try {
			String caminhoDoCertificadoDoCliente = "A:\\4835438.pfx";
			String senhaDoCertificadoDoCliente = "senha123";
			AssinarXMLsCertfificadoA1 assinarXMLsCertfificadoA1 = new AssinarXMLsCertfificadoA1();

			/**
			 * Assinando o XML de Lote da NF-e fileEnviNFe = Caminho do Arquivo
			 * XML (EnviNFe) gerado;
			 */
			info("");
			String fileEnviNFe = "C:\\Users\\Administrador\\Desktop\\LOTE_1_000099.xml";
			String xmlEnviNFe = lerXML(fileEnviNFe);
			String xmlEnviNFeAssinado = assinarXMLsCertfificadoA1
					.assinaEnviNFe(xmlEnviNFe, caminhoDoCertificadoDoCliente,
							senhaDoCertificadoDoCliente);
			info("XML EnviNFe Assinado: " + xmlEnviNFeAssinado);

			/**
			 * Assinando o XML de Cancelamento da NF-e fileCancNFe = Caminho do
			 * Arquivo XML (CancNFe) gerado;
			 */
			/*info("");
			String fileCancNFe = "caminho do /xmlCancNFe.xml";
			String xmlCancNFe = lerXML(fileCancNFe);
			String xmlCancNFeAssinado = assinarXMLsCertfificadoA1
					.assinaCancNFe(xmlCancNFe, caminhoDoCertificadoDoCliente,
							senhaDoCertificadoDoCliente);
			info("XML CancNFe Assinado: " + xmlCancNFeAssinado);*/

			/**
			 * Assinando o XML de Inutilizacao da NF-e fileInutNFe = Caminho do
			 * Arquivo XML (InutNFe) gerado;
			 */
			/*info("");
			String fileInutNFe = "Caminho do /xmlInutNFe.xml";
			String xmlInutNFe = lerXML(fileInutNFe);
			String xmlInutNFeAssinado = assinarXMLsCertfificadoA1
					.assinaInutNFe(xmlInutNFe, caminhoDoCertificadoDoCliente,
							senhaDoCertificadoDoCliente);
			info("XML InutNFe Assinado: " + xmlInutNFeAssinado);*/

		} catch (Exception e) {
			error("| " + e.toString());
		}
	}

	/**
	 * Assinatura do XML de Envio de Lote da NF-e utilizando Certificado Digital
	 * A1.
	 * 
	 * @param xml
	 * @param certificado
	 * @param senha
	 * @return
	 * @throws Exception
	 */
	public String assinaEnviNFe(String xml, String certificado, String senha)
			throws Exception {
		
		Document document = documentFactory(xml);
		
		XMLSignatureFactory signatureFactory = XMLSignatureFactory
				.getInstance("DOM");
		ArrayList<Transform> transformList = signatureFactory(signatureFactory);
		loadCertificates(certificado, senha, signatureFactory);

		for (int i = 0; i < document.getDocumentElement()
				.getElementsByTagName(RPS).getLength(); i++) {
			System.out.println("For");
			assinarNFe(signatureFactory, transformList, privateKey, keyInfo,
					document, i);
		}

		return outputXML(document);
	}

	/**
	 * Assintaruda do XML de Cancelamento da NF-e utilizando Certificado Digital
	 * A1.
	 * 
	 * @param xml
	 * @param certificado
	 * @param senha
	 * @return
	 * @throws Exception
	 */
	public String assinaCancNFe(String xml, String certificado, String senha)
			throws Exception {
		return assinaCancelametoInutilizacao(xml, certificado, senha, INFCANC);
	}

	/**
	 * Assinatura do XML de Inutilizacao de sequenciais da NF-e utilizando
	 * Certificado Digital A1.
	 * 
	 * @param xml
	 * @param certificado
	 * @param senha
	 * @return
	 * @throws Exception
	 */
	public String assinaInutNFe(String xml, String certificado, String senha)
			throws Exception {
		return assinaCancelametoInutilizacao(xml, certificado, senha, INFINUT);
	}

	private void assinarNFe(XMLSignatureFactory fac,
			ArrayList<Transform> transformList, PrivateKey privateKey,
			KeyInfo ki, Document document, int indexNFe) throws Exception {

		NodeList elements = document.getElementsByTagName("tipos:InfRps");
		org.w3c.dom.Element el = (org.w3c.dom.Element) elements.item(indexNFe);
		String id = el.getAttribute("Id");

		Reference ref = fac.newReference("#" + id,
				fac.newDigestMethod(DigestMethod.SHA1, null), transformList,
				null, null);

		SignedInfo si = fac
				.newSignedInfo(fac.newCanonicalizationMethod(
						CanonicalizationMethod.INCLUSIVE,
						(C14NMethodParameterSpec) null), fac
						.newSignatureMethod(SignatureMethod.RSA_SHA1, null),
						Collections.singletonList(ref));

		XMLSignature signature = fac.newXMLSignature(si, ki);

		DOMSignContext dsc = new DOMSignContext(privateKey, document
				.getDocumentElement().getElementsByTagName(RPS).item(indexNFe));
		 
		signature.sign(dsc);
		System.out.println("TESTE "+signature);
	}

	private String assinaCancelametoInutilizacao(String xml,
			String certificado, String senha, String tagCancInut)
			throws Exception {
		Document document = documentFactory(xml);

		XMLSignatureFactory signatureFactory = XMLSignatureFactory
				.getInstance("DOM");
		ArrayList<Transform> transformList = signatureFactory(signatureFactory);
		loadCertificates(certificado, senha, signatureFactory);

		NodeList elements = document.getElementsByTagName(tagCancInut);
		org.w3c.dom.Element el = (org.w3c.dom.Element) elements.item(0);
		String id = el.getAttribute("Id");

		Reference ref = signatureFactory.newReference("#" + id,
				signatureFactory.newDigestMethod(DigestMethod.SHA1, null),
				transformList, null, null);

		SignedInfo si = signatureFactory.newSignedInfo(signatureFactory
				.newCanonicalizationMethod(CanonicalizationMethod.INCLUSIVE,
						(C14NMethodParameterSpec) null), signatureFactory
				.newSignatureMethod(SignatureMethod.RSA_SHA1, null),
				Collections.singletonList(ref));

		XMLSignature signature = signatureFactory.newXMLSignature(si, keyInfo);

		DOMSignContext dsc = new DOMSignContext(privateKey,
				document.getFirstChild());
		signature.sign(dsc);

		return outputXML(document);
	}

	private ArrayList<Transform> signatureFactory(
			XMLSignatureFactory signatureFactory)
			throws NoSuchAlgorithmException, InvalidAlgorithmParameterException {
		ArrayList<Transform> transformList = new ArrayList<Transform>();
		TransformParameterSpec tps = null;
		Transform envelopedTransform = signatureFactory.newTransform(
				Transform.ENVELOPED, tps);
		Transform c14NTransform = signatureFactory.newTransform(
				"http://www.w3.org/TR/2001/REC-xml-c14n-20010315", tps);

		transformList.add(envelopedTransform);
		transformList.add(c14NTransform);
		return transformList;
	}

	private Document documentFactory(String xml) throws SAXException,
			IOException, ParserConfigurationException {
		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
		factory.setNamespaceAware(true);
		Document document = factory.newDocumentBuilder().parse(
				new ByteArrayInputStream(xml.getBytes()));
		return document;
	}

	private void loadCertificates(String certificado, String senha,
			XMLSignatureFactory signatureFactory) throws Exception {

		InputStream entrada = new FileInputStream(certificado);
		KeyStore ks = KeyStore.getInstance("PKCS12");
		try {
			ks.load(entrada, senha.toCharArray());
		} catch (IOException e) {
			throw new Exception(
					"Senha do Certificado Digital incorreta ou Certificado inválido.");
		}

		KeyStore.PrivateKeyEntry pkEntry = null;
		Enumeration<String> aliasesEnum = ks.aliases();
		while (aliasesEnum.hasMoreElements()) {
			String alias = (String) aliasesEnum.nextElement();
			if (ks.isKeyEntry(alias)) {
				pkEntry = (KeyStore.PrivateKeyEntry) ks.getEntry(alias,
						new KeyStore.PasswordProtection(senha.toCharArray()));
				privateKey = pkEntry.getPrivateKey();
				break;
			}
		}

		X509Certificate cert = (X509Certificate) pkEntry.getCertificate();
		info("SubjectDN: " + cert.getSubjectDN().toString());

		KeyInfoFactory keyInfoFactory = signatureFactory.getKeyInfoFactory();
		List<X509Certificate> x509Content = new ArrayList<X509Certificate>();

		x509Content.add(cert);
		X509Data x509Data = keyInfoFactory.newX509Data(x509Content);
		keyInfo = keyInfoFactory
				.newKeyInfo(Collections.singletonList(x509Data));
	}

	private String outputXML(Document doc) throws TransformerException {
		ByteArrayOutputStream os = new ByteArrayOutputStream();
		TransformerFactory tf = TransformerFactory.newInstance();
		Transformer trans = tf.newTransformer();
		trans.transform(new DOMSource(doc), new StreamResult(os));
		String xml = os.toString();
		if ((xml != null) && (!"".equals(xml))) {
			xml = xml.replaceAll("\\r\\n", "");
			xml = xml.replaceAll(" standalone=\"no\"", "");
		}
		return xml;
	}

	private static String lerXML(String fileXML) throws IOException {
		String linha = "";
		StringBuilder xml = new StringBuilder();

		BufferedReader in = new BufferedReader(new InputStreamReader(
				new FileInputStream(fileXML)));
		while ((linha = in.readLine()) != null) {
			xml.append(linha);
		}
		in.close();

		return xml.toString();
	}

	/**
	 * Log ERROR.
	 * 
	 * @param error
	 */
	private static void error(String error) {
		System.out.println("| ERROR: " + error);
	}

	/**
	 * Log INFO.
	 * 
	 * @param info
	 */
	private static void info(String info) {
		System.out.println("| INFO: " + info);
	}

}


Ressusitanto esse topico.
Apos esse tempo algum de vcs conseguiram assinar as NFe e CTe com a nova versao do java 7 25 ??

Eu consegui assinar a NFSe com o código:


import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.security.InvalidAlgorithmParameterException;
import java.security.KeyStore;
import java.security.NoSuchAlgorithmException;
import java.security.PrivateKey;
import java.security.cert.X509Certificate;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Enumeration;
import java.util.List;

import javax.xml.crypto.MarshalException;
import javax.xml.crypto.dsig.CanonicalizationMethod;
import javax.xml.crypto.dsig.DigestMethod;
import javax.xml.crypto.dsig.Reference;
import javax.xml.crypto.dsig.SignatureMethod;
import javax.xml.crypto.dsig.SignedInfo;
import javax.xml.crypto.dsig.Transform;
import javax.xml.crypto.dsig.XMLSignature;
import javax.xml.crypto.dsig.XMLSignatureException;
import javax.xml.crypto.dsig.XMLSignatureFactory;
import javax.xml.crypto.dsig.dom.DOMSignContext;
import javax.xml.crypto.dsig.keyinfo.KeyInfo;
import javax.xml.crypto.dsig.keyinfo.KeyInfoFactory;
import javax.xml.crypto.dsig.keyinfo.X509Data;
import javax.xml.crypto.dsig.spec.C14NMethodParameterSpec;
import javax.xml.crypto.dsig.spec.TransformParameterSpec;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

public class Assinador {

	private PrivateKey privateKey;
	private KeyInfo keyInfo;

	private Document document;
	private XMLSignatureFactory signatureFactory;
	private ArrayList<Transform> transformList;
	private NodeList elements;
	private org.w3c.dom.Element el;
	private Reference ref;
	private SignedInfo si;
	private XMLSignature signature;
	private DOMSignContext dsc;

	private static final String RPS = "tipos:Rps";
	private static final String EnviarLoteRpsEnvio = "LoteRps";

	public static String lerXML(String fileXML) throws IOException {
		String linha = "";
		StringBuilder xml = new StringBuilder();

		BufferedReader in = new BufferedReader(new InputStreamReader(
				new FileInputStream(fileXML), "ISO-8859-1"));
		while ((linha = in.readLine()) != null) {
			xml.append(linha);
		}
		in.close();
		
		return xml.toString();
	}

	private String outputXML(Document doc) throws TransformerException {
		ByteArrayOutputStream os = new ByteArrayOutputStream();
		TransformerFactory tf = TransformerFactory.newInstance();
		Transformer trans = tf.newTransformer();
		trans.transform(new DOMSource(doc), new StreamResult(os));
		String xml = os.toString();
		if ((xml != null) && (!"".equals(xml))) {
			xml = xml.replaceAll("\\r\\n", "");
			xml = xml.replaceAll(" standalone=\"no\"", "");
		}
		return xml;
	}

	private void loadCertificates(String certificado, String senha,
			XMLSignatureFactory signatureFactory) throws Exception {

		InputStream entrada = new FileInputStream(certificado);
		KeyStore ks = KeyStore.getInstance("PKCS12");
		try {
			ks.load(entrada, senha.toCharArray());
		} catch (IOException e) {
			throw new Exception(
					"Senha do Certificado Digital incorreta ou Certificado inválido.");
		}

		KeyStore.PrivateKeyEntry pkEntry = null;
		Enumeration<String> aliasesEnum = ks.aliases();
		while (aliasesEnum.hasMoreElements()) {
			String alias = (String) aliasesEnum.nextElement();
			if (ks.isKeyEntry(alias)) {
				pkEntry = (KeyStore.PrivateKeyEntry) ks.getEntry(alias,
						new KeyStore.PasswordProtection(senha.toCharArray()));
				privateKey = pkEntry.getPrivateKey();
				break;
			}
		}

		X509Certificate cert = (X509Certificate) pkEntry.getCertificate();
		// info("SubjectDN: " + cert.getSubjectDN().toString());

		KeyInfoFactory keyInfoFactory = signatureFactory.getKeyInfoFactory();
		List<X509Certificate> x509Content = new ArrayList<X509Certificate>();

		x509Content.add(cert);
		X509Data x509Data = keyInfoFactory.newX509Data(x509Content);
		keyInfo = keyInfoFactory
				.newKeyInfo(Collections.singletonList(x509Data));
	}

	private Document documentFactory(String xml) throws SAXException,
			IOException, ParserConfigurationException {
		
		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
		factory.setNamespaceAware(true);
		Document document = factory.newDocumentBuilder().parse(
				new ByteArrayInputStream(xml.getBytes()));

		return document;
	}
	
	
	
	private ArrayList<Transform> signatureFactory(
			XMLSignatureFactory signatureFactory)
			throws NoSuchAlgorithmException, InvalidAlgorithmParameterException {
		ArrayList<Transform> transformList = new ArrayList<Transform>();
		TransformParameterSpec tps = null;
		Transform envelopedTransform = signatureFactory.newTransform(
				Transform.ENVELOPED, tps);
		Transform c14NTransform = signatureFactory.newTransform(
				"http://www.w3.org/TR/2001/REC-xml-c14n-20010315", tps);

		transformList.add(envelopedTransform);
		transformList.add(c14NTransform);
		return transformList;
	}

	public void assinaLoteRpsNFSe(String tipo, XMLSignatureFactory fac,
			ArrayList<Transform> transformList, PrivateKey privateKey,
			KeyInfo ki, Document document, int indexNFe)
			throws NoSuchAlgorithmException,
			InvalidAlgorithmParameterException, MarshalException,
			XMLSignatureException, javax.xml.crypto.MarshalException {
		if (tipo.equals(Assinador.EnviarLoteRpsEnvio)) {
			this.elements = this.document.getDocumentElement()
					.getElementsByTagName("LoteRps");
		}
		if (tipo.equals(Assinador.RPS)) {
			this.elements = this.document.getElementsByTagName("tipos:InfRps");
		}

		this.el = (org.w3c.dom.Element) this.elements.item(indexNFe);
		String id = el.getAttribute("Id");
		el.setIdAttribute("Id", true);
		this.ref = fac.newReference("#" + id,
				fac.newDigestMethod(DigestMethod.SHA1, null), transformList,
				null, null);
		this.si = fac
				.newSignedInfo(fac.newCanonicalizationMethod(
						CanonicalizationMethod.INCLUSIVE,
						(C14NMethodParameterSpec) null), fac
						.newSignatureMethod(SignatureMethod.RSA_SHA1, null),
						Collections.singletonList(ref));
		this.signature = fac.newXMLSignature(si, ki);
		this.dsc = new DOMSignContext(privateKey,
		/*
		 * document.getDocumentElement().getElementsByTagName(tipo).item(indexNFe
		 * )
		 */this.document.getFirstChild());
		this.signature.sign(this.dsc);
	}

	public void assinaInfRpsNFSe(String tipo, XMLSignatureFactory fac,
			ArrayList<Transform> transformList, PrivateKey privateKey,
			KeyInfo ki, Document document, int indexNFe)
			throws NoSuchAlgorithmException,
			InvalidAlgorithmParameterException, MarshalException,
			XMLSignatureException, javax.xml.crypto.MarshalException {
		if (tipo.equals(Assinador.EnviarLoteRpsEnvio)) {
			this.elements = this.document.getDocumentElement()
					.getElementsByTagName("LoteRps");
		}
		if (tipo.equals(Assinador.RPS)) {
			this.elements = this.document.getElementsByTagName("tipos:InfRps");
		}

		this.el = (org.w3c.dom.Element) this.elements.item(indexNFe);
		String id = el.getAttribute("Id");
		el.setIdAttribute("Id", true);
		this.ref = fac.newReference("#" + id,
				fac.newDigestMethod(DigestMethod.SHA1, null), transformList,
				null, null);
		this.si = fac
				.newSignedInfo(fac.newCanonicalizationMethod(
						CanonicalizationMethod.INCLUSIVE,
						(C14NMethodParameterSpec) null), fac
						.newSignatureMethod(SignatureMethod.RSA_SHA1, null),
						Collections.singletonList(ref));
		this.signature = fac.newXMLSignature(si, ki);
		this.dsc = new DOMSignContext(privateKey, document.getDocumentElement()
				.getElementsByTagName(tipo).item(indexNFe));
		this.signature.sign(this.dsc);
	}

	public String assinaXML(String acao, String xml, String certificado,
			String senha) throws Exception {
		if (acao.equals("NFSe")) {
			return assinaNFSe(xml, certificado, senha, 0);
		}

		return null;
	}

	public String assinaNFSe(String xml, String certificado, String senha,
			int indexNFe) throws Exception {
		
		this.document = documentFactory(xml);
		this.signatureFactory = XMLSignatureFactory.getInstance("DOM");
		this.transformList = signatureFactory(this.signatureFactory);
		loadCertificates(certificado, senha, this.signatureFactory);

		assinaLoteRpsNFSe(Assinador.EnviarLoteRpsEnvio, this.signatureFactory,
				this.transformList, this.privateKey, this.keyInfo,
				this.document, 0);

		for (int i = 0; i < this.document.getDocumentElement()
				.getElementsByTagName(Assinador.RPS).getLength(); i++) {
			assinaInfRpsNFSe(Assinador.RPS, this.signatureFactory,
					this.transformList, this.privateKey, this.keyInfo,
					this.document, i);
		}
		return outputXML(this.document);
	}

}

Tente adaptar para seu caso já que o original assinava NFe.
Qualquer dúvida posta ai que nós ajudamos.

//