

# Oracle Secure Sockets Layer
<a name="Appendix.Oracle.Options.SSL"></a>

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\$1Plus. 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 obter mais informações, consulte [Oracle Native Network Encryption](Appendix.Oracle.Options.NetworkEncryption.md).

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)

**Topics**
+ [Versões do TLS para a opção Oracle SSL](#Appendix.Oracle.Options.SSL.TLS)
+ [Pacotes de criptografia para a opção Oracle SSL](#Appendix.Oracle.Options.SSL.CipherSuites)
+ [Suporte ao FIPS](#Appendix.Oracle.Options.SSL.FIPS)
+ [Compatibilidade de certificados com pacotes de criptografia](#Appendix.Oracle.Options.SSL.CertificateCompatibility)
+ [Adicionar a opção do SSL](Appendix.Oracle.Options.SSL.OptionGroup.md)
+ [Configurar o SQL\$1Plus para usar SSL com uma instância de banco de dados do RDS para Oracle](Appendix.Oracle.Options.SSL.ClientConfiguration.md)
+ [Conectar-se a uma instância de banco de dados do RDS para Oracle usando SSL](Appendix.Oracle.Options.SSL.Connecting.md)
+ [Configurar uma conexão SSL via JDBC](Appendix.Oracle.Options.SSL.JDBC.md)
+ [Forçar uma correspondência de DN com uma conexão SSL](Appendix.Oracle.Options.SSL.DNMatch.md)
+ [Solução de problemas de conexões SSL](Appendix.Oracle.Options.SSL.troubleshooting.md)

## Versões do TLS para a opção Oracle SSL
<a name="Appendix.Oracle.Options.SSL.TLS"></a>

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, a `SQLNET.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
<a name="Appendix.Oracle.Options.SSL.CipherSuites"></a>

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\$1SUITE) | Versão do TLS compatível (SQLNET.SSL\$1VERSION) | Suporte ao FIPS | Conformidade com FedRAMP | 
| --- | --- | --- | --- | 
| SSL\$1RSA\$1WITH\$1AES\$1256\$1CBC\$1SHA (padrão) | 1.0 e 1.2 | Sim | Não | 
| SSL\$1RSA\$1WITH\$1AES\$1256\$1CBC\$1SHA256 | 1.2 | Sim | Não | 
| SSL\$1RSA\$1WITH\$1AES\$1256\$1GCM\$1SHA384 | 1.2 | Sim | Não | 
| TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1256\$1GCM\$1SHA384 | 1.2 | Sim | Sim | 
| TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1128\$1GCM\$1SHA256 | 1.2 | Sim | Sim | 
| TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1256\$1CBC\$1SHA384 | 1.2 | Sim | Sim | 
| TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1128\$1CBC\$1SHA256 | 1.2 | Sim | Sim | 
| TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1256\$1CBC\$1SHA | 1.2 | Sim | Sim | 
| TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1128\$1CBC\$1SHA | 1.2 | Sim | Sim | 
| TLS\$1ECDHE\$1ECDSA\$1WITH\$1AES\$1256\$1GCM\$1SHA384 | 1.2 | Sim | Sim | 
| TLS\$1ECDHE\$1ECDSA\$1WITH\$1AES\$1256\$1CBC\$1SHA384 | 1.2 | Sim | Sim | 

## Suporte ao FIPS
<a name="Appendix.Oracle.Options.SSL.FIPS"></a>

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](#Appendix.Oracle.Options.SSL.CipherSuites) 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](https://docs.oracle.com/en/database/oracle/oracle-database/12.2/dbseg/oracle-database-fips-140-settings.html#GUID-DDBEB3F9-B216-44BB-8C18-43B5E468CBBB) na documentação da Oracle.

## Compatibilidade de certificados com pacotes de criptografia
<a name="Appendix.Oracle.Options.SSL.CertificateCompatibility"></a>

O RDS para Oracle comporta os certificados RSA e Elliptic Curve Digital Signature Algorithm (ECDSA). Ao configurar o SSL para sua instância de banco de dados, você deve garantir que os pacotes de criptografia especificados na configuração da opção `SQLNET.CIPHER_SUITE` aceitem o tipo de certificado usado pela sua instância de banco de dados.

A tabela a seguir mostra a compatibilidade entre os tipos de certificado e pacotes de criptografia:


| Tipo de certificado | Pacotes de criptografia compatíveis | Pacotes de criptografia incompatíveis | 
| --- | --- | --- | 
| Pacotes de RSA (rds-ca-2019, rds-ca-rsa2048-g1, rds-ca-rsa4096-g1) |  SSL\$1RSA\$1WITH\$1AES\$1256\$1CBC\$1SHA SSL\$1RSA\$1WITH\$1AES\$1256\$1CBC\$1SHA256 SSL\$1RSA\$1WITH\$1AES\$1256\$1GCM\$1SHA384 TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1256\$1GCM\$1SHA384 TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1128\$1GCM\$1SHA256 TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1256\$1CBC\$1SHA384 TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1128\$1CBC\$1SHA256 TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1256\$1CBC\$1SHA TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1128\$1CBC\$1SHA  |  TLS\$1ECDHE\$1ECDSA\$1WITH\$1AES\$1256\$1GCM\$1SHA384 TLS\$1ECDHE\$1ECDSA\$1WITH\$1AES\$1256\$1CBC\$1SHA384  | 
| Certificados ECDSA (rds-ca-ecc384-g1) |  TLS\$1ECDHE\$1ECDSA\$1WITH\$1AES\$1256\$1GCM\$1SHA384 TLS\$1ECDHE\$1ECDSA\$1WITH\$1AES\$1256\$1CBC\$1SHA384  |  SSL\$1RSA\$1WITH\$1AES\$1256\$1CBC\$1SHA SSL\$1RSA\$1WITH\$1AES\$1256\$1CBC\$1SHA256 SSL\$1RSA\$1WITH\$1AES\$1256\$1GCM\$1SHA384 TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1256\$1GCM\$1SHA384 TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1128\$1GCM\$1SHA256 TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1256\$1CBC\$1SHA384 TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1128\$1CBC\$1SHA256 TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1256\$1CBC\$1SHA TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1128\$1CBC\$1SHA  | 

Ao especificar vários pacotes de criptografia na configuração da opção `SQLNET.CIPHER_SUITE`, inclua pelo menos um pacote de criptografia compatível com o tipo de certificado usado pela sua instância de banco de dados. Se você estiver usando um grupo de opções com várias instâncias de banco de dados com tipos de certificados diferentes, inclua pelo menos um pacote de criptografia para cada tipo de certificado.

Se você tentar associar um grupo de opções a uma opção SSL que contenha somente pacotes de criptografia incompatíveis com o tipo de certificado de uma instância de banco de dados, a operação falhará com uma mensagem de erro indicando a incompatibilidade.

# Adicionar a opção do SSL
<a name="Appendix.Oracle.Options.SSL.OptionGroup"></a>

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`.

## Console
<a name="Appendix.Oracle.Options.SSL.OptionGroup.Console"></a>

**Para adicionar a opção SSL a um grupo de opções**

1. 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](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.Create).

1. 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` como `TRUE`. Para obter informações sobre o padrão FIPS, consulte [Suporte ao FIPS](Appendix.Oracle.Options.SSL.md#Appendix.Oracle.Options.SSL.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](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.AddOption).

1. 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](USER_CreateDBInstance.md).

   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](Overview.DBInstance.Modifying.md).

## AWS CLI
<a name="Appendix.Oracle.Options.SSL.OptionGroup.CLI"></a>

**Para adicionar a opção SSL a um grupo de opções**

1. 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](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.Create).

1. 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 denominado `ora-option-group`.  
**Example**  

   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}]'
   ```

1. 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](USER_CreateDBInstance.md).

   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](Overview.DBInstance.Modifying.md).

# Configurar o SQL\$1Plus para usar SSL com uma instância de banco de dados do RDS para Oracle
<a name="Appendix.Oracle.Options.SSL.ClientConfiguration"></a>

É necessário configurar o SQL\$1Plus 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](Overview.RDSSecurityGroups.md). Além disso, essas instruções são para o SQL\$1Plus e outros clientes que usam diretamente um Oracle Home. Para conexões JDBC, consulte [Configurar uma conexão SSL via JDBC](Appendix.Oracle.Options.SSL.JDBC.md).

**Para configurar o SQL\$1Plus para usar SSL para se conectar a uma instância de banco de dados do RDS para Oracle**

1. 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\$1Plus](http://docs.oracle.com/database/121/SQPUG/ch_two.htm#SQPUG331) na documentação da Oracle e consulte também o guia de instalação da Oracle para o sistema operacional.

1. Adicione a variável de ambiente `$ORACLE_HOME/lib` ao `LD_LIBRARY_PATH`.

   O exemplo a seguir define a variável de ambiente LD\$1LIBRARY\$1PATH.

   ```
   prompt>export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib 
   ```

1. 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
   ```

1. Baixe o pacote do certificado .pem que funciona para todas as Regiões da AWS e coloque o arquivo no diretório ssl\$1wallet. Para mais informações, consulte [Usar SSL/TLS para criptografar uma conexão com uma instância ou um cluster de banco de dados](UsingWithRDS.SSL.md).

1. 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")
       )
     )
   ```

1. 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](https://docs.oracle.com/cd/E92519_02/pt856pbr3/eng/pt/tsvt/task_SettingUpOracleWalletUsingORAPKI.html) 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.

1. Execute os comandos a seguir para criar o Oracle Wallet.

   ```
   prompt>orapki wallet create -wallet $ORACLE_HOME/ssl_wallet -auto_login_only
   ```

1. Extraia cada certificado no arquivo do pacote .pem em um arquivo .pem separado usando um utilitário do sistema operacional.

1. Adicione cada certificado à carteira usando comandos `orapki` separados, substituindo `certificate-pem-file` pelo nome absoluto do arquivo .pem.

   ```
   prompt>orapki wallet add -wallet $ORACLE_HOME/ssl_wallet -trusted_cert -cert
         certificate-pem-file -auto_login_only
   ```

   Para obter mais informações, consulte [Alternar o certificado SSL/TLS](UsingWithRDS.SSL-certificate-rotation.md).

# Conectar-se a uma instância de banco de dados do RDS para Oracle usando SSL
<a name="Appendix.Oracle.Options.SSL.Connecting"></a>

Depois de configurar o SQL\$1Plus 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\$1Plus 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\$1Plus e um *<net\$1service\$1name>* 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\$1Plus 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
<a name="Appendix.Oracle.Options.SSL.JDBC"></a>

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](https://docs.oracle.com/cd/E35822_01/server.740/es_admin/src/tadm_ssl_jetty_keystore.html) na documentação da Oracle. Para ter informações de referência, consulte [keytool](https://docs.oracle.com/javase/8/docs/technotes/tools/windows/keytool.html) na *Java Platform, Standard Edition Tools Reference*.

```
keytool -genkey -alias client -validity 365 -keyalg RSA -keystore clientkeystore         
```

Siga estas etapas para confiar no certificado da CA raiz do Amazon RDS.

**Para confiar no certificado da CA raiz do Amazon RDS**

1. Baixe o pacote do certificado .pem que funciona para todas as Regiões da AWS e coloque o arquivo no diretório ssl\$1wallet.

   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](UsingWithRDS.SSL.md).

1. Extraia cada certificado no arquivo .pem em um arquivo separado usando um utilitário do sistema operacional.

1. Converta cada certificado no formato .der usando um comando `openssl` separado, substituindo *certificate-pem-file* pelo nome do arquivo .pem do certificado (sem a extensão .pem).

   ```
   openssl x509 -outform der -in certificate-pem-file.pem -out certificate-pem-file.der                
   ```

1. Importe cada certificado para o repositório de chaves usando o comando a seguir.

   ```
   keytool -import -alias rds-root -keystore clientkeystore.jks -file certificate-pem-file.der                
   ```

   Para ter mais informações, consulte [Alternar o certificado SSL/TLS](UsingWithRDS.SSL-certificate-rotation.md).

1. 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
<a name="Appendix.Oracle.Options.SSL.DNMatch"></a>

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
<a name="Appendix.Oracle.Options.SSL.troubleshooting"></a>

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](https://support.oracle.com/epmos/faces/DocumentDisplay?id=2748438.1) em My Oracle Support.