Labels

admin (1) aix (1) alert (1) always-on (2) Architecture (1) aws (3) Azure (1) backup (3) BI-DWH (10) Binary (3) Boolean (1) C# (1) cache (1) casting (3) cdc (1) certificate (1) checks (1) cloud (3) cluster (1) cmd (7) collation (1) columns (1) compilation (1) configurations (7) Connection-String (2) connections (6) constraint (6) copypaste (2) cpu (2) csv (3) CTE (1) data-types (1) datetime (23) db (547) DB2 (1) deadlock (2) Denali (7) device (6) dotNet (5) dynamicSQL (11) email (5) encoding (1) encryption (4) errors (124) excel (1) ExecutionPlan (10) extended events (1) files (7) FIPS (1) foreign key (1) fragmentation (1) functions (1) GCP (2) gMSA (2) google (2) HADR (1) hashing (3) in-memory (1) index (3) indexedViews (2) insert (3) install (10) IO (1) isql (6) javascript (1) jobs (11) join (2) LDAP (2) LinkedServers (8) Linux (15) log (6) login (1) maintenance (3) mariadb (1) memory (4) merge (3) monitoring (4) MSA (2) mssql (444) mssql2005 (5) mssql2008R2 (20) mssql2012 (2) mysql (36) MySQL Shell (5) network (1) NoSQL (1) null (2) numeric (9) object-oriented (1) offline (1) openssl (1) Operating System (4) oracle (7) ORDBMS (1) ordering (2) Outer Apply (1) Outlook (1) page (1) parameters (2) partition (1) password (1) Performance (103) permissions (10) pivot (3) PLE (1) port (4) PostgreSQL (14) profiler (1) RDS (3) read (1) Replication (12) restore (4) root (1) RPO (1) RTO (1) SAP ASE (48) SAP RS (20) SCC (4) scema (1) script (8) security (10) segment (1) server (1) service broker (2) services (4) settings (75) SQL (74) SSAS (1) SSIS (19) SSL (8) SSMS (4) SSRS (6) storage (1) String (35) sybase (57) telnet (2) tempdb (1) Theory (2) tips (120) tools (3) training (1) transaction (6) trigger (2) Tuple (2) TVP (1) unix (8) users (3) vb.net (4) versioning (1) windows (14) xml (10) XSD (1) zip (1)

SSL Configuration in MySQL

Default SSL Configuration in MySQL

By default, MySQL server always installs and enables SSL configuration.
However, it is not enforced that clients connect using SSL.


Configuration metricMySQL 5.6MySQL 5.7MySQL 8.0cnf sectionPurpose
have_opensslDISABLEDYESYESSet to on when the SSL files are declared

Enable SSL

have_sslDISABLEDYESYESSet to on when the SSL files are declared
ssl_ca
ca.pemca.pemmysqld
ssl_cert
server-cert.pemserver-cert.pemmysqld
ssl_key
server-key.pemserver-key.pemmysqld
require_secure_transport(not exists)OFFOFFmysqldForce SSL
ssl_capath




ssl_cipher




ssl_crl




ssl_crlpath




ssl_fips_mode(not exists)(not exists)OFF

admin_ssl_ca(not exists)(not exists)


admin_ssl_capath(not exists)(not exists)


admin_ssl_cert(not exists)(not exists)


admin_ssl_cipher(not exists)(not exists)


admin_ssl_crl(not exists)(not exists)


admin_ssl_crlpath(not exists)(not exists)


admin_ssl_key(not exists)(not exists)


mysqlx_ssl_ca(not exists)(not exists)


mysqlx_ssl_capath(not exists)(not exists)


mysqlx_ssl_cert(not exists)(not exists)


mysqlx_ssl_cipher(not exists)(not exists)


mysqlx_ssl_crl(not exists)(not exists)


mysqlx_ssl_crlpath(not exists)(not exists)


mysqlx_ssl_key(not exists)(not exists)


performance_schema_show_processlist(not exists)(not exists)OFF



How to check SSL Configuration

show global variables like '%ssl%';
show global variables like '%require_secure_transport%';
status

SSL enabling for MySQL


1. SSL Certificate Files
By default, MySQL has its own SSL certificate files in the '/var/lib/mysql' directory.

If required: Generate New Self-Signed Certificate Files For MySQL .

Identity verification with VERIFY_IDENTITY does not work with self-signed certificates that are created automatically.

2. Enable SSL for MySQL
Edit Cnf file:

[mysql]
ssl-ca=/var/lib/mysql/ca.pem
ssl-cert=/var/lib/mysql/server-cert.pem
ssl-key=/var/lib/mysql/server-key.pem
 
[client]
ssl-ca=/var/lib/mysql/ca.pem
ssl-cert=/var/lib/mysql/client-cert.pem
ssl-key=/var/lib/mysql/client-key.pem
  • These changes in cnf file require a restart of the MySQL instance.
  • Pay attention that the files paths are correct.
  • If new certificate files were created – update names and paths

In order to Force SSL login:
Edit Cnf file:

[mysqld]
require_secure_transport = ON

  • These changes in cnf file require a restart of the MySQL instance.
  • if require_secure_transport is set as OFF (as the default value) - it means that a user can use certificates and also can login without SSL certificates.

3. Enable Remote Connection
Edit Cnf file:

[mysqld]
#bind-address = 0.0.0.0
bind-address = *
  • These changes in cnf file require a restart of the MySQL instance.

Login to an SSL instance from a client
  1. Copy and save the certificate files in the client's server.
  2. Add SSL properties to the connection (mysql or other) command.

No--No SSL and other certificate is required

mysql -h 10.240.86.5 -P 3307 -u root -p


Yes



No SSLDISABLEDConnecting without SSL

mysql -h 10.240.86.5 -P 3306 -u root --ssl-mode=DISABLED -p

When the instance requires SSL, it is not possible to connect without SSL
If available

PREFERRED

(the default if --ssl-mode is not specified)

Establish an encrypted connection if the server supports encrypted connections, falling back to an unencrypted connection if an encrypted connection cannot be established.mysql -h 10.240.86.5 -P 3307 -u root -pSame as without any SSL definitions.
RequireREQUIRED

Establish an encrypted connection if the server supports encrypted connections. The connection attempt fails if an encrypted connection cannot be established.

mysql -h 10.240.86.5 -P 3307 -u root \
--ssl-cipher=ECDHE-RSA-AES128-GCM-SHA256 -p

Require and verify CAVERIFY_CA

Like REQUIRED, but additionally verify the server Certificate Authority (CA) certificate against the configured CA certificates. The connection attempt fails if no valid matching CA certificates are found.

mysql -h 10.240.86.5 -P 3307 -u root \
--ssl-mode=VERIFY_CA \
--ssl-ca=/etc/certs/ca.pem \
--ssl-cert=/etc/certs/client-cert.pem \
--ssl-key=/etc/certs/client-key.pem -p


Require and verify IdentityVERIFY_IDENTITY

Like VERIFY_CA, but additionally perform host name identity verification by checking the host name the client uses for connecting to the server against the identity in the certificate that the server sends to the client:

mysql -h MySQL -P 3306 -u root \
--ssl-mode=VERIFY_IDENTITY \
--ssl-ca=/etc/certs3306/ca.pem \
--ssl-cert=/etc/certs3306/client-cert.pem \
--ssl-key=/etc/certs3306/client-key.pem -p
  • Host name identity verification with VERIFY_IDENTITY does not work with self-signed certificates that are created automatically by the server or manually using mysql_ssl_rsa_setup. Such self-signed certificates do not contain the server name as the Common Name value.
  • In the connection – use host name and not an IP.


This is how it looks at MySQL Workbench:



No comments:

Post a Comment