Oracle Secure Sockets Layer
Você habilita a criptografia Secure Sockets Layer (SSL) para uma instância de banco de dados Oracle adicionando a opção Oracle SSL ao grupo de opções associado a instância de banco de dados Oracle. Você especifica a porta sobre a qual deseja se comunicar usando o SSL. É necessário configurar o SQL*Plus conforme mostrado na seção a seguir.
Você habilita a criptografia SSL para uma instância de banco de dados Oracle adicionando a opção Oracle SSL ao grupo de opções associado a 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.
Você pode usar a Secure Sockets Layer ou a Native Network Encryption, mas não ambas. Para obter mais informações, consulte Oracle Native Network Encryption.
É possível usar a criptografia SSL com todas as edições das seguintes versões do Oracle Database:
-
Oracle Database 21c (21.0.0)
-
Oracle Database 19c (19.0.0)
-
Oracle Database 12c Versão 2 (12.2)
-
Oracle Database 12c Versão 1 (12.1)
Não é possível usar a Oracle Native Network Encryption (NNE) na mesma instância. Se você usa a criptografia SSL, você deve desabilitar qualquer outra criptografia de conexão.
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. Para usar a opção Oracle SSL, use a configuração de opção SQLNET.SSL_VERSION
. Os seguintes valores são permitidos para essa configuração de opção:
-
"1.0"
– os clientes podem se conectar à instância de banco de dados usando somente o TLS 1.0. -
"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.
Para usar a opção Oracle SSL, a configuração de opção SQLNET.SSL_VERSION
é necessária também:
-
Para opções Oracle SSL existentes, a
SQLNET.SSL_VERSION
é definida como"1.0"
automaticamente. Você pode alterar a configuração se necessário. -
Quando você adiciona uma nova opção Oracle SSL, é necessário definir a
SQLNET.SSL_VERSION
explicitamente como um valor válido.
A tabela a seguir mostra as configurações de opção do TLS que oferecem suporte para versões e edições diferentes de mecanismos da Oracle.
Versão do mecanismo da Oracle | SQLNET.SSL_VERSION = "1.0" | SQLNET.SSL_VERSION = "1.2" | SQLNET.SSL_VERSION = "1.2 ou 1.0" |
---|---|---|---|
21.0.0.0 (todas as edições) |
Compatível |
Compatível |
Compatível |
19.0.0.0 (Todas as edições) |
Compatível |
Compatível |
Compatível |
12.2.0.1 (todas as edições) |
Compatível |
Compatível |
Compatível |
12.1.0.2 (todas as edições) |
Compatível |
Compatível |
Compatível |
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
. A seguir estão os valores permitidos para essa configuração de opção:
-
"SSL_RSA_WITH_AES_256_CBC_SHA"
– A configuração padrão, compatível com TLS 1.0 e TLS 1.2 -
"SSL_RSA_WITH_AES_256_CBC_SHA256"
– Apenas compatível com TLS 1.2 -
"SSL_RSA_WITH_AES_256_GCM_SHA384"
– Apenas compatível com TLS 1.2
Para opções Oracle SSL existentes, a SQLNET.CIPHER_SUITE
é definida como "SSL_RSA_WITH_AES_256_CBC_SHA"
automaticamente. Você pode alterar a configuração se necessário.
A tabela a seguir mostra as configurações de opções de pacotes de criptografia que têm suporte para versões e edições diferentes de mecanismos da Oracle.
Versão do mecanismo da Oracle | SQLNET.CIPHER_SUITE = "SSL_RSA_WITH_AES_256_CBC_SHA" | SQLNET.CIPHER_SUITE = "SSL_RSA_WITH_AES_256_CBC_SHA256" | SQLNET.CIPHER_SUITE = "SSL_RSA_WITH_AES_256_GCM_SHA384" |
---|---|---|---|
19.0.0.0 (Todas as edições) |
Compatível |
Compatível |
Compatível |
12.2.0.1 (todas as edições) |
Compatível |
Compatível |
Compatível |
12.1.0.2 (todas as edições) |
Compatível |
Compatível |
Compatível |
Suporte ao FIPS
O Amazon RDS for 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. Habilite o padrão FIPS definindo a configuração FIPS.SSLFIPS_140
como TRUE
para a opção do Oracle SSL. Quando o FIPS 140-2 é configurado para SSL, as bibliotecas criptográficas são projetadas para criptografar dados entre o cliente e a instância de banco de dados Oracle.
É possível habilitar a configuração do FIPS com as seguintes versões e edições do banco de dados Oracle:
19.0.0.0: todas as versões, todas as edições, incluindo o Standard Edition Two
12.2.0.1: todas as versões, todas as edições, incluindo o Standard Edition Two
12.1.0.2: versão 2 e posterior, todas as edições, incluindo Standard Edition Two
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 Oracle negociam qual pacote de criptografia deverá ser usado ao transmitir mensagens em ambas as direções. A tabela a seguir mostra os pacotes de criptografia SSL compatíveis com o FIPS para cada versão do TLS.
SQLNET.SSL_VERSION | Pacotes de criptografia compatíveis |
---|---|
1,0 |
SSL_RSA_WITH_AES_256_CBC_SHA |
1.2 |
SSL_RSA_WITH_AES_256_CBC_SHA SSL_RSA_WITH_AES_256_GCM_SHA384 |
Para obter mais informações, consulte Oracle Database FIPS 140-2 Settings
Adicionar a opção do SSL
Para usar o SSL, sua instância de banco de dados do Amazon RDS for 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 nova instância de banco de dados Oracle e associe a ela o grupo de opções ou modifique uma instância de banco de dados 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 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 nova instância de banco de dados Oracle e associe a ela o grupo de opções ou modifique uma instância de banco de dados 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 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.
Configurar o SQL*Plus para usar SSL com uma instância de banco de dados Oracle
É necessário configurar o SQL*Plus antes de se conectar a uma instância de banco de dados Oracle que usa a opção Oracle SSL.
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 obter 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 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/12.1.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 certificado raiz que funciona para todas as AWS regiões e coloque o arquivo no diretório ssl_wallet.
Para obter informações sobre como baixar o certificado raiz, consulte Como Usar SSL/TLS para criptografar uma conexão com uma instância de banco de dados.
-
No diretório
$ORACLE_HOME/network/admin
, modifique ou crie o arquivo tnsnames.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 obter 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 seguintes comandos para criar o Oracle Wallet.
prompt>orapki wallet create -wallet $ORACLE_HOME/ssl_wallet -auto_login_only prompt>orapki wallet add -wallet $ORACLE_HOME/ssl_wallet -trusted_cert -cert $ORACLE_HOME/ssl_wallet/
rds-ca-2019-root.pem
-auto_login_onlySubstitua o nome do arquivo pelo arquivo baixado.
Conectar-se a uma instância de banco de dados 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 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 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, use o seguinte comando. Para obter mais informações sobre como criar o repositório de chaves, consulte a documentação da Oracle
keytool -keystore clientkeystore -genkey -alias client
Depois, siga as etapas a seguir para confiar no certificado da CA raiz do Amazon RDS.
Para confiar no certificado da CA raiz do Amazon RDS
-
Faça download do certificado raiz que funciona para todas as AWS regiões e coloque o arquivo no diretório ssl_wallet.
Para obter informações sobre como fazer download do certificado raiz, consulte Como Usar SSL/TLS para criptografar uma conexão com uma instância de banco de dados.
-
Converta o certificado para o formato .der usando o seguinte comando.
openssl x509 -outform der -in
rds-ca-2019-root.pem
-out rds-ca-2019-root.derSubstitua o nome do arquivo pelo arquivo obtido por download.
-
Importe o certificado para o repositório de chaves usando o seguinte comando.
keytool -import -alias rds-root -keystore
clientkeystore.jks
-file rds-ca-2019-root.der -
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 } }
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 sua identificação.
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);