TrustManager para SEFAZ

De Wiki do Leitão
Ir para: navegação, pesquisa

Para a conexão SSL funcionar entre os Stubs criados pelo Axis2 e o WS da SEFAZ é necessário configura-la com os certificados aceitos. Entendo que certificados aceitos, são os certificados públicos do WS da própria SEFAZ. Falhar em informar o Axis quais são os certificados aceitos e reconhecidos como seguros para a conexão fará com que a conexão SSL falhe no handshake.


A SEFAZ atualiza seus certificados de tempos em tempos, seja por vencimento, seja por vontade própria (como tem feito nas últimas atualizações de versões).

Ter os certificados inseridos diretamente no código traria o problema de que a cada atualização de certificado seria necessário uma compilação e atualização do módulo, o que pode ser inviável dependendo do passo e desatualização do sistema.

A solução de ter um TrustManager próprio para tentar identificar seria ainda pior, pois a SEFAZ já alterou a CA inteira resultando no mesmo problema, além da brecha de segurança de falta de validação do certificado real.


Por isso o módulo espera que todos os certificados públicos da SEFAZ que devem ser aceitos na comunicação sejam passados para o módulo. Para isso, todos os certificados da SEFAZ devem ser inseridos em um KeyStore, gerando um arquivo .jks.


Segue o passo a passo de como fazer isso:

Baixando o Certificado Público do Serviço

Para baixar o certificado público basta entrar no endereço do serviço, como por exemplo https://nfe.fazenda.sp.gov.br/ws/cadconsultacadastro4.asmx.

Clique no certificado e veja os detalhes do certificado:

CertDownload1.jpg


Note 64.png
Certificado Inválido
Depois da mudança da CA da SEFAZ alguns navegadores passaram a considerar o certificado como inseguro. Isso acontece porque o chrome não reconhece a CA da SEFAZ como Autoridade confiável, mas isso não quer dizer que o certificado tenha menos valor ou seja menos seguro. Se tiver certeza de que está no endereço da receita, pode utilizar o certificado sem problemas.


CertDownload2.jpg


Exporte cada um dos certificados da hierarquia inteira de certificados. Sugiro que deixe o nome padrão sugerido, que normalmente é o nome exibido na hierarquia, para identificar os arquivos se necessário.


Colocando os Certificados no KeyStore

Para incluir todos os certificados dentro de uma KeyStore será necessário utilizar a ferramenta do Java: KeyTool.

Para simplificar o processo, o projeto do módulo dentro da pasta etc\SEFAZ Certificates tem um Script #createKeyStore.bat para ajudar nesta tarefa.

Coloque todos os certificados baixados dentro da pasta, deixe os certificados atuais serem versionados para referência.

Com os arquivos na pasta execute o script. Ele gerará um novo arquivo sefazca.jks para ser utilizado no módulo como referência dos certificados válidos.