MySQL provides two ways to create the SSL certificate and key files and RSA key-pair files required to support secure connections using SSL and secure password exchange using RSA over unencrypted connections, if those files are missing:
The server can autogenerate these files at startup.
Users can invoke the mysql_ssl_rsa_setup utility manually.
Server autogeneration and mysql_ssl_rsa_setup help lower the barrier to using SSL by making it easier to generate the required files. However, certificates generated by these methods are self-signed, which may not be very secure. After you gain experience using such files, consider obtaining certificate/key material from a registered certificate authority.
As of MySQL 5.7.5, MySQL servers have the capability of
automatically generating missing SSL and RSA files at startup,
for MySQL distributions compiled using OpenSSL. The
system variables control automatic generation of these files.
Both variables are enabled by default. They can be enabled at
startup and inspected but not set at runtime.
At startup, the server automatically generates server-side and
client-side SSL certificate and key files in the data directory
system variable is enabled, no SSL options other than
--ssl are specified, and the
server-side SSL files are missing from the data directory. These
files enable secure client connections using SSL; see
Section 7.4.4, “Configuring MySQL to Use Secure Connections”.
The server checks the data directory for SSL files with the following names:
ca.pem server-cert.pem server-key.pem
If any of those files are present, the server creates no SSL files. Otherwise, it creates them, plus some additional files:
ca.pem Self-signed CA certificate ca-key.pem CA private key server-cert.pem Server certificate server-key.pem Server private key client-cert.pem Client certificate client-key.pem Client private key
At startup, the server automatically generates RSA
private/public key-pair files in the data directory if the
system variable is enabled, no RSA options are specified, and
the RSA files are missing from the data directory. These files
enable secure password exchange using RSA over unencrypted
connections for accounts authenticated by the
sha256_password plugin; see
Section 188.8.131.52, “The SHA-256 Authentication Plugin”.
The server checks the data directory for RSA files with the following names:
private_key.pem Private member of private/public key pair public_key.pem Public member of private/public key pair
If any of these files are present, the server creates no RSA files. Otherwise, it creates them.
As of MySQL 5.7.6, MySQL distributions include a mysql_ssl_rsa_setup utility that can be invoked manually to generate SSL and RSA files. This utility is included with all MySQL distributions (whether compiled using OpenSSL or yaSSL), but it does require that the openssl command be available. For usage instructions, see Section 5.4.5, “mysql_ssl_rsa_setup — Create SSL/RSA Files”.
SSL and RSA files created automatically by the server or by invoking mysql_ssl_rsa_setup have these characteristics:
SSL and RSA keys are 2048 bit.
The SSL CA certificate is self signed.
The SSL server and client certificates are signed with the CA certificate and key, using the
SSL certificates use these Common Name (CN) values, with the appropriate certificate type (CA, Server, Client):
suffix_Auto_Generated_CA_Certificate server-cert.pm: MySQL_Server_
suffix_Auto_Generated_Server_Certificate client-cert.pm: MySQL_Server_
For files generated by the server, if the resulting CN values exceed 64 characters, the
_portion of the name is omitted.
SSL files have blank values for Country (C), State or Province (ST), Organization (O), Organization Unit Name (OU) and email address.
SSL files created by the server or by mysql_ssl_rsa_setup are valid for ten years from the time of generation. (Before MySQL 5.7.6, files created by the server are valid for one year.)
RSA files do not expire.
SSL files have different serial numbers for each certificate/key pair (1 for CA, 2 for Server, 3 for Client).
Files created automatically by the server are owned by the account that runs the server. Files created using mysql_ssl_rsa_setup are owned by the user who invoked that program. This can be changed on systems that support the
chown()system call if the program is invoked by
--uidoption is given to specify the user who should own the files.
On Unix and Unix-like systems, the file access mode is 644 for certificate files (that is, world readable) and 600 for key files (that is, accessible only by the account that runs the server).
To see the contents of an SSL certificate (for example, to check the range of dates over which it is valid), invoke openssl directly:
openssl x509 -text -in ca.pemshell>
openssl x509 -text -in server-cert.pemshell>
openssl x509 -text -in client-cert.pem
It is also possible to check SSL certificate expiration information using this SQL statement:
SHOW STATUS LIKE 'Ssl_server_not%';+-----------------------+--------------------------+ | Variable_name | Value | +-----------------------+--------------------------+ | Ssl_server_not_after | Apr 28 14:16:39 2025 GMT | | Ssl_server_not_before | May 1 14:16:39 2015 GMT | +-----------------------+--------------------------+