DEV Community

Cover image for Adicionando um certificado cliente em uma wallet Oracle
Valter Zanchetti Filho
Valter Zanchetti Filho

Posted on • Edited on

Adicionando um certificado cliente em uma wallet Oracle

Alguns bancos brasileiros como Santander e Itaú exigem um certificado digital de cliente na hora de chamar suas APIs REST. Fazer isso diretamente via Oracle isso é um pouco irritante, visto que exige a criação de uma wallet específica para poder chamar esses serviços via MAKE_REST_REQUEST. Por isso, muita gente desiste e acabar fazendo as chamadas através de aplicações intermediárias. Neste artigo vamos abordar como fazer essas conexões REST diretamente via banco de dados com o MAKE_REST_REQUEST do APEX.

Para criar a wallet você precisa ter um Oracle Client versão full instalado, já que precisaremos do orapki. Não adianta ter o Instant Client. Ele também vem incluso nas versões do Oracle Database. Na minha opinião, não vale a pena baixar e instalar o cliente full ou banco de dados completo quando queremos apenas utilizar o OraPKI, mas isso fica a seu critério.

Você consegue saber um pouco mais sobre como usar o orapki sem precisar baixar o Full Cliente neste meu artigo aqui:

Creating and Configuring Wallets with OraPKI (Without Needing the Full Oracle Client)

A partir daqui você já precisa ter acesso ao orapki.

A primeira coisa que você precisa fazer, caso ainda não tenha uma wallet é criar uma. Para criar pode rodar o comando abaixo, substituindo a pasta por uma pasta de sua escolha:

orapki wallet create -wallet "C:\Users\valter\Downloads\adu" -pwd 123456xx
Enter fullscreen mode Exit fullscreen mode

Após executar este comando você irá ver que ele gerou a wallet no seu sistema operacional, conforme demonstrado abaixo.

Depois disso, você vai começar importando o certificado do cliente com o comando abaixo. Primeiro o diretório onde fica a carteira e depois o difetório onde fica o .pfx do certificado do cliente e a senha do certificado de cliente:

orapki wallet import_pkcs12 -wallet "C:\Users\valter\Downloads\adu" -pwd 123456xx -pkcs12file "C:\Users\valter\OneDrive\Desktop\certificado_a_importar\user_cert.pfx" -pkcs12pwd 123456
Enter fullscreen mode Exit fullscreen mode

Após executar você deverá receber essa mensagem de sucesso:

orapki command import_pkcs12 executed successfully.

Normalmente, você também precisará adicionar os certificados dos servidores do serviço no qual você quer conectar na parte dos certificados confiáveis da wallet

orapki wallet add -wallet "C:\Users\valter\Downloads\adu" -trusted_cert -cert "G:\Meu Drive\Aplicativos\OraPKI\certs\ICP-BR\AC_VALID_RFB_v5.crt" -pwd 123456xx
Enter fullscreen mode Exit fullscreen mode

Você consegue verificar agora todo o conteúdo da sua wallet com este compando:

orapki wallet display -wallet "C:\Users\valter\Downloads\adu" -pwd 123456xx
Enter fullscreen mode Exit fullscreen mode

Deverá mostrar os certificados de cliente e os certificados confiáveis como na tela abaixo:

Agora você precisa fazer o upload dessa wallet para algum diretório acessível pelo seu banco de dados. No meu exemplo, 'file:/opt/oracle/wallets/adu/'. Em alguns testes precisei colocar uma / no final e em outros não foi necessário. Testei em duas bases diferentes. Comece tentando sem a / no final do nome da wallet, deve funcionar.

Devemos adicionar os privilégios para os owners solicitados com SYS ou ADMIN. Segue abaixo o comando utilizado para atribuir os privilégios. Lembre de substituir YOUR_OWNER pelo nome do seu owner e APEX_230200 para a versão do seu banco

BEGIN

-- APEX
 DBMS_NETWORK_ACL_ADMIN.APPEND_WALLET_ACE(       
  wallet_path => 'file:/opt/oracle/wallets/adu/',
  ace     => xs$ace_type(
           privilege_list => xs$name_list('use_client_certificates', 'use_passwords'),
           principal_name => 'APEX_230200',
           principal_type => xs_acl.ptype_db
          )

 );

-- OWNER
DBMS_NETWORK_ACL_ADMIN.APPEND_WALLET_ACE(       
  wallet_path => 'file:/opt/oracle/wallets/adu/',
  ace     => xs$ace_type(
           privilege_list => xs$name_list('use_client_certificates', 'use_passwords'),
           principal_name => 'YOUR_OWNER',
           principal_type => xs_acl.ptype_db
          )
 );

end;
Enter fullscreen mode Exit fullscreen mode

Daqui pra frente é sua apontar a wallet na hora de chamar o serviço via MAKE_REST_REQUEST.

Top comments (0)