• Stars
    star
    448
  • Rank 97,523 (Top 2 %)
  • Language
    Java
  • License
    Apache License 2.0
  • Created over 4 years ago
  • Updated over 3 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Quickstart da API do DICT

DICT - QuickStart

Bem-vindo ao QuickStart do DICT, o Diretório de Identificadores de Contas Transacionais do PIX (Sistema de Pagamentos Instantâneos do Banco Central do Brasil). O objetivo é guiar o usuário/desenvolvedor no primeiro contato com a API do DICT. O público-alvo são profissionais de TI dos Prestadores de Serviços de Pagamentos (PSP). Se você não faz parte desse grupo, provavelmente o código aqui apresentado não servirá a nenhum propósito.

A aplicação gerada nesse guia só irá funcionar se for executada a partir de uma máquina conectada à RSFN (Rede do Sistema Financeiro Nacional), e com certificados ISPB válidos e registrados previamente para fins de realização de Pagamentos Instantâneos.

Se você tiver alguma dúvida, ou se esse é seu primeiro contato com o PIX ou com o DICT, recomendamos que verifique a página oficial do ecossitema de pagamentos instantâneos, especialmente: Especificações Técnicas e de Negócio; Manual das Interfaces de Comunicação; Manual de Conectividade com a RSFN; e o Manual de Segurança.

Esse projeto é disponibilizado com propósito didático, e não deve ser utilizado como base para construção da integração final do PSP com o DICT. Ele não dá soluções 'robustas' para questões como: gestão de certificados na abertura do canal TLS, ou fluxos de tratamento de falhas nas operações.

O projeto é disponibilizado sob a licença APACHE 2.0 (arquivo LICENSE). Ao baixar o projeto você está concordando com os termos da licença. Em resumo: não nos responsabilizamos por nenhum problema decorrente do uso desse código! Utilize-o por sua própria conta e risco.

Observações:

  • O DICT utiliza autenticação TLS mútua: o cliente também precisa se autenticar. Verifique o processo de registro do certificado no documento "Especificações Técnicas e de Negócio do Ecossistema de Pagamentos Instantâneos Brasileiro".

  • No quickstart, para simplificar, os objetos criptográficos (certificado e chave privada) são armazenados em arquivos, mas isso não deve ser replicado no ambiente de produção! Recomendamos a utilização de um hardware security module (HSM) para gerenciar o acesso a essas informações.

  • O processo de assinatura digital das requisições ao DICT é exemplificado no quickstart. No entanto, as assinaturas das respostas do DICT não estão sendo validadas. Para produção, é fundamental que as assinaturas digitais sejam corretamente validadas.

  • Para pleno funcionamento e geração correta das classes cliente, matenha as versões utilizadas neste exemplo.

  • A documentação oficial da API e do DICT podem ser consultadas no projeto de interface do DICT

Tecnologias utilizadas:

Java 8 (jdk8u232-b09) 
Maven 3.6.2

Passo a passo:

  • Baixe a aplicação com o seguinte comando:
git clone https://github.com/bacen/pix-dict-quickstart.git
  • Dentro da pasta do projeto, execute:
 mvn package

No passo acima, as classes necessárias são criadas a partir da especificação (spec.yaml)

Para executar a aplicação, deve-se informar a localização e a senha dos objetos criptográficos, bem como o ISPB do participante. Nesse exemplo são usados dois keystores distintos: um para conexão TLS e outro passa assinatura digital.

java -Djavax.net.ssl.keyStore=${PWD}/channel.pfx \
     -Djavax.net.ssl.keyStorePassword=changeit \
     -jar target/dict-quickstart.jar \
     -ispb <ispb-do-participante> \
     -signatureKeyStore signature.pfx \
     -signatureKeyStorePassword changeit \
     -baseAddress https://dict-h.pi.rsfn.net.br/api/v1-rc6

Problemas e Soluções

Problema Solução
sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target Deve-se importar o certicado da AC Raiz (v5) da ICP-Brasil para a keystore da JVM que está executando a aplicação
javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure Na execução, deve-se fornecer a localização e a senha de acesso do arquivo que armazena o certificado e a chave privada
Entry associated with given key does not exist Verifique se o ISPB do participante foi definido corretamente
Entry in custody of participant. Use your book transfer O participante não pode consultar as chaves que estão sob sua custódia
Participant is not allowed to access this resource Verifique se o ISPB informado na linha de comando é o mesmo do certificado
Could not get content org.apache.http.conn.ConnectTimeoutException: Connect to github.com:443 O Maven não está conseguindo baixar o arquivo spec.yaml do github. Você provavelmente está atrás de um proxy. Se for esse o caso, informe o proxy na linha de comando mvn clean install -Dhttp.proxyHost=12.23.34.45 -Dhttp.proxyPort=1234 -Dhttps.proxyHost=12.23.34.45 -Dhttps.proxyPort=1234. Opcionalmente, baixe manualmente o arquivo 'spec.yaml' disponível em https://github.com/bacen/pix-dict-api e salve na pasta src/main/resources, e execute o mvn da seguinte forma: mvn clean install -Ddownload.plugin.skip=true

Exemplos

  • Importar o certificado da AC ICPBR, usando shell BASH, no Linux:
keytool -import \
        -trustcacerts \
        -keystore ${JAVA_HOME}/jre/lib/security/cacerts \
        -storepass changeit \
        -alias acraiz-icpbr \
        -file  <(curl -sk http://acraiz.icpbrasil.gov.br/credenciadas/RAIZ/ICP-Brasilv5.crt)
  • Gerar keystores PKCS#12 (signature.pfx e channel.pfx) importando o certificado e a chave no formato PEM:
openssl pkcs12 -export -in client.crt -inkey client.key -out signature.pfx -name client -password pass:changeit