

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Aggiornamento delle applicazioni per la connessione a istanze DB MySQL utilizzando nuovi certificati SSL/TLS
<a name="ssl-certificate-rotation-mysql"></a>

A partire dal 13 gennaio 2023, Amazon RDS ha pubblicato nuovi certificati Certificate Authority (CA) per la connessione alle istanze DB RDS utilizzando Secure Socket Layer o Transport Layer Security (). SSL/TLS Di seguito sono disponibili le informazioni sull'aggiornamento delle applicazioni per utilizzare i nuovi certificati.

Questo argomento può aiutarti a determinare se alcune applicazioni client vengono utilizzate SSL/TLS per connettersi alle tue istanze DB. In caso affermativo, puoi determinare anche se le applicazioni richiedono la verifica del certificato per la connessione. 

**Nota**  
Alcune applicazioni sono configurate per connettersi ai cluster DB MySQL solo se sono in grado di verificare il certificato del server. Per queste applicazioni, è necessario aggiornare gli archivi di trust delle applicazioni client per includere i nuovi certificati CA.   
Puoi specificare le seguenti modalità SSL: `disabled`, `preferred` e `required`. Quando si utilizza la modalità SSL `preferred` e il certificato CA non esiste o non è aggiornato, la connessione non utilizza SSL e continua a connettersi senza crittografia.  
Consigliamo di evitare la modalità `preferred`. In modalità `preferred`, se la connessione rileva un certificato non valido, interrompe l'utilizzo della crittografia e procede in modo non crittografato.

Dopo aver aggiornato i certificati CA negli archivi di trust delle applicazioni client, puoi ruotare i certificati nelle istanze database. Consigliamo vivamente di testare queste procedure in un ambiente di sviluppo o di gestione temporanea prima di implementarle negli ambienti di produzione.

Per ulteriori informazioni sulla rotazione dei certificati, consulta [Rotazione del certificato SSL/TLS](UsingWithRDS.SSL-certificate-rotation.md). Per ulteriori informazioni sul download, consulta [](UsingWithRDS.SSL.md). Per informazioni sull'utilizzo SSL/TLS con le istanze DB MySQL, consulta. [SSL/TLS supporto per istanze DB MySQL su Amazon RDS](MySQL.Concepts.SSLSupport.md)

**Topics**
+ [Determinare se un'applicazione si connette all’istanza database MySQL mediante SSL](#ssl-certificate-rotation-mysql.determining-server)
+ [Determinare se un client richiede la verifica del certificato per la connessione](#ssl-certificate-rotation-mysql.determining-client)
+ [Aggiornare l'archivio di trust delle applicazioni](#ssl-certificate-rotation-mysql.updating-trust-store)
+ [Codice Java di esempio per stabilire connessioni SSL](#ssl-certificate-rotation-mysql.java-example)

## Determinare se un'applicazione si connette all’istanza database MySQL mediante SSL
<a name="ssl-certificate-rotation-mysql.determining-server"></a>

Se utilizzi Amazon RDS for MySQL versione 5.7, 8.0 o 8.4 e lo schema delle prestazioni è abilitato, esegui la seguente query per verificare se le connessioni sono in uso. SSL/TLS Per informazioni sull'abilitazione dello schema delle prestazioni, consulta l'argomento relativo alla [guida rapida per lo schema delle prestazioni](https://dev.mysql.com/doc/refman/8.0/en/performance-schema-quick-start.html) nella documentazione di MySQL.

```
mysql> SELECT id, user, host, connection_type 
       FROM performance_schema.threads pst 
       INNER JOIN information_schema.processlist isp 
       ON pst.processlist_id = isp.id;
```

In questo output di esempio, puoi vedere che la tua sessione (`admin`) e un'applicazione collegata come `webapp1` stanno entrambe usando SSL.

```
+----+-----------------+------------------+-----------------+
| id | user            | host             | connection_type |
+----+-----------------+------------------+-----------------+
|  8 | admin           | 10.0.4.249:42590 | SSL/TLS         |
|  4 | event_scheduler | localhost        | NULL            |
| 10 | webapp1         | 159.28.1.1:42189 | SSL/TLS         |
+----+-----------------+------------------+-----------------+
3 rows in set (0.00 sec)
```

## Determinare se un client richiede la verifica del certificato per la connessione
<a name="ssl-certificate-rotation-mysql.determining-client"></a>

Puoi verificare se i client JDBC e MySQL richiedono la verifica del certificato per la connessione.

### JDBC
<a name="ssl-certificate-rotation-mysql.determining-client.jdbc"></a>

L'esempio seguente con Connector/J MySQL 8.0 mostra un modo per verificare le proprietà di connessione JDBC di un'applicazione per determinare se le connessioni riuscite richiedono un certificato valido. Per ulteriori informazioni su tutte le opzioni di connessione JDBC per MySQL, consulta l'argomento relativo alle [proprietà di configurazione](https://dev.mysql.com/doc/connector-j/en/connector-j-reference-configuration-properties.html) nella documentazione di MySQL.

Quando si utilizza Connector/J MySQL 8.0, una connessione SSL richiede la verifica rispetto al certificato del server DB se le proprietà della connessione `sslMode` sono impostate su `VERIFY_IDENTITY` o, come nell'`VERIFY_CA`esempio seguente.

```
Properties properties = new Properties();
properties.setProperty("sslMode", "VERIFY_IDENTITY");
properties.put("user", DB_USER);
properties.put("password", DB_PASSWORD);
```

**Nota**  
Se utilizzi MySQL Java Connector v5.1.38 o successivo oppure MySQL Java Connector v8.0.9 o successivo per connetterti ai tuoi database, anche se non hai configurato in modo esplicito le tue applicazioni da utilizzare per la connessione ai database, questi driver client vengono utilizzati per SSL/TLS impostazione predefinita. SSL/TLS Inoltre, quando vengono utilizzati SSL/TLS, eseguono una verifica parziale del certificato e non riescono a connettersi se il certificato del server di database è scaduto.

### MySQL
<a name="ssl-certificate-rotation-mysql.determining-client.mysql"></a>

I seguenti esempi con il client MySQL mostrano due modi per verificare la connessione MySQL di uno script per determinare se le connessioni riuscite richiedono un certificato valido. Per ulteriori informazioni su tutte le opzioni di connessione con MySQL Client, [ Client-side consulta la configurazione per le connessioni crittografate nella documentazione](https://dev.mysql.com/doc/refman/8.0/en/using-encrypted-connections.html#using-encrypted-connections-client-side-configuration) MySQL.

Quando utilizzi il client MySQL 5.7 e versioni successive, la connessione SSL richiede la verifica del certificato CA del server se per l’opzione `--ssl-mode` viene specificato `VERIFY_CA` o `VERIFY_IDENTITY`, come nell’esempio seguente.

```
mysql -h mysql-database.rds.amazonaws.com -uadmin -ppassword --ssl-ca=/tmp/{{ssl-cert.pem}} --ssl-mode=VERIFY_CA                
```

## Aggiornare l'archivio di trust delle applicazioni
<a name="ssl-certificate-rotation-mysql.updating-trust-store"></a>

Per informazioni sull'aggiornamento dell'archivio attendibilità per le applicazioni MySQL, consulta l'argomento relativo all'[installazione dei certificati SSL](https://dev.mysql.com/doc/mysql-monitor/8.0/en/mem-ssl-installation.html) nella documentazione di MySQL.

Per ulteriori informazioni sul download del certificato root, consulta [](UsingWithRDS.SSL.md).

Per gli script di esempio che importano i certificati, consulta [Script di esempio per l'importazione di certificati nel tuo archivio di trust](UsingWithRDS.SSL-certificate-rotation.md#UsingWithRDS.SSL-certificate-rotation-sample-script).

**Nota**  
Quando aggiorni l'archivio di trust puoi conservare i certificati meno recenti oltre ad aggiungere i nuovi certificati.

Se utilizzi il driver mysql JDBC in un'applicazione, imposta le seguenti proprietà nell'applicazione.

```
System.setProperty("javax.net.ssl.trustStore", {{certs}});
System.setProperty("javax.net.ssl.trustStorePassword", "{{password}}");
```

Quando avvii l'applicazione, imposta le seguenti proprietà.

```
java -Djavax.net.ssl.trustStore={{/path_to_trust_store/MyTruststore.jks}} -Djavax.net.ssl.trustStorePassword={{my_trust_store_password}} {{com.companyName.MyApplication}}        
```

**Nota**  
Specifica una password diversa dal prompt mostrato qui come best practice per la sicurezza.

## Codice Java di esempio per stabilire connessioni SSL
<a name="ssl-certificate-rotation-mysql.java-example"></a>

L'esempio di codice seguente mostra come configurare la connessione SSL che convalida il certificato del server utilizzando JDBC.

```
public class MySQLSSLTest {
     
        private static final String DB_USER = "{{username}}";
        private static final String DB_PASSWORD = "{{password}}";
        // This trust store has only the prod root ca.
        private static final String TRUST_STORE_FILE_PATH = "{{file-path-to-trust-store}}";
        private static final String TRUST_STORE_PASS = "{{trust-store-password}}";
            
        public static void test(String[] args) throws Exception {
            Class.forName("com.mysql.jdbc.Driver");
                    
            System.setProperty("javax.net.ssl.trustStore", TRUST_STORE_FILE_PATH);
            System.setProperty("javax.net.ssl.trustStorePassword", TRUST_STORE_PASS);
            
            Properties properties = new Properties();
            properties.setProperty("sslMode", "VERIFY_IDENTITY");
            properties.put("user", DB_USER);
            properties.put("password", DB_PASSWORD);
            
     
            Connection connection = null;
            Statement stmt = null;
            ResultSet rs = null;
            try {
                connection = DriverManager.getConnection("jdbc:mysql://{{mydatabase.123456789012.us-east-1.rds.amazonaws.com:3306}}",properties);
                stmt = connection.createStatement();
                rs=stmt.executeQuery("SELECT 1 from dual");
            } finally {
                if (rs != null) {
                    try {
                        rs.close();
                    } catch (SQLException e) {
                    }
                }
                if (stmt != null) {
                   try {
                        stmt.close();
                    } catch (SQLException e) {
                   }
                }
                if (connection != null) {
                    try {
                        connection.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }
            }
            return;
        }
    }
```

**Importante**  
Dopo aver stabilito che le connessioni al database utilizzano SSL/TLS e aggiornato l'archivio di fiducia delle applicazioni, è possibile aggiornare il database per utilizzare i certificati rds-ca-rsa2048-g1. Per istruzioni, consulta la fase 3 in [Aggiornamento del certificato CA modificando l’istanza database o il cluster di database](UsingWithRDS.SSL-certificate-rotation.md#UsingWithRDS.SSL-certificate-rotation-updating).  
Specifica una password diversa dal prompt mostrato qui come best practice per la sicurezza.