DEV Community

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

Posted 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)