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> 

Leave a Reply

Discover more from Blog do Dibiei

Subscribe now to keep reading and get access to the full archive.

Continue reading