Problema
Após configurar um ambiente para receber conexões via SSL/TLS, o teste no SQLPLUS falhou com seguinte erro:
ORA-28864: SSL connection closed gracefully
Consultando o log do listener, o mesmo apresentava essa mensagem a cada tentativa de conexão:
ORA-29106: Cannot import PKCS #12 wallet
Após alguns testes e análises pra confirmar que todas as configurações estavam corretas nos arquivos sqlnet.ora e listener.ora, notei uma diferença no comportamento de quanto tentava exibir o conteúdo da wallet com o usuário oracle (DB Owner), e com o usuário grid (Listener Owner):
Com oracle, o conteúdo era exibido sem pedir senha da wallet (wallet com auto login):
[oracle@lab03 wallet]$ orapki wallet display -wallet .
Oracle PKI Tool Release 19.0.0.0.0 - Production
Version 19.4.0.0.0
Copyright (c) 2004, 2024, Oracle and/or its affiliates. All rights reserved.
Enter wallet password:
Requested Certificates:
User Certificates:
Subject: CN=lab03
Trusted Certificates:
Subject: CN=lab03
Subject: CN=oraclient01
Com grid, o mesmo comando solicitava a senha da wallet:
[grid@lab03 wallet]$ orapki wallet display -wallet .
Oracle PKI Tool Release 19.0.0.0.0 - Production
Version 19.4.0.0.0
Copyright (c) 2004, 2024, Oracle and/or its affiliates. All rights reserved.
Enter wallet password:
Causa
Nessa configuração, o listener e a instância RDBMS estão compartilhando a mesma wallet que contém os certificados. Apesar da wallet ter sido criada pelo usuário oracle, o usuário grid pode acessar o conteúdo da wallet desde que o diretório tenha permissão de leitura e execução para o usuário grid.
No entanto, para a conexão funcionar corretamente, ambos (grid e oracle) precisam acessar o conteúdo da wallet sem o uso de senha (auto-login). O problema aqui é que eu criei a wallet com a opção “-auto_login_local” ao invés de “-auto_login“.
A diferença é que a opção “-auto_login” permite que a wallet seja aberta automaticamente em qualquer lugar que ela seja copiada, e por qualquer usuário que tenha permissão no diretório em que ela reside. Diferente disso, a opção “-auto_login_local” é mais restritiva e só abre a wallet automaticamente se a origem do acesso for exatamente a mesma máquina e usuário que a criou.
Note que o listener não precisa necessariamente compartilhar a mesma wallet que a instância RDBMS, na verdade o normal e mais aconselhável é que use uma wallet dedicada mesmo. Mas se a wallet for criada com o usuário “oracle” e depois copiada para o diretório do usuário “grid”, aconteceria o mesmo problema caso ela seja do tipo “-auto_login_local“
Solução
Para solucionar isso, precisamos converter wallet de -auto_login_local para -auto_login.
1) Remova os arquivos “sso” do diretório da wallet:
cd /u01/app/oracle/admin/CDBTSSL/wallet mkdir BKP cp *.* BKP rm -f *sso*
2) Configure a wallet como auto login novamente (essa operação vai pedir a senha da wallet):
orapki wallet create -wallet . -auto_login chmod 750 *
Exemplo:
[oracle@lab03 wallet]$ orapki wallet create -wallet . -auto_login
Oracle PKI Tool Release 19.0.0.0.0 - Production
Version 19.4.0.0.0
Copyright (c) 2004, 2024, Oracle and/or its affiliates. All rights reserved.
Enter wallet password:
Operation is successfully completed.
Testando
Validando que a wallet está abrindo automaticamente.
Usuário oracle:
[oracle@lab03 wallet]$ orapki wallet display -wallet .
Oracle PKI Tool Release 19.0.0.0.0 - Production
Version 19.4.0.0.0
Copyright (c) 2004, 2024, Oracle and/or its affiliates. All rights reserved.
Requested Certificates:
User Certificates:
Subject: CN=lab03
Trusted Certificates:
Subject: CN=lab03
Subject: CN=oraclient01
Usuário grid:
[grid@lab03 wallet]$ orapki wallet display -wallet .
Oracle PKI Tool Release 19.0.0.0.0 - Production
Version 19.4.0.0.0
Copyright (c) 2004, 2024, Oracle and/or its affiliates. All rights reserved.
Requested Certificates:
User Certificates:
Subject: CN=lab03
Trusted Certificates:
Subject: CN=lab03
Subject: CN=oraclient01
Testando a conexão no client com sqlplus novamente:
[maicon@oraclient01]$ sqlplus c##test@cdbtssl
SQL*Plus: Release 19.0.0.0.0 - Production on Thu Sep 5 16:02:34 2024
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle. All rights reserved.
Enter password:
Last Successful login time: Thu Sep 05 2024 15:38:04 -03:00
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.24.0.0.0
SQL>