MySQL 5.0 Reference Manual  /  ...  /  Configuring MySQL to Use Secure Connections Configuring MySQL to Use Secure Connections

To enable SSL connections, your MySQL distribution must be built with SSL support, as described in Section, “Building MySQL with SSL Support”. In addition, the proper SSL-related options must be used to specify the appropriate certificate and key files. For a complete list of SSL options, see Section, “Command Options for Secure Connections”.

If you need to create the required SSL files, see Section 6.3.7, “Creating SSL Certificates and Keys Using openssl”.

Server-Side SSL Configuration

To start the MySQL server so that it permits clients to connect using SSL, use options that identify the certificate and key files the server uses when establishing a secure connection:

  • --ssl-ca identifies the Certificate Authority (CA) certificate.

  • --ssl-cert identifies the server public key certificate. This can be sent to the client and authenticated against the CA certificate that it has.

  • --ssl-key identifies the server private key.

For example, start the server with these lines in the my.cnf file, changing the file names as necessary:


Each option names a file in PEM format. If you have a MySQL source distribution, you can also test your setup using the demonstration certificate and key files in its mysql-test/std_data directory.

Client-Side SSL Configuration

For client programs, SSL options are similar to those used on the server side, but --ssl-cert and --ssl-key identify the client public and private key:

  • --ssl-ca identifies the Certificate Authority (CA) certificate. This option, if used, must specify the same certificate used by the server.

  • --ssl-cert identifies the client public key certificate.

  • --ssl-key identifies the client private key.

To establish a secure connection to a MySQL server with SSL support, the options that a client must specify depend on the SSL requirements of the MySQL account used by the client. (See the discussion of the REQUIRE clause in Section, “GRANT Syntax”.)

Suppose that you want to connect using an account that has no special SSL requirements or was created using a GRANT statement that includes the REQUIRE SSL option. As a recommended set of SSL options, start the server with at least --ssl-cert and --ssl-key, and invoke the client with --ssl-ca. A client can connect securely like this:

shell> mysql --ssl-ca=ca.pem

To require that a client certificate also be specified, create the account using the REQUIRE X509 option. Then the client must also specify the proper client key and certificate files or the server will reject the connection:

shell> mysql --ssl-ca=ca.pem \
       --ssl-cert=client-cert.pem \

To prevent use of SSL and override other SSL options, invoke the client program with --ssl=0 or a synonym (--skip-ssl, --disable-ssl):

shell> mysql --ssl=0

A client can determine whether the current connection with the server uses SSL by checking the value of the Ssl_cipher status variable. The value is nonempty if SSL is used, and empty otherwise. For example:

mysql> SHOW STATUS LIKE 'Ssl_cipher';
| Variable_name | Value              |
| Ssl_cipher    | DHE-RSA-AES256-SHA |

For the mysql client, an alternative is to use the STATUS or \s command and check the SSL line:

mysql> \s
SSL: Cipher in use is DHE-RSA-AES256-SHA


mysql> \s
SSL: Not in use
SSL Configuration and the C API

The C API enables application programs to use SSL:

Replication uses the C API, so secure connections can be used between master and slave servers. See Section 16.3.7, “Setting Up Replication Using SSL”.

User Comments
Sign Up Login You must be logged in to post a comment.