Boa tarde à todos!
Tô com um problema que muitos passaram aqui no fórum, porém até agora não consegui encontrar uma solução.
Não consigo comunicar com nenhum webservice em .NET.
Dá sempre a mensagem:
403.7 - Forbidden
O serviço que estou tentando acessar é o status do SCAN
https://hom.nfe.fazenda.gov.br/NFeStatusServico/NFeStatusServico.asmx?wsdl
Este é meu método que faz segurança na aplicação antes de consumir o serviço
private void setSecurity(String pathCertificado, String senhaCertificado,
boolean a3, String keyStore) throws KeyStoreException,
NoSuchAlgorithmException, CertificateException, IOException {
if (a3) {
Provider p = new sun.security.pkcs11.SunPKCS11(pathCertificado);
Security.addProvider(p);
KeyStore ks = KeyStore.getInstance("pkcs11");
ks.load(null, senhaCertificado.toCharArray());
System.setProperty("java.protocol.handler.pkgs",
"com.sun.net.ssl.internal.www.protocol");
System.setProperty("javax.net.ssl.keyStoreType", ks.getType());
System.setProperty("javax.net.ssl.keyStorePassword",
senhaCertificado);
} else {
System.setProperty("java.protocol.handler.pkgs",
"com.sun.net.ssl.internal.www.protocol");
Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
System.setProperty("javax.net.ssl.keyStoreType", "PKCS12");
System.setProperty("javax.net.ssl.keyStore", pathCertificado);
System.setProperty("javax.net.ssl.keyStorePassword",
senhaCertificado);
}
System.setProperty("javax.net.ssl.trustStoreType", "JKS");
System.setProperty("javax.net.ssl.trustStore", keyStore);
}
Creio que seja os Webservices em .NET exijam algum certificado que somente o IE possui, pois por ele eu acesso tranquilamente, mas com minha aplicação Java e pelo Firefox, neca!
Por favor ajudem um amigo Javaneiro !!!
Depois de muito caminhar consegui uma solução!!!
Vou postar aqui para ajudar a quem precisar pois este é um dos assuntos mais comentados em relação à NFe.
Parece que os webservices .NET de alguma forma não reconhecem o certificado do cliente original. Para resolver isso siga os passos:
1 - Importe o certificado .PFX do seu cliente para o IE >>> FERRAMENTAS/OPÇÕES DA INTERNET/ ABA CONTEÚDO / BOTÃO CERTIFICADOS.
2- Selecione a aba “Pessoal”.
3- Clique em importar.
4- O Sistema vai abrir um assistente. Selecione o Certificado e clique em avançar.
5- Na próxima tela MARQUE O CHECBOX “Marcar esta chave como exportável. Isso possibilitará o backup e transporte das chaves posteriormente”. Como o texto diz se você não marcar esta opção o certificado não poderá ser exportado
6- Após ser importado seu certificado vai para a aba Pessoal. Clique sobre ele e clique em “exportar”
7- Clique em avançar
8- Na próxima tela marque a opção: “Sim, exportar a chave privada”. Clique em avançar.
9- Na janela seguinte marque o checkbox “Incluir todos os certificados no caminho de certificação, se possível”. [color=blue]<<ESTA OPÇÃO É CRUCIAL NÃO ESQUEÇA DELA !!![/color]
10- Informe a senha e a seguir o local onde o arquivo será salvo.
PRONTO Feito isso está pronto você já pode utilizar o certificado no seu projeto.
Agora uma crítica, talvez seja ignorância a minha, mas porque somente os webservice em .NET fazem essa “exigência” para utilização do certificado ???
Agradeço a todos que tiveram a mesma atitude que a minha pois dessa forma não seria possível chegar a essa solução !
Pensamento do dia: “Eu gosto do Windows. O Windows que não gosta de mim.”
1 curtida
Compilar incluindo a chave publica não parece ser o mais adequado, pois quando expirar o certificado ou tiver que trocá-lo terá que gerar uma nova versão da aplicação.
Para ser mais objetivo, não é operacional, não é prático.
Se deixares o arquivo da chave pública no mesmo diretorio da aplicacao, basta trocar o arquivo quando necessário.
É apenas minha opinião, mas pensem, fica bem mais prático para implementar a aplicação.
Alex,
você conseguiu conectar no web services usando .NET? Eu tenho bastante experiência em Java porém estou num projeto usando especificamente .net (c#).
Sempre obtenho o erro 403. Forbidden. Já instalei e reinstalei o certificado .pfx de todas as formas, e até agora nada. Consigo acessar com sucesso o WSDL pelo IE e também usar o próprio aplicativo da receita. Mas no código c#… nada!
Acredito que seja da forma como estou importando o certificado para o código c#. Desculpe colocar c# aqui, mas esse problema tá persistindo por muito tempo e está dificil de achar a solução.
Obrigado
Olá alexegidio,
Esse tutorial simples me poupou várias horas!!! Pois no meu projeto, com certificação cruzada, não tinha me ligado que nos debugs do SSL que o PFX utilizado só tinha o certificado SEM as cadeias! :roll:
Fiz o que o tutorial disse, e deu certo!
Abraço.