All Products
Search
Document Center

ApsaraDB RDS:Configure the SSL encryption feature

Last Updated:Aug 13, 2026

SSL encryption secures data in transit between ApsaraDB RDS for MySQL instances and clients, preventing monitoring, interception, and tampering. By default, SSL encryption is disabled.

This topic shows you how to:

  • Enable SSL encryption (and optionally force all connections to use SSL)

  • Download the CA certificate

  • Configure clients — CLI, MySQL Workbench, DMS, Java, and Python — to connect over SSL

Prerequisites

Before you begin, ensure that:

  • Your RDS instance runs one of the following MySQL versions and editions to use SSL encryption:

    MySQL version

    RDS High-availability Edition

    RDS Cluster Edition

    RDS Basic Edition

    8.0

    Supported

    Supported

    Supported

    5.7

    Supported

    Supported

    Supported

    5.6

    Supported

  • Your RDS instance meets both of the following requirements to use forceful SSL encryption:

    • Runs MySQL 8.4, 8.0, or 5.7 on Basic Edition, High-availability Edition, or Cluster Edition

    • Runs a minor engine version of 20241130 or later

Check these details on the Basic Information page of your RDS instance. If your instance meets the requirements but the SSL tab is missing, update the minor engine version. For details, see Upgrade the minor engine version. If you change the billing method of a non-serverless RDS instance running Basic Edition to serverless, you must re-enable SSL encryption.

Potential impacts

Restart and switchover behavior:

Operation

MySQL 5.6 or 5.7

MySQL 8.0

Enable SSL

Restarts; triggers primary/secondary switchover

Restarts; triggers primary/secondary switchover

Disable SSL

Restarts; triggers primary/secondary switchover

Restarts; triggers primary/secondary switchover

Update certificate

Restarts

Does not restart

Perform these operations during off-peak hours, and configure your application to reconnect automatically after a restart.

CPU overhead: SSL-encrypted connections significantly increase CPU utilization. Enable SSL only for endpoints that require encryption — typically the public endpoint.

Forceful SSL: After enabling forceful SSL encryption, non-SSL connections from clients and database proxies are denied.

How it works

When you enable SSL encryption, the RDS instance generates a server certificate, a public key, and a private key.

During an SSL handshake:

  1. The RDS instance sends the server certificate (including the public key) to the client.

  2. The client encrypts a symmetric key using the received public key.

  3. The RDS instance decrypts the symmetric key using its private key.

  4. Both sides use the symmetric key to encrypt and decrypt data.

Optionally, the client can verify the server certificate against a certificate authority (CA) certificate to confirm the server's identity and prevent man-in-the-middle attacks.

TLS version support

MySQL version

TLSv1.0

TLSv1.1

TLSv1.2

TLSv1.3

8.0

Supported

Supported

Supported

Supported (minor version 20221231 or later)

5.7

Supported

Supported

Supported

Not supported

5.6

Supported

Supported

Supported

Not supported

TLS 1.0 and TLS 1.1 were deprecated by the Internet Engineering Task Force (IETF) in 2021. Use TLSv1.2 or later. For details, see RFC 8996.

ssl_cipher configuration

ApsaraDB RDS for MySQL uses OpenSSL for TLS. OpenSSL was upgraded to OpenSSL 3.0 for:

  • MySQL 5.7 instances running minor engine version 20230831

  • MySQL 8.0 instances running minor engine version 20230930

OpenSSL 3.0 no longer supports TLSv1.0 and TLSv1.1 by default. To maintain compatibility, the ssl_cipher parameter defaults to "ALL:@SECLEVEL=0", which re-enables TLSv1.0 and TLSv1.1.

If your workloads use only TLSv1.2 or later, set ssl_cipher to an empty string ("") in the ApsaraDB RDS console for stronger security.

Certificate types

Both certificate types protect one endpoint and serve the same purpose: enabling SSL encryption and letting the client authenticate the server.

Cloud certificate

Custom certificate

Issued by

Alibaba Cloud

A CA or self-signed

Validity period

365 days

Customized

Protected endpoints

1

1

This topic covers cloud certificates. To use a custom certificate, see Configure a custom certificate.

Step 1: Enable SSL encryption

  1. Go to the Instances page. In the top navigation bar, select the region where your RDS instance resides. Find the instance and click its ID.

  2. In the left-side navigation pane, click Data Security.

  3. On the SSL tab, turn on the switch next to Disabled.

    If the SSL tab does not appear, check that your instance meets all requirements listed in Prerequisites.
  4. In the dialog box that appears, select the endpoint to protect — either the internal or public endpoint — and click OK. Only one endpoint can be protected at a time.

  5. (Optional) Turn on Forceful Encryption.

    Important

    Forceful SSL encryption requires MySQL 8.4, 8.0, or 5.7 and a minor engine version of 20241130 or later. After enabling forceful SSL encryption, only SSL-encrypted connections are accepted. Non-SSL connections from clients and database proxies are denied.

  6. Wait approximately 1 minute for the process to complete. Refresh the page to confirm the feature is enabled.

    Note

    SSL encryption for a read-only instance is independent of the primary instance. Enabling SSL encryption on the primary instance does not automatically enable it on associated read-only instances. To enable SSL encryption for a read-only instance, go to the read-only instance's details page, click Data Security > SSL, and turn on SSL encryption manually.

Step 2: Download the CA certificate

  1. Go to the Instances page, find your instance, and click its ID.

  2. In the left-side navigation pane, click Data Security. On the SSL tab, click Download CA Certificate.

The downloaded package contains three files:

File

Format

Use when

ApsaraDB-CA-Chain.pem

PEM

Most scenarios

ApsaraDB-CA-Chain.jks

JKS (Java KeyStore)

Java applications; password is apsaradb

ApsaraDB-CA-Chain.p7b

P7B (PKCS#7)

Windows applications requiring PKCS#7 format

Step 3: Connect using SSL

After enabling SSL encryption, configure your client to connect over an encrypted connection. The available SSL modes are:

Mode

Behavior

DISABLED

Connections are not encrypted

PREFERRED (default)

Attempts an encrypted connection; falls back to unencrypted if SSL is unavailable

REQUIRED

Requires an encrypted connection; fails if encryption is unavailable

VERIFY_CA

Requires encryption and verifies the server certificate against the CA certificate

VERIFY_IDENTITY

Requires encryption, verifies the server certificate, and verifies that the certificate hostname matches the actual connection

Important

If forceful SSL encryption is enabled, only REQUIRED, VERIFY_CA, or VERIFY_IDENTITY modes allow connections.

CLI

For MySQL clients 5.7.11 or later, use the --ssl-mode option.

Connect without verifying the server certificate:

mysql -h <endpoint> -u <username> -p --ssl-mode=PREFERRED

Connect and verify the server certificate:

mysql -h <endpoint> -u <username> -p \
  --ssl-mode=VERIFY_CA \
  --ssl-ca=<path-to-certificate>/ApsaraDB-CA-Chain.pem

Replace <endpoint>, <username>, and <path-to-certificate> with your actual values.

For MySQL clients earlier than 5.7.11 and MariaDB clients, use --ssl and --ssl-verify-server-cert instead. See the official MySQL and MariaDB documentation for details.

MySQL Workbench

  1. Open MySQL Workbench and choose Database > Manage Connections.

  2. Enter the connection endpoint, username, and password.

  3. On the SSL tab, set Use SSL to the desired mode. Set SSL CA File to the path of the downloaded PEM file, then click Test Connection or OK.

DMS

When registering your RDS instance with Data Management (DMS), configure the Enable SSL parameter. For details, see Register an Alibaba Cloud database instance.

To update the setting for an existing registration, right-click the instance, select Edit, and configure Enable SSL under Advanced Information.

Application code

Java

MySQL Connector/J (mysql-connector-java) is the official JDBC driver for MySQL. This example uses version 8.0.19.

Add the following dependency:

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.19</version>
</dependency>
Note

The sslMode property is supported from mysql-connector-java 8.0.13. For earlier versions, use the useSSL, requireSSL, and verifyServerCertificate properties instead. See MySQL Connector/J documentation.

package com.aliyun.sample;

import com.mysql.cj.jdbc.MysqlDataSource;
import java.sql.Connection;
import java.sql.SQLException;

public class Sample {

    public static void main(String[] args) {

        Connection conn = null;
        MysqlDataSource mysqlDS = null;

        try {
            mysqlDS = new MysqlDataSource();

            // Set the SSL mode. Options: DISABLED, PREFERRED, REQUIRED, VERIFY_CA, VERIFY_IDENTITY.
            mysqlDS.setSslMode("VERIFY_IDENTITY");

            // The truststore holds the CA certificate. This example uses JKS format.
            mysqlDS.setTrustCertificateKeyStoreType("JKS");
            // Replace with the actual path to ApsaraDB-CA-Chain.jks on your system.
            mysqlDS.setTrustCertificateKeyStoreUrl("file:/D:\\ApsaraDB-CA-Chain\\ApsaraDB-CA-Chain.jks");
            // The JKS file password is always apsaradb.
            mysqlDS.setTrustCertificateKeyStorePassword("apsaradb");

            // Replace the following values with your actual RDS instance details.
            mysqlDS.setServerName("rm-xxxxxx.mysql.rds.aliyuncs.com"); // RDS endpoint
            mysqlDS.setPort(3306);
            mysqlDS.setUser("xxxxxx");          // Database account username
            mysqlDS.setPassword("xxxxxx");      // Database account password
            mysqlDS.setDatabaseName("xxxxxx");  // Database name

            conn = mysqlDS.getConnection();

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (conn != null) conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

Python

# Install PyMySQL: pip install pymysql

import pymysql

try:
    ssl_config = {
        "ca": "/path/to/ApsaraDB-CA-Chain.pem",  # Path to the CA certificate
        "mode": "VERIFY_CA"                        # SSL mode
    }
    conn = pymysql.connect(
        host="******.mysql.rds.aliyuncs.com",
        user="*****",
        passwd="******",
        db="*****",
        ssl=ssl_config
    )
    cursor = conn.cursor()
    cursor.execute("SELECT VERSION()")
    data = cursor.fetchone()
    print("Database version:", data[0])
    cursor.close()
except pymysql.Error as e:
    print(e)

Additional operations

Update a cloud certificate

Cloud certificates are valid for one year. If the certificate expires before renewal, clients using encrypted connections cannot connect. Alibaba Cloud sends expiration notifications by email or internal message.

To schedule automatic renewal, use the Schedule Event dialog box. For details, see Manage scheduled events.

After automatic renewal, clients do not need to re-download or reconfigure the CA certificate.

To manually renew the certificate:

Important

Updating the certificate restarts instances running MySQL 5.6 or 5.7. Instances running MySQL 8.0 do not restart.

  1. Go to the Instances page, find your instance, and click its ID.

  2. In the left-side navigation pane, click Data Security.

  3. On the SSL tab, click Update Expiration Time.

Verify the encrypted connection

Run the following SQL statements to inspect the current connection:

-- Check the cipher suite used by the current session.
-- A non-empty result confirms the connection is encrypted.
SHOW STATUS LIKE 'Ssl_cipher';

-- Check the TLS version used by the current session.
SHOW STATUS LIKE 'Ssl_version';

In the MySQL CLI, run \s to view connection details. If the connection is encrypted, the SSL field shows the cipher suite in use.

Require SSL for a specific user

ALTER USER 'testuser'@'%' REQUIRE SSL;

View the CA certificate content

openssl x509 -in <path-to-certificate>/ApsaraDB-CA-Chain.pem -text

Disable SSL encryption

Important

Disabling SSL restarts the RDS instance and triggers a primary/secondary switchover. Perform this operation during off-peak hours.

  1. Go to the Instances page, find your instance, and click its ID.

  2. In the left-side navigation pane, click Data Security.

  3. On the SSL tab, turn off SSL Encryption. In the confirmation dialog, click OK.

FAQ

Can I configure mutual authentication that verifies both the server and client identities?

ApsaraDB RDS for MySQL does not support client identity verification during the SSL handshake. Use whitelists and account management to control access.

How do I configure SSL encryption for a read/write splitting endpoint?

See Configure SSL encryption for a database proxy endpoint.

Java application: `javax.net.ssl.SSLHandshakeException: DHPublicKey does not comply to algorithm constraints`

This error occurs with default JDK 7 or JDK 8 security settings. In the jre/lib/security/java.security file on your application host, set:

jdk.tls.disabledAlgorithms=SSLv3, RC4, DH keySize < 224
jdk.certpath.disabledAlgorithms=MD2, RSA keySize < 1024

Java application: `javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate)`

MySQL Connector/J 8.0.18 and earlier disable TLSv1.2 when connecting to MySQL 5.6 or 5.7 instances. Fix this using one of the following options:

  • Upgrade MySQL Connector/J to 8.0.19 or later

  • Upgrade the RDS instance to MySQL 8.0

  • Specify the TLS version explicitly by setting enabledTLSProtocols or tlsVersions to TLSv1.2 in your connection configuration

API reference