Como configurar Oracle Wallet para consumo de APIs HTTPS
Tags:O Oracle Wallet é um repositório seguro de certificados digitais e chaves criptográficas. Ele permite que o Oracle Database se comunique com serviços externos via HTTPS, validando os certificados SSL/TLS apresentados pelos servidores remotos.
Esse processo é necessário quando se utiliza pacotes como UTL_HTTP, UTL_SMTP ou DBMS_LDAP em conexões seguras (HTTPS), especialmente para consumir APIs públicas como ViaCEP, ReceitaWS, SEFAZ, entre outras.
Este FAQ apresenta passo a passo como configurar o Oracle Wallet, importar certificados confiáveis e executar chamadas seguras a APIs externas utilizando PL/SQL.
1. Verificar as variáveis de ambiente do Oracle
Essas variáveis definem onde estão instalados o Oracle Database (ORACLE_HOME) e a base (ORACLE_BASE). Isso ajuda a localizar o local correto para criar a wallet.
2. Criar diretório do Oracle Wallet
Crie uma pasta para armazenar os arquivos da wallet (normalmente dentro de $ORACLE_BASE/admin/).
3. Baixar os certificados HTTPS da API desejada
Esse comando se conecta à API e extrai toda a cadeia de certificados, salvando no arquivo fullchain.pem.
4. Dividir os certificados em arquivos individuais
Separa o fullchain.pem em xx01, xx02, xx03...
5. Classificar os certificados
Use os comandos abaixo para identificar cada um dos arquivos e classificá-los como:
-
Certificado do site (subject = domínio): não precisa importar
-
Certificados intermediários (subject <> issuer): importar
-
Certificado raiz (subject = issuer): importar
6. Renomear os arquivos identificados
Renomeie os arquivos para facilitar o uso:
7. Criar o Oracle Wallet com senha e auto login
8. Importar certificados confiáveis no Wallet
9. Verificar os certificados adicionados
10. Configurar o arquivo sqlnet.ora
Edite:
Adicione:
WALLET_LOCATION =
(SOURCE =
(METHOD = FILE)
(METHOD_DATA =
(DIRECTORY = /oracle/admin/orcl/wallet)
)
)
SSL_CLIENT_AUTHENTICATION = FALSE
11. Conceder permissão para o banco acessar a API (ACL)
BEGIN
DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE(
host => 'viacep.com.br',
ace => xs$ace_type(
privilege_list => xs$name_list('connect'),
principal_name => 'NOME_DO_USUARIO',
principal_type => xs_acl.ptype_db
)
);
END;
/
12. Garantir que o usuário pode usar o pacote UTL_HTTP
13. Exemplo completo de chamada HTTPS com PL/SQL
DECLARE
req UTL_HTTP.req;
resp UTL_HTTP.resp;
value VARCHAR2(32767);
BEGIN
UTL_HTTP.SET_WALLET('file:/oracle/admin/orcl/wallet', 'Supinf12!');
req := UTL_HTTP.BEGIN_REQUEST('https://viacep.com.br/ws/01001000/json/');
UTL_HTTP.SET_HEADER(req, 'User-Agent', 'Mozilla/5.0');
resp := UTL_HTTP.GET_RESPONSE(req);
LOOP
UTL_HTTP.READ_LINE(resp, value, TRUE);
DBMS_OUTPUT.PUT_LINE(value);
END LOOP;
UTL_HTTP.END_RESPONSE(resp);
EXCEPTION
WHEN UTL_HTTP.END_OF_BODY THEN
UTL_HTTP.END_RESPONSE(resp);
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Erro: ' || SQLERRM);
UTL_HTTP.END_RESPONSE(resp);
END;
/
Outros Artigos
Nenhum artigo relacionado.