Login Registre-se
Token SafeNet 5100 para de funcionar em Windows 7 [ RESOLVIDO ]  XML
Índice dos Fóruns » NF-e / NFS-e / CT-e / CF-e / Certificados Digitais
Autor Mensagem
Rafael_oliveira

JavaC Membro

Membro desde: 07/04/2016 17:11:53
Mensagens: 9
Offline

Boa tarde a todos.

Instalei o driver ( do site da certificadora atuais e até mais antigos ) em todas as máquinas, somente nas máquinas onde roda Windows 7 no processo de NFE ele assina com sucesso e para de funcionar ( para até no programa da própria certificadora ).

Nas demais ( Windows 8 e 10 ) roda normalmente com o mesmo programa de assinar e o mesmo driver.

Se eu executar meu programa de assinar no cmd, a mesma coisa, roda uma vez , seu eu mandar executar na segunda ele trava, ai tenho que ir no gerenciador de dispositivos e desativar o token e ativar novamente para ele voltar ao normal.

Alguém já passou por algo desse tipo?

Segue o meu código de Assinar-A3 ( obs: não há possibilidade de trocar o código para pegar do repositório do windows )



public class Assinar {

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";
private static File arquivo;

public void assinar(String caminhoXml, String caminhoCertificado, String senha, String caminhoXmlNovo) throws Exception {
/*
* Operação
* '1' - NFE
* '2' - CANCELAMENTO
* '3' - INUTILIZAÇÃO
* '4' - CARTA DE CORREÇÃO
*/
BufferedReader in = new BufferedReader(new FileReader("MEU CAMINHO/Operacao.txt"));
String tipo = in.readLine();

String tag = "";
if (tipo.equals("1")) {
tag = "infNFe";
} else if (tipo.equals("2")) {
tag = "infEvento";
} else if (tipo.equals("3")) {
tag = "infInut";
} else if (tipo.equals("4")) {
tag = "infEvento";
}

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);
DocumentBuilder builder = factory.newDocumentBuilder();
Document docs = builder.parse(new File(caminhoXml));
NodeList elementos = docs.getElementsByTagName(tag);
Element e = (Element) elementos.item(0);
String id = e.getAttribute("Id");
e.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);
// Create the SignedInfo.
SignedInfo si = fac.newSignedInfo(fac.newCanonicalizationMethod(CanonicalizationMethod.INCLUSIVE, (C14NMethodParameterSpec) null), fac.newSignatureMethod(SignatureMethod.RSA_SHA1, null), Collections.singletonList(ref));

// Load the KeyStore and get the signing key and certificate.
Provider p = new sun.security.pkcs11.SunPKCS11("MEU CAMINHO/Token.cfg");
Security.addProvider(p);

KeyStore ks = KeyStore.getInstance("pkcs11");
ks.load(new FileInputStream(caminhoCertificado), senha.toCharArray());
Enumeration aliasesEnum = ks.aliases();
String alias = "";
while (aliasesEnum.hasMoreElements()) {
alias = (String) aliasesEnum.nextElement();

if (ks.isKeyEntry(alias)) {
System.out.println(alias);
break;
}
}

// Original
//KeyStore ks = KeyStore.getInstance("JKS");
//ks.load(new FileInputStream("santaclara.jks"), "RAIMUNDO".toCharArray());
//
KeyStore.PrivateKeyEntry keyEntry = (KeyStore.PrivateKeyEntry) ks.getEntry(alias, new KeyStore.PasswordProtection(senha.toCharArray()));
X509Certificate cert = (X509Certificate) keyEntry.getCertificate();
// Create the KeyInfo containing the X509Data.
KeyInfoFactory kif = fac.getKeyInfoFactory();
List x509Content = new ArrayList();
// x509Content.add(cert.getSubjectX500Principal().getName());

x509Content.add(cert);
X509Data xd = kif.newX509Data(x509Content);
KeyInfo ki = kif.newKeyInfo(Collections.singletonList(xd));

// Instantiate the document to be signed.
/* DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(true);
Document doc = dbf.newDocumentBuilder().parse(new FileInputStream(caminhoXml));*/
// Create a DOMSignContext and specify the RSA PrivateKey and
// location of the resulting XMLSignature's parent element.
DOMSignContext dsc = new DOMSignContext(keyEntry.getPrivateKey(), docs.getDocumentElement());

// Create the XMLSignature, but don't sign it yet.
XMLSignature signature = fac.newXMLSignature(si, ki);

// Marshal, generate, and sign the enveloped signature.
signature.sign(dsc);

// Output the resulting document.
OutputStream os = new FileOutputStream(caminhoXmlNovo);
TransformerFactory tf = TransformerFactory.newInstance();
Transformer trans = tf.newTransformer();
trans.transform(new DOMSource(docs), new StreamResult(os));

// Find Signature element.
NodeList nl = docs.getElementsByTagNameNS(XMLSignature.XMLNS, "Signature");

if (nl.getLength() == 0) {
throw new Exception("Cannot find Signature element");
}
// Create a DOMValidateContext and specify a KeySelector and document
// context.

DOMValidateContext valContext = new DOMValidateContext(new X509KeySelector(ks), nl.item(0));
// Unmarshal the XMLSignature.

XMLSignature signatures = fac.unmarshalXMLSignature(valContext);
// Validate the XMLSignature.
boolean coreValidity = signatures.validate(valContext);
// Check core validation status.
if (coreValidity == false) {
System.err.println("Falha na Assinatura!");
} else {
System.out.println("Assinatura Correta!");
}
}

public static void main(String[] args) throws Exception {
try {

BufferedReader in = new BufferedReader(new FileReader("J:/RP-GRF/NFE-RV/ESTAB-02/PARAMETRO/Operacao.txt"));
String tipo = in.readLine();

String caminhoXml = "";
String arquivoXmlNovo = "";
if (tipo.equals("1")) {
caminhoXml = "MEU CAMINHO/Nota.xml";
arquivoXmlNovo = "MEU CAMINHO/notaassinado.xml";
}


String caminhoCertificado = "MEU CAMINHO/Token.cfg";
String senha = "MINHA SENHA";

.
.
.

}
}

Esta mensagem foi editada 1 vez. Última atualização foi em 03/02/2020 09:43:30

thomasbrick1122

JavaC Membro

Membro desde: 28/12/2019 10:12:07
Mensagens: 2
Offline

Are you searching for the Essay Help in your city? If yes is your answer, then I am here to help you in the best possible manner. I am a professional writer having rich knowledge and experience in academic writing. I am sure that the essay written by me will make you get the best grade. So, why to think much, when you can avail such an incredible service that even at the cost-effective rates. Feel free to contact me at any time day or night. I am available 24*7 for you. Also, you can tell the format to our team of experts if you want your essay in any particular manner.
[Email] [WWW]
 
Índice dos Fóruns » NF-e / NFS-e / CT-e / CF-e / Certificados Digitais
Ir para:   
Powered by JForum 2.1.9 © JForum Team