SEFAZClient

De BIS Wiki
Ir para navegação Ir para pesquisar

O SEFAZClient é um projeto simplificado, não contém EJBs nem suporte para camadas de apresentação. Seu único objetivo é oferecer acesso transparente ao WebService do SEFAZ para os módulos do BIS.

Dependências

O SEFAZClient deve manter a menor quantidade de dependências possíveis para não atrapalhar sua portabilidade e uso em outros plugins ou aplicações a parte.

Dependências com o BIS

Atualmente temos apenas a dependência como pacote BISCoreClient para aproveitar a estrutura de Exceptions e outras classes utilitárias oferecidas de certificado.

Dependências de Bibliotecas

O SEFAZClient faz uso do Axis2 para validar, fazer o parse e gerar o XML utilizado no transporte, além de gerar as configurações de SOAP.

Utilização

A utilização do Client deve ser simples. O projeto oferece a classe 'SEFAZWS' que deve ser instanciada para definir a conexão do web service a ser utilizado, certificados, etc. Depois deve prover os métodos que oferecem os serviços do webservice.

Os objetos usados nos métodos da classe são oferecidos dentro do pacote junto. Este pacote não faz conversões dos objetos usados nele para nenhum interno à modulos ou plugins.

Note 64.png
Documentação dos Métodos
Para melhor documentação e orientação de como usar cada método verifica o JavaDoc da Classe 'SEFAZWS'

Base de Certificados Confiáveis

Para que a aplicação funcione adequadamente é preciso criar um repositório de certificados confiáveis para que a aplicação verifique se está se conectando em um webservice certificado pelo governo. Isso evita que qualquer pessoa possa levantar um webservice falso e intermediário para enganar o sistema e evitar que os dados da venda sejam enviados para a SEFAZ.

Normalmente a lista de certificados válidos costumam ser colocadas em um repositório de certificados (normalmente criado com a ferramenta do java keytool), e depois esse repositório é passado na configuração da conexão como uma lista de certificados confiáveis. Ao fazer isso o Java verifica se o certificado do servidor em que estamos tentando conectar está nessa lista. Se não estiver ele não permite a conexão reclamando que o certificado do servidor não é confiável.

O problema do repositório é que temos que baixar os certificados dos diferentes servidores de WebServices da SEFAZ de cada estado, DF e WS de contingência. E depois temos de dar manutenção a medida que vão vencendo. Além disso, a medida que forem vencendo teríamos que sair correndo e atualizar em cada cliente. O problema é que quanto mais próximo a SEFAZ atualiza o certificado perto da data de vencimento, menor é nosso prazo para atualizar os sistemas.

A maneira que o SEFAZClient encontrou para validar o certificado sem criar o repositório foi criar seu próprio "Validador de Certificados". É uma classe que recebe a cadeia de certificados do servidor e valida se algum dos certificados dessa cadeia é conhecida e aceita pela aplicação. Assim só teremos que dar manutenção quando as autoridades certificadoras (CA) se alterarem ou tiverem seu certificado vencido.


Criando o Repositório Automaticamente

Baseado em código garimpado da internet, o SEFAZClient possui uma classe chamada SEFAZBuildTrustRepository, auto executável, capaz de conectar nos endereços dos WebServices, baixar a cadeia de certificados do servidor e salvar automaticamente em um repositório.

Mesmo que o repositório não esteja mais sendo utilizado para validar a cadeia de certificados do servidor, este código continua no projeto porque pode set útil no futuro.