Passo a passo de configuração proxy-db-oracle

O funcionamento do proxy-db-oracle consiste em duas etapas de autenticação:

  1. Usuário do Segura autentica no proxy-db-oracle;
  2. proxy-db-oracle autentica no Oracle destino.

A configuração necessária para usar o proxy está descrito na documentação oficial mas este artigo simplifica alguns pontos. Para viabilizar o inicio de sessão da aplicação Segura, o passo a passo a seguir deve ser seguido e validado antes de iniciar sessões, demandando algumas ressalvas e detalhes a validar com o DBA responsável.

3 etapas principais durante a configuração:

  1. Configuração no servidor oracle
  2. Configuração no Segura
  3. Configuração no workstation do usuário

1) Configuração no servidor oracle

:double_exclamation_mark: A etapa 1.4 pode causar indisponibilidade temporária do servidor e, caso alguma informação seja inserida incorretamente, poderá impedir o funcionamento dos listeners. :double_exclamation_mark:

:double_exclamation_mark: Recomendamos fortemente que qualquer tentativa de familiarização com essa configuração seja realizada previamente em ambiente de laboratório, e não em ambiente de produção. Também é fundamental realizar backups dos arquivos listener.ora e sqlnet.ora antes de qualquer alteração. :double_exclamation_mark:

:double_exclamation_mark: Execute com cautela e apenas se tiver certeza dos parâmetros a serem aplicados. :double_exclamation_mark:

:double_exclamation_mark: Caso tenha problemas, reverta os arquivos de configuração com o backup feito e reinicie os listeners. :double_exclamation_mark:

:double_exclamation_mark: Iniciar os listeners com o TCPS habilitado (configuração necessária nos arquivos de configuração do Oracle para que nosso proxy funcione, detalhada na etapa 1.2) no sqlnet.ora faz com que o login do tipo sqlplus / as sysdba, utilizado via SSH ou em rotinas de backup/consulta, deixe de funcionar. Como alternativa, utilize um usuário SYS ou SYSTEM com senha simples para essas operações, pois os únicos usuários atingidos serão esse e o definido na etapa 1.1.5. :double_exclamation_mark:

Requisitos

  • Oracle DB Server configurado com a versão mínima 19.0.0.0.0
  • Servidor com ORAPKI instalado, para a criação das Wallets.
  • Conectividade da workstation do usuário com o Segura® nas portas 1521 e 2484.
  • Client de Banco de dados instalado.
    • Dbeaver versão mínima: 23.1.0
    • SQLPlus versão mínima: 21.0.0.0.0
    • SQL Developer versão mínima: 23.1.0.097

1.1 Configurar a wallet para Oracle em Cluster

Somente será necessário realizar este passo se não houver nenhuma wallet.

1.1.1 Criar a wallet no servidor oracle:

orapki wallet create -wallet <ORACLE_WALLET_DIR> -pwd <ORACLE_WALLET_PASS> -auto_login

image

1.1.2 Adicionar certificado auto assinado na wallet. Caso já exista uma wallet e ela tenha algum certificado, não seria necessário adicionar este certificado. Porém, ainda terá que adicionar o certificado da credencial descrita mais tarde.

orapki wallet add -wallet <ORACLE_WALLET_DIR> -pwd <ORACLE_WALLET_PASS> -dn "CN=<ORACLE_SERVER>" -keysize 2048 -self_signed -validity 3650

1.1.4 Validar os certificados existentes na wallet (até este ponto deve existir apenas um certificado na wallet ou os criados antes da configuração):

orapki wallet display -wallet <ORACLE_WALLET_DIR>

1.1.5 Gerar o certificado autoassinado da credencial do oracle (usuario para hacer login no oracle database). Veja que a CN deve ser igual ao username. Este comando gera uma key e um crt com o CN do usuário oracle:

openssl req -x509 -newkey rsa:4096 -sha256 -days 3650 -nodes -keyout <CREDENTIAL>.key -out <CREDENTIAL>.crt -subj "/CN=<CREDENTIAL>"


:red_exclamation_mark: ESSES ARQUIVOS DEVEM SER SALVOS PARA POSTERIOR UPLOAD NA ETAPA X :red_exclamation_mark:

1.1.6 Converter o .crt para .12

openssl pkcs12 -export -out <CREDENTIAL>.p12 -inkey <CREDENTIAL>.key -in <CREDENTIAL>.crt -passout pass:<CREDENTIAL_CERT_PASS>

1.1.7 Importar o p12 para a wallet criada na etapa 1.1.1

orapki wallet import_pkcs12 -pkcs12file <CREDENTIAL>.p12 -pkcs12pwd <CREDENTIAL_CERT_PASS> -wallet <ORACLE_WALLET_DIR> -pwd <ORACLE_WALLET_PASS>

1.1.8 Validar os certificados

A wallet deve possuir 2 certificados até esse ponto. Um para o servidor e outro para a credencial. Caso já tenha certificados antes da configuração, visualizará um certificado adicional com o CN do usuário a ser usado pelo proxy para login no oracle.

orapki wallet display -wallet <ORACLE_WALLET_DIR>

1.2 Configurar arquivos oracle listener.ora e sqlnet.ora no servidor oracle

Usualmente, em arquitetura grid o usuário grid edita o listener.ora e o usuário oracle o sqlnet.ora. Na arquitetura standalone, o usuário oracle edita os dois arquivos.

A localização desses arquivos muda dependendo da versão e configuração feita no deploy. Em caso de dúvidas, um DBA deve ser consultado.

De forma geral, esses arquivos são encontrados na pasta network/admin do Oracle Home.

Exemplo de comandos que ajudam a encontrar os arquivos:

echo $ORACLE_HOME
cd $ORACLE_HOME/network/admin
cat listener.ora
cat sqlnet.ora

A configuração do listener.ora deve ser exatamente igual â configuração a seguir ou pelo menos realizar o equivalente aos parâmetros a seguir. Perceba também que o diretorio da wallet criada na etapa 1.1.8 é passada aqui:

Esta configuração pode funcionar em ambas arquiteturas de standalone ou grid.

Uma possível alternativa na configuração de arquiteturas grid, seria escolher o IP da máquina a ser acessada pelo cofre.

Configuração de exemplo do listener.ora (contem a wallet da etapa 1.1.8):

SSL_CLIENT_AUTHENTICATION = TRUE
WALLET_LOCATION = (SOURCE = (METHOD = FILE) (METHOD_DATA = (DIRECTORY = <ORACLE_WALLET_DIR>)))
LISTENER = 
	(DESCRIPTION_LIST = 
		(DESCRIPTION = 
			(ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521))
			(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
			(ADDRESS = (PROTOCOL = TCPS)(HOST = 0.0.0.0)(PORT = 2484))
		)
)

Configuração do sqlnet.ora (contem a wallet da etapa 1.1.8) :

WALLET_LOCATION = (SOURCE = (METHOD = FILE) (METHOD_DATA = (DIRECTORY = <ORACLE_WALLET_DIR>)))
SQLNET.AUTHENTICATION_SERVICES = (TCPS,BEQ)
SSL_CLIENT_AUTHENTICATION = TRUE

1.3 Alterar/criar usuário no oracle database:

Para esta etapa é necessária uma conta sysdba ou com privilégios de suficientes.

:red_exclamation_mark: Veja que o CN do usuário alterado/criado deve ser o mesmo CN que o certificado criado na etapa 1.1.5 :red_exclamation_mark:

SQL> ALTER SESSION SET "_ORACLE_SCRIPT"=true;
SQL> CREATE USER <CREDENTIAL> IDENTIFIED EXTERNALLY AS 'CN=<CREDENTIAL>';
SQL> GRANT CREATE SESSION TO <CREDENTIAL>;

Caso o usuário já exista, deve adaptar o comando para ALTER

SQL> ALTER SESSION SET "_ORACLE_SCRIPT"=true;
SQL> ALTER USER <CREDENTIAL> IDENTIFIED EXTERNALLY AS 'CN=<CREDENTIAL>'
SQL> GRANT CREATE SESSION TO <CREDENTIAL>

1.4 Reiniciar listeners do oracle

:double_exclamation_mark: A etapa 1.4 pode causar indisponibilidade temporária do servidor e, caso alguma informação seja inserida incorretamente, poderá impedir o funcionamento dos listeners.

:double_exclamation_mark: Recomendamos fortemente que qualquer tentativa de familiarização com essa configuração seja realizada previamente em ambiente de laboratório, e não em ambiente de produção e backups dos arquivos listener.ora e sqlnet.ora sejam realizados antes de qualquer configuração. :double_exclamation_mark:

:double_exclamation_mark: Execute com cautela e apenas se tiver certeza dos parâmetros a serem aplicados.:double_exclamation_mark:

:double_exclamation_mark: Caso tenha problemas, reverta os arquivos de configuração com o backup feito e reinicie os listeners novamente.:double_exclamation_mark:

Para arquiteturas standalone:

lsrnctl stop
lsnrctl start

Para grid:
Stop listener

srvctl stop listener -l listener
srvctl stop scan_listener
srvctl stop scan

Start listener


srvctl start scan
srvctl start scan_listener
srvctl start listener -l listener

lsnrctl status

1.5 Como validar se a configuração está correta no servidor oracle

Caso a configuração tenha funcionado, pode validar usando os comandos linux:

lnsrctl status

O comando “lsnrctl status” deve listar:

  • O listener na porta 1521, onde os usuários normais se conectam;
  • O listener na porta 2484, onde os usuários que utilizam o proxy devem conectar depois da etapa 1.3;
  • Os services da instância do banco;

O comando a seguir deve listar os certificados da wallet do servidor oracle e é um bom teste de conectividade na etapa de autenticação cofre → oracle.

No cofre, execute:

openssl s_client -showcerts -connect [ORACLEDATABASE_IP]:2484

O comando deve ser adaptado para ler o certificado do workstation até o cofre também:
No workstation do usuário use:

openssl s_client -showcerts -connect [SEGURA_IP]:2484

2) Configuração na interface web do Segura:

2.2) Registrar as informações do Oracle no cofre

Na interface web, deve-se configurar:

  • O dispositivo com conectividades nas portas 1521, 2484, contendo o IP da maquina oracle destino;

  • A credencial registrada no cofre, atrelada ao dispositivo criado acima, com o username da etapa 1.1.5;

  • A credencial registrada também deve ter o .crt e o .key criados na etapa 1.1.5 e salvos na configuração da credencial. Depois de fazer o upload dos arquivos, os mesmos não aparecem como salvos via interface web mas isso é so um erro de presentação;

Menu da credencial > Session Settings

O .crt vai no certificate file e o key no campo key file. Como não colocou-se senha na key do certificado, claramente o campo fica vazio

2.3) Criar uma wallet com o certificado do usuário do PAM;

Tem dois métodos de configurar uma wallet de usuário do PAM.

2.3.3 Criar wallet via automação (método recomendado)

Para isso, primeiro configura-se uma credencial e dispositivo com orapki (binário necessário) e credencais necessárias para criar uma wallet, na tela a seguir do PAM, campo System Parameters > Global > Application > Oracle wallet automation credential:

Usualmente o usuário oracle usado via ssh possui as permissões corretas para conseguir gerar uma wallet, e deve ser a usada no campo em questão.

Uma vez veito isso, o usuário na interface web poderá gerar wallets usando a opção User options > My certificate > Oracle Wallet > Gerar a wallet e esperar uns minutos > Voltar no mesmo menu e fazer download do arquivo da wallet.zip

Esse arquivo .zip é a wallet do usuário e deve ser descompactada antes de utilizar.

Exemplo:

Isso finaliza as configurações da etapa 2 e resta a configuração no workstation do usuário a não ser que o método alternativo seja necessário.

2.3.4 Usar o p12 do usuário para gerar a wallet via orapki (método alternativo)

Caso o usuário via automação não funcione, o p12 pode ser importado de volta para o servidor oracle.

Esse p12 é usado para gerar uma wallet.

Essa wallet é usada no workstation mas pode ser gerada em qualquer instância com orapki instalado da seguinte forma:

2.3.4.1 Baixar o arquivo p12 da interface web (método alternativo):

A senha do p12 é configurada no mesmo menu caso ainda não tenha criado o certificado:

2.3.4.2) Transferir o p12 de volta ao servidor oracle usando winscp ou algum programa simila (método alternativo)r;

2.3.4.3) Gerar a wallet e importar o certificado p12 manualmente (método alternativo);

orapki wallet create -wallet “<USER_WALLET_DIR>” -pwd
<USER_WALLET_PASS> -auto_login

orapki wallet import_pkcs12 -pkcs12file .p12 -pkcs12pwd
<USER_CERT_PASS> -wallet “<USER_WALLET_DIR>” -pwd <USER_WALLET_PASS>

Depois, utilize winscp para transferir essa wallet do usuário de dentro do oracle server de volta para o workstation

Isso finaliza as configurações da etapa 2 e resta a configuração no workstation do usuário.

3) Configuração no workstation do usuário

A etapa final envolve configurar variáveis de ambiente necessários pela Oracle para funcionamento com o nosso proxy.

Requisitos:

Para usuários que conectem usando sql developer:

Para usuários que conectem pelo dbeaver:

  • Instant client 21_8;
  • Dbeaver 25 ou 23;

3.1 Configurar os arquivos sqlnet.ora e tnsnames.ora do usuário

O sqlnet.ora do lado do cliente é simples:

SQLNET.AUTHENTICATION_SERVICES = (TCPS, BEQ, NTS)
SSL_CLIENT_AUTHENTICATION = TRUE

O tnsnames.ora, por outro lado, precisa de varios campos de configuração:

Exemplo (substituir por valores do ambiente):

mt4adm =
        (DESCRIPTION=
                (ADDRESS=
                        (PROTOCOL=TCPS)
                        (HOST=10.10.10.44)
                        (PORT=2484)
                )
                (CONNECT_DATA=
                        (SENHASEGURA=
                                (USERNAME=mt4web)
                                (CREDENTIAL=oraclesegura)
                                (DEVICE=10.10.10.33)
                                (PORT=2484)
                                (TOTP=000000))
                (SERVER=DEDICATED)
                (SERVICE_NAME=pdb1)
                )
                (SECURITY =
                        (MY_WALLET_DIRECTORY="C:\Users\user\oracle\mt4web_oracledb_wallet")
                )

        )

No exemplo acima:

Cofre: 10.10.10.44
Oracle: 10.10.10.33
Username Segura: mt4web
Credencial oracle: oraclesegura
Identificador da conexão na conexão jdbc: mt4adm
Service name: Serviço que roda dentro do oracle para autenticar a credencial oracle, no exemplo “oraclesegura”.
MY_WALLET_DIRECTORY: caminho da wallet do usuário

3.2 Configurar variáveis de ambiente do workstation

No workstation, por convenção dentro dos fluxos de autenticação de clientes oracle, os arquivos sqlnet.ora e tnsnames.ora costumam a ficar no diretório salvo na variável TNS_ADMIN.

Continuando esse padrão, vamos validar duas variáveis:

  • TNS_ADMIN deve ser igual à pasta que contem os arquivos sqlnet.ora e tnsnames.ora do workstation;
  • O PATH do workstation deve conter o diretorio do instant_client 21_8;

Exemplo:

Comandos via cmd para validar variáveis de ambiente:

Pasta usada no exemplo:

Com isso em mente, a ultima etapa de de configuração é dentro dos clientes.

3.3 Configurar programas para iniciar conexão pelo proxy:

3.3.1 Configurar Dbeaver e conectar!!

Usar URL customizada e tipo de autenticação SO:

URL exempo:

jdbc:oracle:oci:@mt4adm

Veja que o “mt4adm” vem do identificador do arquivo tnsnames.ora

3.3.2 Configurar SQL Developer e conectar!!

Configuração de drivers:

Configuração da conexão, usando a mesma URL de autenticação que o DBEAVER:

3.3.3 Configurar sqlplus