Assinaturas de arquivos xml da NFe

[quote=acmedis]Bom dia pessoal,
Estou desenvolvendo um sistema para envio da NFe para Paraná. O sistema esta pronto, assinando e comunicando com o WebService. Mas não estou conseguindo meu xml com o sistema Visualizador que foi fornecido pela receita, as estrutura do meu xml esta com as tags e , tirando essas tags não estou conseguindo validar o xml no WebService do Paraná. Alguém pode me ajudar com isso ?
Preciso saber com fica a estrutura inicial desse xml. Inclusive eu usei uma classe de assinatura daqui do fórum mesmo.
[/quote]

posta seu xml para melhor ajudar você

conforme solicitado pelo alexborges, segue o xml assinado que esta sendo enviado para webservice do Paraná.

<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
  • 41 388548900 VENDA DE MERCADORIAS 1 55 2 290 2009-10-21 2009-10-22 1 4113700 1 1 6 2 1 0 3
  • 99999999999 S G teste LTDA S G teste
  • AV DEZ DE DEZEMBRO 1342 G 2 S/N Complemento CENTRO 4113700 LONDRINA PR 86026220 1058 BRASIL 9999999999 999999999
  • 99999999999999 MOVEIS LTDA
  • RUA SANTO S/N Complemento DISTRITO INDUSTRIAL 3522901 ITAPUI SP 17230000 1058 BRASIL 9999999999 999999999999
  • 123 PERFIL CABIDEIRO SG5006 883MM 6102 UN 1.0000 10.0000 10.00 UN 1.0000 10.0000
  • 0 00 3 10.00 12.00 1.20
  • 04
  • 04
  • 10.00 1.20 0.00 0.00 10.00 0.00 0 0.00 0 0.00 0.00 0.00 0.00 10.00
  • 1
  • 99999999999999 VIACAO GARCIA 9999999999 AV CELSO 1100 LONDRINA PR
  • AAA1111 PR
  • 1
  • z+w316xzZIoP4PatwNmBa14+wGg= ZRH0Ezm2hvVe+wW3VdrUYmM8TB2CU9ALAW+AwuiR2SmnNhtzZjgqrz+JTXFG4I5f5nCQUxWO1JeN uG2kAyl/pc6aFj7C+X25q5hvlCCG9SQvDjuWmBi30SXh/PHcZ+LUenrJd884uu06Drwr/onFYzmE w5ySs2BR+A9k3Epr7ZE=
  • MIIGQDCCBSigAwIBAgIITkKXDYjr6CgwDQYJKoZIhvcNAQEFBQAwTDELMAkGA1UEBhMCQlIxEzAR BgNVBAoTCklDUC1CcmFzaWwxKDAmBgNVBAMTH1NFUkFTQSBDZXJ0aWZpY2Fkb3JhIERpZ2l0YWwg djEwHhcNMDkwODEzMjEwMDAwWhcNMTAwODEzMjEwMDAwWjCB/DELMAkGA1UEBhMCQlIxEzARBgNV BAoTCklDUC1CcmFzaWwxFDASBgNVBAsTCyhFTSBCUkFOQ08pMRgwFgYDVQQLEw8wMDAwMDEwMDA2 MzI2MjIxFDASBgNVBAsTCyhFTSBCUkFOQ08pMRQwEgYDVQQLEwsoRU0gQlJBTkNPKTEUMBIGA1UE CxMLKEVNIEJSQU5DTykxFDASBgNVBAsTCyhFTSBCUkFOQ08pMRQwEgYDVQQLEwsoRU0gQlJBTkNP KTE6MDgGA1UEAxMxSU5EVVNUUklBIENPTUVSQ0lPIEUgUkVQUkVTRU5UQUNPRVMgR0lCSU0gTFRE QSBNRTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEApnPkoSC3t/A7B9KkLB59yPRgO38e43CR 8KxcaDWwDMISclXCseO4uo1vWCI7C57vKbQhw9rsnFranP+u93C+8qIcMHWCAIhm67YDJRpMoFBP qNm4DDLIOH5JQbabDnQaYP6tzJqPAhc8p9YBtzObFfOIWl98E8IzwmpafhAItWMCAwEAAaOCAvcw ggLzMA4GA1UdDwEB/wQEAwIF4DAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwQwHwYDVR0j BBgwFoAUt2CoW/mypq4A7XTr1UrJlmhm9VwwgboGA1UdEQSBsjCBr4EZQ0FSTE9TQFNHQUxVTUlO SU9TLkNPTS5CUqA9BgVgTAEDBKA0EzIwNDExMTk3ODAyMzA3NTMyOTk0MDAwMDAwMDAwMDAwMDAw MDUuODUyLjUzODNTU1BQUqAfBgVgTAEDAqAWExRDQVJMT1MgRURVQVJETyBTT1VaQaAZBgVgTAED A6AQEw44MDkwNTY2NDAwMDEzOaAXBgVgTAEDB6AOEwwwMDAwMDAwMDAwMDAwVwYDVR0gBFAwTjBM BgZgTAECAQYwQjBABggrBgEFBQcCARY0aHR0cDovL3d3dy5jZXJ0aWZpY2Fkb2RpZ2l0YWwuY29t LmJyL3JlcG9zaXRvcmlvL2RwYzCB8AYDVR0fBIHoMIHlMEmgR6BFhkNodHRwOi8vd3d3LmNlcnRp ZmljYWRvZGlnaXRhbC5jb20uYnIvcmVwb3NpdG9yaW8vbGNyL3NlcmFzYWNkdjEuY3JsMEOgQaA/ hj1odHRwOi8vbGNyLmNlcnRpZmljYWRvcy5jb20uYnIvcmVwb3NpdG9yaW8vbGNyL3NlcmFzYWNk djEuY3JsMFOgUaBPhk1odHRwOi8vcmVwb3NpdG9yaW8uaWNwYnJhc2lsLmdvdi5ici9sY3IvU2Vy YXNhL3JlcG9zaXRvcmlvL2xjci9zZXJhc2FjZHYxLmNybDCBlwYIKwYBBQUHAQEEgYowgYcwPAYI KwYBBQUHMAGGMGh0dHA6Ly9vY3NwLmNlcnRpZmljYWRvZGlnaXRhbC5jb20uYnIvc2VyYXNhY2R2 MTBHBggrBgEFBQcwAoY7aHR0cDovL3d3dy5jZXJ0aWZpY2Fkb2RpZ2l0YWwuY29tLmJyL2NhZGVp YXMvc2VyYXNhY2R2MS5wN2IwDQYJKoZIhvcNAQEFBQADggEBAD/JqxgwPOjItKlivZy0AgXNVqbQ HyEhfB39dKMHsm4pPwE+BKJXHU8l1xcc/CYFJ8yfGSYbFGs6ixbyS8Bpeeg4x0wftTg5zEZ/fHDP zXh1C7lQea7IMzO1AcwmTUtGzHlgsNkfm7OjthsDLj4GD2DfF2Z+eIExPiIi72mVczYztSWXTGXg vQhTOu4g2dQcNl5qbzLo4tdGCnrNv6DJnswP09FRGcjC8Ao38YMQYw3HpGgVl53V8Qmmqvh1LKx4 y80jEL2/HNA3r/XCx22cmaMM32o1+eHDN8jEYaJbBsswurhxLLqziiBCiQGLUVHFuCAF47vk7PzY Q9HzkWyN+Xs=

quando envio o xml, retorna o erro 225 - Falha no schema xml.
Porém consigo abrir ele normalmente pelo Visualizador NFeCTe 4.0 fornecido pela receita. E também consigo fazer a validação da estrutura e assinatura através de um programa AssinadorRS fornecido pelo sefaz do RS.

só dei uma olhada por cima pq estou saindo do escritorio agora mas da uma olhada no name space da tag “infNFe” seu não me engano não pode ter aquilo ali não…XD

também tentei dessa forma na tag infNFe:

mas retorna o mesmo erro 225.

[quote=acmedis]também tentei dessa forma na tag infNFe:

mas retorna o mesmo erro 225. [/quote]

acmedis joguei seu xml no validador da sefaz do RS e os seguintes problemas foram encontrados no shema

The ‘xmlnssi’ attribute is not declared. //AQUI ESTÁ SE REFERINDO AO NAMESPACE NA TAG “infNFe” VC TEM Q REMOVER ELE

The ‘http://www.portalfiscal.inf.br/nfe:dEmi’ element has an invalid value according to its data type. //SUA DATA ESTA FORMATADA ERRADA “2009 10 21” ONDE DEVERIA SER 2009-10-21 “yyyy-MM-dd”

The ‘http://www.portalfiscal.inf.br/nfe:dSaiEnt’ element has an invalid value according to its data type.//SUA DATA ESTA FORMATADA ERRADA “2009 10 22” ONDE DEVERIA SER 2009-10-22 “yyyy-MM-dd”

The ‘http://www.portalfiscal.inf.br/nfe:CNPJ’ element has an invalid value according to its data type.//O CNPJ ESTÁ COM 11 DIGITOS ONDE DEVERIAM CONTER 14

The value of the ‘Algorithm’ attribute does not equal its fixed value.//O ATRIBUTO “Algorithm” DA ASSINATURA ESTA ERRADO http://www.w3.org/2000/09/xmldsig#rsa sha1 ONDE DEVERIA SER http://www.w3.org/2000/09/xmldsig#rsa-sha1 NOTE Q NO SEU ESTÁ COM UM ESPAÇO EM BRANCO…

da uma revisada nisso, depois posta aqui se conseguiu solucionar seu problema

Sobre o ambiente de homologação,

-Eu posso usar o certificado da empresa que está desenvolvendo o sistema?
-Onde encontro a chave pública do sefaz virtual?

O erro esta relacionado com a validade da Assinatura.

[list]O arquivo XML foi assinado e a assinatura contém o HASH (DIGEST) do conteudo do arquivo.[/list]
[list]Se por algum motivo o conteudo do arquivo for alterado, será necessário gerar um novo HASH.[/list]

Sobre assinatura digital: http://www.infowester.com/assincertdigital.php

boa tarde a todos, estou com o seguinte problema : preciso inserir no XML que será enviado as informações ref. ao protocolo de autorização e fazer a assinatura digital da nota. Porem quando mando fazer a assinatura fica da sequinte forma o xml :

<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
  • … { tag’s da NFe}

  • 2 v3706 41100280337553000173550030000005056447753010 2010-02-10T15:29:54 141100000384752 CqvBBuqGUyBd2VBXqALlQISVtX8= 100 Autorizado o uso de NF-e
  • ZOQL7z8psu4IFcCeh9IIzVwCFU8= HK5IxwbfneFTbIwAwO/X+gtb0aQqE/IHuxmtyB/d9oybQivp0Et4tHgqubezIziGgXb8F4Tq2Igr zttLT52o9eu2ap2g3rHkzjnEbXouhW3KOuiaAkAjmsntbQEe6htFWBOn4NsjdCf1619AWlAQ//oV XtQPLnFirLYj0v8sGfRRkXRhxBStuJYe2B3X2ppVRqUdDYHbA267Se/mHniR1QYs/p+za+9Rjn5c zm6RasNbji4L2tjtxFbqnLSpOunVseJ36IEFpcRK2Nm0xBB7qybsJgLAXeRAi8x+PGr5HTEQCOOg V10IaAQxSuIH79S0fn22aOs3ZXkjZ2kPz6wEiA==
  • MIIGiTCCBXGgAwIBAgIQMjAwOTA4MjAxMjM1MDQwMjANBgkqhkiG9w0BAQUFADCBijELMAkGA1UE BhMCQlIxEzARBgNVBAoTCklDUC1CcmFzaWwxNjA0BgNVBAsTLVNlY3JldGFyaWEgZGEgUmVjZWl0 YSBGZWRlcmFsIGRvIEJyYXNpbCAtIFJGQjEuMCwGA1UEAxMlQXV0b3JpZGFkZSBDZXJ0aWZpY2Fk b3JhIGRvIFNFUlBST1JGQjAeFw0wOTA4MjAxODM0NDVaFw0xMDA4MjAxODE1MjVaMIH4MQswCQYD VQQGEwJCUjETMBEGA1UEChMKSUNQLUJyYXNpbDE2MDQGA1UECxMtU2VjcmV0YXJpYSBkYSBSZWNl aXRhIEZlZGVyYWwgZG8gQnJhc2lsIC0gUkZCMREwDwYDVQQLEwhDT1JSRUlPUzETMBEGA1UECxMK QVJDT1JSRUlPUzEWMBQGA1UECxMNUkZCIGUtQ05QSiBBMTERMA8GA1UEBxMIQ2FzY2F2ZWwxCzAJ BgNVBAgTAlBSMTwwOgYDVQQDEzNJTkRVU1RSSUEgREUgUExBU1RJQ09TIENBU0NBVkVMIExUREE6 ODAzMzc1NTMwMDAxNzMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDRvzotG/1J6uvG gn58iRV/Z6HYMlcgIRVN3T6+8czokkoH1bOYRszU8MstRal1S5d5Qf6yb2viuA2WeDKUrqVkUpvi 9IsFkvfKFTbzrfn3B8SW97gILuNrcWT20DBxS+h6tgjqtmyfrwjRh/pfsOeWC5xpq+MLM+OPWZFl dAUURB1Zhr8xAoYt3obUxZ4qnfZInYtypZld6D22AncNlxGG8Tl6RQk6Qt1BEo3CHR2m0G5mNMRW H4xcVY4DPqdggfhUDlwiiIWUi44M5kGRn3oWuEt+qbPtZPSlLqi1oScNAx20M28khLbDctTUw18X gYIGczIWhQeEp3pw3Ge8NDw/AgMBAAGjggJ5MIICdTAPBgNVHRMBAf8EBTADAQEAMB8GA1UdIwQY MBaAFLkii4YkRueirecpO4xoO02tdJEUMA4GA1UdDwEB/wQEAwIF4DBgBgNVHSAEWTBXMFUGBmBM AQIBCjBLMEkGCCsGAQUFBwIBFj1odHRwczovL2NjZC5zZXJwcm8uZ292LmJyL2Fjc2VycHJvcmZi L2RvY3MvZHBjYWNzZXJwcm9yZmIucGRmMIGzBgNVHREEgaswgaigPQYFYEwBAwSgNAQyMjgxMDE5 NDUwMTYwNTc4MDk0NDAwMDAwMDAwMDAwMDAwMDAwMDA2NDA5ODczU1NQUFKgGwYFYEwBAwKgEgQQ RG9taW5nb3MgU2FsdmF0aaAZBgVgTAEDA6AQBA44MDMzNzU1MzAwMDE3M6AXBgVgTAEDB6AOBAww MDAwMDAwMDAwMDCBFmFuZHJlQHBsYXN0aXZlbC5jb20uYnIwIAYDVR0lAQH/BBYwFAYIKwYBBQUH AwIGCCsGAQUFBwMEMIGoBgNVHR8EgaAwgZ0wMqAwoC6GLGh0dHA6Ly9jY2Quc2VycHJvLmdvdi5i ci9sY3IvYWNzZXJwcm9yZmIuY3JsMDOgMaAvhi1odHRwOi8vY2NkMi5zZXJwcm8uZ292LmJyL2xj ci9hY3NlcnByb3JmYi5jcmwwMqAwoC6GLGh0dHA6Ly93d3cuaXRpLmdvdi5ici9zZXJwcm8vYWNz ZXJwcm9yZmIuY3JsMEwGCCsGAQUFBwEBBEAwPjA8BggrBgEFBQcwAoYwaHR0cDovL2NjZC5zZXJw cm8uZ292LmJyL2NhZGVpYXMvYWNzZXJwcm9yZmIucDdiMA0GCSqGSIb3DQEBBQUAA4IBAQAYwG7a 8xneLZE1MEhIRDJe2vqvc62A8G/LgL+YzeowJOfqnsTgL2OBsK9R+7Ajq4Wu6vK4/TcYE/IpLyij b6fxheTKgLxIjhbvT5ZJBbeXy6qn+JzEJv7TQiD2sX6DiS0zexfIdgH1J7EOUfRbj/dTDscT3aYk shhFfSdK4Flehz/xErWwovBxxj/S7MuG8Q62YT7cdb+exUXhKv7M25ZXD1M0Hv78Cf/xfyJ+aquN rux8jls49z3T7RGkUlrmgd4Qdy1ipZ+MpNfTUHvPRRoXIW/kyCS0h9Yikbz9JlS/795Z2TSmA+hE yeNmHX608GY7IDJfHfv9ximuxkn2NjnE

A assinatura digital deveria ficar logo abaixo da tag ?
Utilizei a classe que o " gilmaslima " postou.

Você deve gerar ou ler o xml da NFe já assinada e concatenar com as outras partes do
xml de distribuição.

Uma dica: armazene o xml assinado que você enviou no arquivo de lote.
Pode ser que ao regerar o xml da mesma nota e assinar este novo arquivo, o
digestValue fique diferente. Neste caso, o segundo xml não terá validade fiscal.

Alencar

Pessoal,

Graças a muita leitura aqui no Forum, consegui gerar… assinar…e enviar uma NFe.

No momento estou enviando e recebendo um XML de resposta que apresenta a mensagem de sucesso:

Como eu faço agora para consultar essa nota fiscal enviada para o ambiente de homologação??

Existe algum site onde eu possao digitar a chave dela e ver como ela chegou até lá??

estou tentando no endereço a seguir, porem ele diz que a Nfe consultada não existe… será que estou consultando no endereço correto?

Vale lembrar que estou enviando para o ambiente de homologação ainda…

A validação do meu XML esta ok, conforme podem observar abaixo:

[code]Resultado da Validação do Schema e Conferência da Assinatura:

PARSER XML: OK
TIPO DE MENSAGEM: NF-e
SCHEMA: OK
ASSINATURA XML: Assinatura VÁLIDA[/code]

Obrigado pela respostas… sem dúvida irá me ajudar bastante.

Pessoal,

Acabei criando um método próprio para consultar o Status da NFe via webservice… e o resultado que obtenho é o seguinte:

Conferi o Estado do emitente no XML e esta correto, ou seja “SP”. O certificado também é de “SP”. O CNPJ do emitente é o mesmo do Certificado.

O que pode estar havendo??

Obrigado pela ajuda.

[quote=marpinheiro]Pessoal,

Acabei criando um método próprio para consultar o Status da NFe via webservice… e o resultado que obtenho é o seguinte:

Conferi o Estado do emitente no XML e esta correto, ou seja “SP”. O certificado também é de “SP”. O CNPJ do emitente é o mesmo do Certificado.

[/quote]

Código da UF é diferente de sigla da UF. Sigla = “SP”, código = “35”

Deve ser isso.

Alencar

É por no caso específico da Consulta de Notas Ficais você deve sempre consultar no Estado do Emitente.
Os dois primeiros digitos da Chave Representam o código do IBGE do Estado. Você deve então pela chave identificar qual é o código Estado, e consultar a nota do estado em que ela foi emitida.

Seguem os códigos

"UF"	"IBGE"
"AC"	12
"AL"	27
"AM"	13
"AP"	16
"BA"	29
"ES"	32
"MA"	21
"PB"	25
"PE"	26
"PI"	22
"RO"	11
"RR"	14
"TO"	17
"SP"	35
"CE"	23
"DF"	53
"GO"	52
"MG"	31
"MS"	50
"MT"	51
"PA"	15
"PR"	41
"RJ"	33
"RN"	24
"RS"	43
"SC"	42
"SE"	28

As URLS para cada estado, você encontra aqui:

http://www.nfe.fazenda.gov.br/portal/WebServices.aspx

ATENÇÃO: Isso se aplica apenas a Consulta, no caso de emissão você deve enviar sempre para o mesmo estado em que o seu certificado foi emitido.

Olá Senhores,

    Eu vi em outro tópico sobre a extração do dados do assinante com base no certificado, eu testei e funcionou, mas agora eu gostaria de saber se é possível extrair as mesmas informações do arquivo XML da NFe com base no conteúdo da tag X509Certificate ou X509Data ou qualquer coisas assim abaixo segue o código, eu estou obtendo apenas com o X509 imagino que precise da Signature também.
    No código abaixo o método test funciona e o testAlheio não, que é o que eu quero fazer funcionar.
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.security.KeyStore;
import java.security.PrivateKey;
import java.security.cert.CertificateException;
import java.security.cert.CertificateFactory;
import java.security.cert.CertificateParsingException;
import java.security.cert.X509Certificate;
import java.util.Enumeration;
import java.util.List;
import org.bouncycastle.asn1.ASN1InputStream;
import org.bouncycastle.asn1.ASN1TaggedObject;
import org.bouncycastle.asn1.DERObject;
import org.bouncycastle.asn1.DERObjectIdentifier;
import org.bouncycastle.asn1.DEROctetString;
import org.bouncycastle.asn1.DERSequence;
import org.bouncycastle.asn1.DERString;

/**
 *
 * @author Murilo
 */
public class Main {

    private void testAlheio() throws CertificateException, IOException {
        String x509content = "conteudo da tag <509Certificate>";
        CertificateFactory fact = CertificateFactory.getInstance("X.509");
        ByteArrayInputStream bais = new ByteArrayInputStream(x509content.getBytes());
        while (bais.available() > 0) {
            X509Certificate x509 = (X509Certificate) fact.generateCertificate(bais);
            exibeCertificado(x509);
        }
        bais.close();
    }

    private void exibeCertificado(X509Certificate certificate) throws CertificateParsingException, IOException {
        for (List<?> subjectAlternativeName : certificate.getSubjectAlternativeNames()) {
            String email;
            Pair<DERObjectIdentifier, String> otherName;
            // O primeiro elemento é um Integer com o valor 0 = otherName, 1 = rfc822name etc.
            // O segundo valor é um byte array ou uma String. Veja o javadoc de
            // getSubjectAlternativeNames.
            switch (((Number) subjectAlternativeName.get(0)).intValue()) {
                case 0: // OtherName - contém CPF, CNPJ etc.
                    otherName = getOtherName((byte[]) subjectAlternativeName.get(1));
                    System.out.println("First : " + otherName.first);
                    System.out.println("Second : " + otherName.second);
                    // o OID fica em otherName.first
                    break;
                case 1: // rfc822Name - usado para email
                    email = (String) subjectAlternativeName.get(1);
                    System.out.println("email : "+email);
                    break;
                default:
                    break;
            }
        }
    }

    /**
     * Uma classe que encapsula pares de objetos.
     * Inspirado no template pair<> da STL.
     *
     * @param <T> O primeiro tipo.
     * @param <U> O segundo tipo.
     */
    class Pair<T, U> {

        /** O primeiro objeto. */
        public T first;
        /** O segundo objeto. */
        public U second;

        /** Construtor */
        public Pair(T t, U u) {
            first = t;
            second = u;
        }
    }

    /**
     * Interpreta um dado do tipo otherName.
     * Obs. O JDK 5.0 não tem classes que lidem com um dado do tipo OtherName.
     * É necessário usar o BouncyCastle.
     * @param encoded O dado em ASN.1.
     * @return Um par contendo o OID e o conteúdo.
     */
    private Pair<DERObjectIdentifier, String> getOtherName(byte[] encoded) throws IOException {
        // O JDK 5.0 não tem classes que lidem com um dado do tipo OtherName.
        // É necessário usar o BouncyCastle.
        ASN1InputStream inps = new ASN1InputStream(encoded);
        DERSequence seq = null;
        DERObjectIdentifier oid = null;
        String conteudo = "";
        seq = (DERSequence) inps.readObject();
        inps.close();
        Enumeration en = seq.getObjects();
        oid = (DERObjectIdentifier) en.nextElement();
        DERObject obj = ((ASN1TaggedObject) ((ASN1TaggedObject) en.nextElement()).getObject()).getObject();
        if (obj instanceof DERString) { // Certificados antigos SERASA - incorretos
            conteudo = ((DERString) obj).getString();
        } else if (obj instanceof DEROctetString) { // Certificados corretos
            conteudo = new String(((DEROctetString) obj).getOctets(), "ISO-8859-1");
        }
        return new Pair<DERObjectIdentifier, String>(oid, conteudo);
    }

//
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws CertificateParsingException, IOException, CertificateException {
//        new Main().test();
        new Main().testAlheio();
    }

    private void test() throws CertificateParsingException, IOException {
        File file = new File("CERT.pfx");
        X509Certificate certificate = null;

        if (file.exists()) {

//            CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509");
//            InputStream is = new FileInputStream(file);
//            Certificate certificate = certificateFactory.generateCertificate(is);
//            System.out.println("Tipo de certificado "+certificate.getType());
//            is.close();
            try {
                KeyStore keyStore = KeyStore.getInstance("PKCS12");
                InputStream is = new FileInputStream(file);
                String senha = "senha";
                keyStore.load(is, senha.toCharArray());
                is.close();

                String alias = "";

                PrivateKey privateKey = null;
                Enumeration e = keyStore.aliases();
                while (e.hasMoreElements()) {
                    alias = (String) e.nextElement();
                    certificate = (X509Certificate) keyStore.getCertificate(alias);
                    privateKey = (PrivateKey) keyStore.getKey(alias, senha.toCharArray());
                    System.out.println(certificate + " " + privateKey.getAlgorithm());
                }
            } catch (Exception ex) {
                ex.printStackTrace();
                System.out.println(ex.getCause());
            }
        } else {
            System.out.println("Certificado nao encontrado em " + file.getAbsolutePath());
        }
        exibeCertificado(certificate);
    }
}

[quote=julianosott]

ou seja, não pode ter o xmlns:ns2=“http://www.w3.org/2000/09/xmldsig#

o mesmo vale para o enviNFe:

<enviNFe xmlns="http://www.portalfiscal.inf.br/nfe" versao="1.10">
  <idLote>1</idLote> 
  <NFe xmlns="http://www.portalfiscal.inf.br/nfe">

nesse caso tanto o envi como cada nfe devem ter xmlns=“http://www.portalfiscal.inf.br/nfe” e o envi não pode ter o xmlns:ns2=“http://www.w3.org/2000/09/xmldsig#”. Se por acaso o xml estiver do jeito errado, pode usar esses códigos no assinador, ou criar outro método:

esse aqui remove o xmlns:ns2 do elemento raíz:

	doc.getDocumentElement().removeAttribute("xmlns:ns2");

esse aqui adiciona o xmlns necessário a tag NFe:

	((Element) doc.getDocumentElement().getElementsByTagName("NFe").item(i)).setAttribute("xmlns", "http://www.portalfiscal.inf.br/nfe");

Quem quiser verificar o xml pode usar esse site: http://www.sefaz.rs.gov.br/AAE_ROOT/NFE/SAT-WEB-NFE-VAL_1.asp Acho que ele só valida os certificados do Rio Grande do Sul, mas o bom é que ele verifica a estrutura do xml tb.

É isso por enquanto, qualquer coisa é só perguntar.[/quote]

Só para ajudar os próximos, essa solução ai em cima funcionou pra mim q estava com problema de assinatura, porém além disso também fiz:

		docs.getDocumentElement().removeAttribute("xmlns:ns2");
		docs.getDocumentElement().removeAttribute("xmlns:ds");
		docs.getDocumentElement().removeAttribute("xmlns:xsi");

funcionou direitinho depois q fiz isso

[quote=O Grande Bé][quote=julianosott]

ou seja, não pode ter o xmlns:ns2=“http://www.w3.org/2000/09/xmldsig#

o mesmo vale para o enviNFe:

<enviNFe xmlns="http://www.portalfiscal.inf.br/nfe" versao="1.10">
  <idLote>1</idLote> 
  <NFe xmlns="http://www.portalfiscal.inf.br/nfe">

nesse caso tanto o envi como cada nfe devem ter xmlns=“http://www.portalfiscal.inf.br/nfe” e o envi não pode ter o xmlns:ns2=“http://www.w3.org/2000/09/xmldsig#”. Se por acaso o xml estiver do jeito errado, pode usar esses códigos no assinador, ou criar outro método:

esse aqui remove o xmlns:ns2 do elemento raíz:

	doc.getDocumentElement().removeAttribute("xmlns:ns2");

esse aqui adiciona o xmlns necessário a tag NFe:

	((Element) doc.getDocumentElement().getElementsByTagName("NFe").item(i)).setAttribute("xmlns", "http://www.portalfiscal.inf.br/nfe");

Quem quiser verificar o xml pode usar esse site: http://www.sefaz.rs.gov.br/AAE_ROOT/NFE/SAT-WEB-NFE-VAL_1.asp Acho que ele só valida os certificados do Rio Grande do Sul, mas o bom é que ele verifica a estrutura do xml tb.

É isso por enquanto, qualquer coisa é só perguntar.[/quote]

Só para ajudar os próximos, essa solução ai em cima funcionou pra mim q estava com problema de assinatura, porém além disso também fiz:

		docs.getDocumentElement().removeAttribute("xmlns:ns2");
		docs.getDocumentElement().removeAttribute("xmlns:ds");
		docs.getDocumentElement().removeAttribute("xmlns:xsi");

funcionou direitinho depois q fiz isso[/quote]

Só reforçando o que o Grande Bé comentou no manual de integração da NFe fala que não é permitida a utilização de prefixos de namespace…XD

Só para atualizar… o validador via web para verificar os xmls do sefaz é http://www.sefaz.rs.gov.br/NFE/NFE-VAL.aspx não é mais o endereço antigo

Amigos do forum,

Eu sou programador em ambiente Mac Os X (amador).

Tenho rotinas escritas onde controle há anos em minha pequena empresa a emissão de notas fiscais, recebimentos e etc…

Com o surgimento da nota fiscal eletrônica, portei uma rotina que gera um arquivo em texto. (.txt) que uso na importação para o programa gratuito s]da Sefaz-SP, emissor gratuito de NFe.

Gostaria de melhorar minhas próprias rotinas para assinar e transmitir o .xml da NFe.

Creio que o primeiro passo seria assinar o XML.

Procuro ajuda, e estou de acordo em pagar por sua ajuda.

Alguém neste fórum poderia me ajudar escrevendo ou adaptando sua linha de código existente, para mim?

Pensei em ter um comando de terminal, que posso invocar de dentro de meu programa existente, que assinasse o arquivo de texto que sou capaz de gerar, mas não sou capaz de assinar.

Ou mesmo gravar numa pasta por exemplo: “Notas Fiscais por Assinar”, e uma rotina automática assinasse o xml e automáticamente gravasse cópia dele em outra pasta “Notas Fiscais Assinadas”.

Creio que não deve ser difícil para alguém que já tem suas rotinas prontas.

Aguardo contato,

Obrigado,

Bernardo Höhl

Usina Brasileira de Cristobalita Ltda
http://www.rutenium.com.br

Meu celular: 21-99775490

eu endereço de email é:

fundidor + arroba + mac.com

Pessoal, boa tarde.

Meu problema é o seguinte: Preciso saber como me monunicar com o webservice e enviar os dados da minha NF. eu já fiz a assinatura do xml, o que preciso saber é como enviar a nfe para a prefeitura.

vi alguns exemplos aqui mas não compreendi, pois eu tenho um keystore, um pfx, senha, o link, e o XMl. tudo isso deve ser passado como parâmetro(creio eu) na função que fará a comunicação com o webservice da prefeitura. se alguém puder me ajuda, grato pela atenção!

Olá Pessoal

Estou com problemas para validar a assinatura digital do XML de terceiros, sei que existe o próprio validador oferecido pelo governo, porem preciso fazer um que valide o XML também.

Tem alguns XML que eu NÃO consigo validar e a aplicação do governo valida.

Alguém tem algum exemplo de método de validação do XML assinado digitalmente?