Login Registre-se
Token SafeNet 5100 para de funcionar em Windows 7  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: 8
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";

.
.
.

}
}
 
Índice dos Fóruns » NF-e / NFS-e / CT-e / CF-e / Certificados Digitais
Ir para:   
Powered by JForum 2.1.9 © JForum Team