Desenvolvi um sistema nfe … com o certificado a1 ele funciona certinho…porém com o certificado tipo A3 de cartão ele não funciona…sempre me retorna o “Error 403.7 Forbidden: SSl cliente certificate is required”
Estou com o certificado da caixa… que já me incomodei no passado com o do tipo A1 no qual tive que gerar um pfx com os certificados raizes que pra variar não vieram junto…creio que nesse caso seja a mesma coisa…porém não quero mecher no cartão do cliente…vai saber…
Tentei implementar algo utilizando exemplos que achei na internet…de adicionar esses certificados no cacerts usando uma classe chamada NFeBuildAllCacerts, no qual gera o arquivo NFeCacerts para efetuar consultas para todos os estados… e nessa classe tem os comandos
setCertFromFile("CertRaizCaixa"+File.separator + "ICP-Brasil.cer", ks);
setCertFromFile("CertRaizCaixa"+File.separator +"AC CAIXA v1.cer", ks);
setCertFromFile("CertRaizCaixa"+File.separator +"AC CAIXA PJ v1.cer", ks);
setCertFromFile("CertRaizCaixa"+File.separator +"AC CAIXA PJ 1v1.cer", ks);
setCertFromFile("CertRaizCaixa"+File.separator +"AC CAIXA PF v1.cer", ks);
setCertFromFile("CertRaizCaixa"+File.separator +"AC CAIXA PF 1v1.cer", ks);
setCertFromFile("CertRaizCaixa"+File.separator + "ICP-Brasil v2.cer", ks);
setCertFromFile("CertRaizCaixa"+File.separator +"AC CAIXA v2.cer", ks);
setCertFromFile("CertRaizCaixa"+File.separator +"AC CAIXA PF v2.cer", ks);
setCertFromFile("CertRaizCaixa"+File.separator +"AC CAIXA PJ v2.cer", ks);
que no qual teoricamente deveria inserir os certificados que baixei do site da caixa para dentro do arquivo…
porém quando tento fazer uma consulta…o erro 403.7 persisite…
minha configuração de ajuste do ssl está assim
Provider p = new sun.security.pkcs11.SunPKCS11("SmartCard.cfg");
Security.addProvider(p);
char[] pin = senhaCertificadoCliente.toCharArray();
KeyStore ks = KeyStore.getInstance("pkcs11", p);
ks.load(null, pin);
String alias = "";
Enumeration<String> aliasesEnum = ks.aliases();
while (aliasesEnum.hasMoreElements()) {
alias = (String) aliasesEnum.nextElement();
if (ks.isKeyEntry(alias)) break;
}
System.setProperty("sun.security.ssl.allowUnsafeRenegotiation", "true");
System.setProperty("javax.net.ssl.keyStoreType", "PKCS11");
System.setProperty("javax.net.ssl.keyStore", "NONE");
System.setProperty("javax.net.ssl.keyStoreProvider", p11ProviderName); // Tem q saber qual o provider dele (SmartCard, Safesig, etc).
System.setProperty("javax.net.ssl.keyStoreAlias", alias);
System.setProperty("javax.net.ssl.keyStorePassword", senhaCertificadoCliente);
System.setProperty("java.protocol.handler.pkgs", "com.sun.net.ssl.internal.www.protocol");
System.setProperty("javax.net.ssl.trustStoreType", "JKS");
System.setProperty("javax.net.ssl.trustStore", "NFeCacerts");//Aqui vem o arquivo criado através do comando keytool
System.setProperty("javax.net.ssl.trustStorePassword", "changeit");
Também tentei utilizar a solução proposta aqui http://www.javac.com.br/jc/posts/list/376.page nas sem exito…
também nesse link http://www.javac.com.br/jc/posts/list/222-resolvendo-o-problema-4037-forbidden-para-certificado-a3-protocolsocketfactory.page mas também não funcionou… sempre o mesmo erro
Mas nada funciona…
Obs…não estou usando o axis para manipulação dos ws…e sim o jaxb e jaxws será que poderia ser isso o problema… pois todos as resoluções que vi…o pessoal estava usando o axis