Oracle Secure Sockets Layer
Para habilitar a criptografia SSL para uma instância de banco de dados do RDS para Oracle, adicione a opção Oracle SSL ao grupo de opções associado à instância de banco de dados. O Amazon RDS usa uma segunda porta, conforme exigido pela Oracle, para conexões SSL. Essa abordagem permite que comunicações de texto sem formatação e de texto com criptografia SSL ocorram ao mesmo tempo entre uma instância de banco de dados e o SQL*Plus. Por exemplo, você pode usar a porta com comunicação de texto simples para se comunicar com outros recursos dentro de uma VPC enquanto usa a porta com comunicação criptografada em SSL para se comunicar com recursos fora da VPC.
nota
É possível usar SSL ou a Native Network Encryption (NNE) na mesma instância de banco de dados do RDS para Oracle, mas não ambas. Se você usar a criptografia SSL, desative qualquer outra criptografia de conexão. Para ter mais informações, consulte Oracle Native Network Encryption.
SSL/TLS e NNE não fazem mais parte do Oracle Advanced Security. No RDS para Oracle, é possível usar a criptografia SSL com todas as edições licenciadas das seguintes versões do banco de dados:
-
Oracle Database 21c (21.0.0)
-
Oracle Database 19c (19.0.0)
Versões do TLS para a opção Oracle SSL
O Amazon RDS for Oracle oferece suporte ao Transport Layer Security (TLS) versões 1.0 e 1.2. Quando você adiciona uma nova opção Oracle SSL, defina SQLNET.SSL_VERSION
explicitamente como um valor válido. Os seguintes valores são permitidos para essa configuração de opção:
-
"1.0"
: os clientes só podem se conectar à instância de banco de dados usando o TLS versão 1.0. Para opções Oracle SSL existentes, aSQLNET.SSL_VERSION
é definida como"1.0"
automaticamente. Você pode alterar a configuração se necessário. -
"1.2"
– os clientes podem se conectar à instância de banco de dados usando somente o TLS 1.2. -
"1.2 or 1.0"
– os clientes podem se conectar à instância de banco de dados usando o TLS 1.2 ou 1.0.
Pacotes de criptografia para a opção Oracle SSL
O Amazon RDS for Oracle oferece suporte para vários pacotes de criptografia SSL. Por padrão, a opção Oracle SSL está configurada para usar o pacote de criptografia SSL_RSA_WITH_AES_256_CBC_SHA
. Para especificar um pacote de criptografia diferente para usar em conexões SSL, use a configuração da opção SQLNET.CIPHER_SUITE
.
É possível especificar vários valores para SQLNET.CIPHER_SUITE
. Essa técnica é útil caso você tenha links de banco de dados entre suas instâncias de banco de dados e decida atualizar seus pacotes de criptografia.
A tabela a seguir resume o suporte a SSL no RDS para Oracle em todas as edições do Oracle Database 19c e 21c.
Suíte de cifras (SQLNET.CIPHER_SUITE) | Versão do TLS compatível (SQLNET.SSL_VERSION) | Suporte ao FIPS | Conformidade com FedRAMP |
---|---|---|---|
SSL_RSA_WITH_AES_256_CBC_SHA (padrão) | 1.0 e 1.2 | Sim | Não |
SSL_RSA_WITH_AES_256_CBC_SHA256 | 1.2 | Sim | Não |
SSL_RSA_WITH_AES_256_GCM_SHA384 | 1.2 | Sim | Não |
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 | 1.2 | Sim | Sim |
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 | 1.2 | Sim | Sim |
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 | 1.2 | Sim | Sim |
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 | 1.2 | Sim | Sim |
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA | 1.2 | Sim | Sim |
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA | 1.2 | Sim | Sim |
Suporte ao FIPS
O RDS para Oracle permite usar o padrão FIPS (Federal Information Processing Standard) para 140-2. O FIPS 140-2 é um padrão do governo dos Estados Unidos que define os requisitos de segurança de módulos criptográficos. Ative o padrão FIPS definindo FIPS.SSLFIPS_140
como TRUE
para a opção do Oracle SSL. Quando o FIPS 140-2 é configurado para SSL, as bibliotecas criptográficas criptografam dados entre o cliente e a instância de banco de dados do RDS para Oracle.
Os clientes devem usar o pacote de criptografia compatível com o FIPS. Ao estabelecer uma conexão, o cliente e a instância de banco de dados do RDS para Oracle negociam qual pacote de criptografia deverá ser usado ao transmitir mensagens nas duas direções. A tabela em Pacotes de criptografia para a opção Oracle SSL mostra os pacotes de criptografia SSL compatíveis com o FIPS para cada versão do TLS. Para receber mais informações, consulte Oracle Database FIPS 140-2 Settings
Adicionar a opção do SSL
Para usar SSL, sua instância de banco de dados do RDS para Oracle deve estar associada a um grupo de opções que inclua a opção SSL
.
Para adicionar a opção SSL a um grupo de opções
-
Crie um novo grupo de opções ou identifique um grupo de opções existente ao qual você pode adicionar a opção
SSL
.Para obter informações sobre como criar um grupo de opções, consulte Criar um grupo de opções.
-
Adicione a opção
SSL
ao grupo de opções.Se você quiser usar somente pacotes de criptografia verificados para o FIPS para conexões SSL, defina a opção
FIPS.SSLFIPS_140
comoTRUE
. Para obter informações sobre o padrão FIPS, consulte Suporte ao FIPS.Para obter informações sobre como adicionar uma opção a um grupo de opções, consulte Adicionar uma opção a um grupo de opções.
-
Crie uma instância de banco de dados do RDS para Oracle e associe a ela o grupo de opções ou modifique uma instância de banco de dados do RDS para Oracle para associar o grupo de opções a ela.
Para obter informações sobre como criar uma instância de banco de dados, consulte Criar uma instância de banco de dados do Amazon RDS.
Para ter mais informações sobre a modificação de uma instância de banco de dados, consulte Modificar uma instância de banco de dados do Amazon RDS.
Para adicionar a opção SSL a um grupo de opções
-
Crie um novo grupo de opções ou identifique um grupo de opções existente ao qual você pode adicionar a opção
SSL
.Para obter informações sobre como criar um grupo de opções, consulte Criar um grupo de opções.
-
Adicione a opção
SSL
ao grupo de opções.Especifique as seguintes configurações de opção:
-
Port
– O número da porta SSL -
VpcSecurityGroupMemberships
– O grupo de segurança da VPC para o qual a opção está ativada -
SQLNET.SSL_VERSION
– A versão do TLS que o cliente pode usar para se conectar à instância de banco de dados
Por exemplo, o seguinte comando da AWS CLI adiciona a opção
SSL
a um grupo de opções denominadoora-option-group
.exemplo
Para Linux, macOS ou Unix:
aws rds add-option-to-option-group --option-group-name ora-option-group \ --options 'OptionName=SSL,Port=2484,VpcSecurityGroupMemberships="sg-68184619",OptionSettings=[{Name=SQLNET.SSL_VERSION,Value=1.0}]'
Para Windows:
aws rds add-option-to-option-group --option-group-name ora-option-group ^ --options 'OptionName=SSL,Port=2484,VpcSecurityGroupMemberships="sg-68184619",OptionSettings=[{Name=SQLNET.SSL_VERSION,Value=1.0}]'
-
-
Crie uma instância de banco de dados do RDS para Oracle e associe a ela o grupo de opções ou modifique uma instância de banco de dados do RDS para Oracle para associar o grupo de opções a ela.
Para obter informações sobre como criar uma instância de banco de dados, consulte Criar uma instância de banco de dados do Amazon RDS.
Para obter informações sobre a modificação de uma instância de banco de dados, consulte Modificar uma instância de banco de dados do Amazon RDS.
Configurar o SQL*Plus para usar SSL com uma instância de banco de dados do RDS para Oracle
É necessário configurar o SQL*Plus para se conectar a uma instância de banco de dados do RDS para Oracle que use a opção Oracle SSL.
nota
Para permitir o acesso à instância de banco de dados a partir dos clientes apropriados, verifique se os grupos de segurança estão configurados corretamente. Para ter mais informações, consulte Controlar acesso com grupos de segurança. Além disso, essas instruções são para o SQL*Plus e outros clientes que usam diretamente um Oracle Home. Para conexões JDBC, consulte Configurar uma conexão SSL via JDBC.
Para configurar o SQL*Plus para usar SSL para se conectar a uma instância de banco de dados do RDS para Oracle
-
Defina a variável de ambiente
ORACLE_HOME
como o local do diretório inicial do Oracle.O caminho para o diretório inicial do Oracle depende da instalação. O exemplo a seguir define a variável de ambiente
ORACLE_HOME
.prompt>export ORACLE_HOME=/home/user/app/user/product/19.0.0/dbhome_1
Para obter informações sobre como definir variáveis de ambiente do Oracle, consulte Variáveis de ambiente do SQL*Plus
na documentação da Oracle e consulte também o guia de instalação da Oracle para o sistema operacional. -
Adicione a variável de ambiente
$ORACLE_HOME/lib
aoLD_LIBRARY_PATH
.O exemplo a seguir define a variável de ambiente LD_LIBRARY_PATH.
prompt>export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib
-
Crie um diretório para o Oracle Wallet em
$ORACLE_HOME/ssl_wallet
.Este é um exemplo que cria o diretório do Oracle Wallet.
prompt>mkdir $ORACLE_HOME/ssl_wallet
-
Baixe o pacote do certificado .pem que funciona para todas as Regiões da AWS e coloque o arquivo no diretório ssl_wallet. Para ter mais informações, consulte Usar SSL/TLS para criptografar uma conexão com uma instância ou um cluster de banco de dados.
-
No diretório
$ORACLE_HOME/network/admin
, modifique ou crie o arquivotnsnames.ora
e inclua a entrada a seguir.net_service_name
= (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCPS) (HOST =endpoint
) (PORT =ssl_port_number
) ) ) (CONNECT_DATA = (SID =database_name
) ) (SECURITY = (SSL_SERVER_CERT_DN = "C=US,ST=Washington,L=Seattle,O=Amazon.com,OU=RDS,CN=endpoint
") ) ) -
No mesmo diretório, modifique ou crie o arquivo sqlnet.ora e inclua os seguintes parâmetros.
nota
Para se comunicar com entidades por meio de uma conexão protegida por TLS, a Oracle requer uma carteira com os certificados necessários para autenticação. Você pode usar o utilitário ORAPKI da Oracle para criar e manter carteiras Oracle, conforme mostrado na etapa 7. Para ter mais informações, consulte Configurar o Oracle Wallet usando ORAPKI
na documentação da Oracle. WALLET_LOCATION = (SOURCE = (METHOD = FILE) (METHOD_DATA = (DIRECTORY = $ORACLE_HOME/ssl_wallet))) SSL_CLIENT_AUTHENTICATION = FALSE SSL_VERSION = 1.0 SSL_CIPHER_SUITES = (SSL_RSA_WITH_AES_256_CBC_SHA) SSL_SERVER_DN_MATCH = ON
nota
Você poderá definir
SSL_VERSION
como um valor mais alto se sua instância de banco de dados for compatível. -
Execute os comandos a seguir para criar o Oracle Wallet.
prompt>orapki wallet create -wallet $ORACLE_HOME/ssl_wallet -auto_login_only
-
Extraia cada certificado no arquivo do pacote .pem em um arquivo .pem separado usando um utilitário do sistema operacional.
-
Adicione cada certificado à carteira usando comandos
orapki
separados, substituindo
pelo nome absoluto do arquivo .pem.certificate-pem-file
prompt>orapki wallet add -wallet $ORACLE_HOME/ssl_wallet -trusted_cert -cert
certificate-pem-file
-auto_login_onlyPara ter mais informações, consulte Alternar o certificado SSL/TLS.
Conectar-se a uma instância de banco de dados do RDS para Oracle usando SSL
Depois de configurar o SQL*Plus para usar SSL, conforme descrito anteriormente, você pode se conectar à instância de banco de dados do RDS para Oracle com a opção SSL. Opcionalmente, primeiro é possível exportar o valor de TNS_ADMIN
que aponta para o diretório que contém os arquivos tnsnames.ora e sqlnet.ora. Isso garante que o SQL*Plus possa encontrar esses arquivos de forma consistente. O exemplo a seguir exporta o valor de TNS_ADMIN
.
export TNS_ADMIN = ${ORACLE_HOME}/network/admin
Conecte-se à instância de banco de dados. Por exemplo, você pode se conectar usando o SQL*Plus e um <net_service_name>
em um arquivo tnsnames.ora.
sqlplus
mydbuser
@net_service_name
Você também pode se conectar à instância de banco de dados usando o SQL*Plus sem utilizar um arquivo tnsnames.ora, por meio do seguinte comando.
sqlplus '
mydbuser
@(DESCRIPTION = (ADDRESS = (PROTOCOL = TCPS)(HOST =endpoint
) (PORT =ssl_port_number
))(CONNECT_DATA = (SID =database_name
)))'
Você também pode se conectar à instância de banco de dados do RDS para Oracle sem usar a SSL. Por exemplo, o seguinte comando se conecta à instância de banco de dados por meio da porta de texto sem formatação sem criptografia SSL.
sqlplus '
mydbuser
@(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST =endpoint
) (PORT =port_number
))(CONNECT_DATA = (SID =database_name
)))'
Se você deseja fechar o acesso à porta do protocolo TCP, crie um security group sem entradas de endereço IP e adicione-o à instância. Essa inclusão encerra as conexões através da porta TCP, embora ainda permita conexões sobre a porta SSL especificadas a partir de endereços IP dentro do intervalo permitido pelo security group da opção SSL.
Configurar uma conexão SSL via JDBC
Para usar uma conexão SSL via JDBC, é necessário criar um repositório de chaves, confiar no certificado da CA raiz do Amazon RDS e usar o trecho de código especificado a seguir.
Para criar o repositório de chaves no formato JKS, é possível usar o comando a seguir. Para ter mais informações sobre como criar o repositório de chaves, consulte Creating a keystore
keytool -genkey -alias
client
-validity365
-keyalgRSA
-keystoreclientkeystore
Siga estas etapas para confiar no certificado da CA raiz do Amazon RDS.
Para confiar no certificado da CA raiz do Amazon RDS
-
Baixe o pacote do certificado .pem que funciona para todas as Regiões da AWS e coloque o arquivo no diretório ssl_wallet.
Para obter informações sobre como baixar certificados, consulte Usar SSL/TLS para criptografar uma conexão com uma instância ou um cluster de banco de dados.
-
Extraia cada certificado no arquivo .pem em um arquivo separado usando um utilitário do sistema operacional.
-
Converta cada certificado no formato .der usando um comando
openssl
separado, substituindocertificate-pem-file
pelo nome do arquivo .pem do certificado (sem a extensão .pem).openssl x509 -outform der -in
certificate-pem-file
.pem -outcertificate-pem-file
.der -
Importe cada certificado para o repositório de chaves usando o comando a seguir.
keytool -import -alias rds-root -keystore
clientkeystore.jks
-filecertificate-pem-file
.derPara ter mais informações, consulte Alternar o certificado SSL/TLS.
-
Confirme se o armazenamento de chaves foi criado com êxito.
keytool -list -v -keystore
clientkeystore.jks
Insira a senha do repositório de chaves quando solicitado.
O exemplo de código a seguir mostra como configurar a conexão SSL usando o JDBC.
import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.util.Properties; public class OracleSslConnectionTest { private static final String DB_SERVER_NAME = "
dns-name-provided-by-amazon-rds
"; private static final Integer SSL_PORT = "ssl-option-port-configured-in-option-group
"; private static final String DB_SID = "oracle-sid
"; private static final String DB_USER = "user-name
"; private static final String DB_PASSWORD = "password
"; // This key store has only the prod root ca. private static final String KEY_STORE_FILE_PATH = "file-path-to-keystore
"; private static final String KEY_STORE_PASS = "keystore-password
"; public static void main(String[] args) throws SQLException { final Properties properties = new Properties(); final String connectionString = String.format( "jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCPS)(HOST=%s)(PORT=%d))(CONNECT_DATA=(SID=%s)))", DB_SERVER_NAME, SSL_PORT, DB_SID); properties.put("user", DB_USER); properties.put("password", DB_PASSWORD); properties.put("oracle.jdbc.J2EE13Compliant", "true"); properties.put("javax.net.ssl.trustStore", KEY_STORE_FILE_PATH); properties.put("javax.net.ssl.trustStoreType", "JKS"); properties.put("javax.net.ssl.trustStorePassword", KEY_STORE_PASS); final Connection connection = DriverManager.getConnection(connectionString, properties); // If no exception, that means handshake has passed, and an SSL connection can be opened } }
nota
Especifique uma senha diferente do prompt mostrado aqui como prática recomendada de segurança.
Forçar uma correspondência de DN com uma conexão SSL
Você pode usar o parâmetro Oracle SSL_SERVER_DN_MATCH
para forçar que o nome distinto (DN) do servidor de banco de dados corresponda ao nome do serviço. Se você forçar as verificações de correspondência, a SSL assegurará que o certificado seja proveniente do servidor. Se você não forçar a verificação de correspondência, a SSL realizará a verificação, mas permitirá a conexão, independentemente de haver ou não uma correspondência. Se você não forçar a correspondência, permitirá que o servidor falsifique a identidade.
Para forçar a correspondência de DN, adicione a propriedade de correspondência de DN e use a string de conexão especificada abaixo.
Adicione a propriedade à conexão de cliente para reforçar a correspondência de DN.
properties.put("oracle.net.ssl_server_dn_match", "TRUE");
Use a seguinte string de conexão para forçar a correspondência de DN ao usar a SSL.
final String connectionString = String.format( "jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCPS)(HOST=%s)(PORT=%d))" + "(CONNECT_DATA=(SID=%s))" + "(SECURITY = (SSL_SERVER_CERT_DN = \"C=US,ST=Washington,L=Seattle,O=Amazon.com,OU=RDS,CN=%s\")))", DB_SERVER_NAME, SSL_PORT, DB_SID, DB_SERVER_NAME);
Solução de problemas de conexões SSL
Você pode consultar seu banco de dados e receber o erro ORA-28860
.
ORA-28860: Fatal SSL error 28860. 00000 - "Fatal SSL error" *Cause: An error occurred during the SSL connection to the peer. It is likely that this side sent data which the peer rejected. *Action: Enable tracing to determine the exact cause of this error.
Esse erro ocorre quando o cliente tenta se conectar usando uma versão do TLS não compatível com o servidor. Para evitar esse erro, edite o sqlnet.ora e defina SSL_VERSION
como a versão correta do TLS. Para ter mais informações, consulte o Documento de suporte da Oracle 2748438.1