datenbankverbindungen_zu_einer_mysql_mit_ssl-verschluesselung
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
| datenbankverbindungen_zu_einer_mysql_mit_ssl-verschluesselung [2023-04-20 12:52:18] – [Mit dem MySQL-Client auf MySQL-Datenbanken über eine SSL/TLS verschlüsselte Verbindung zugreifen] manfred | datenbankverbindungen_zu_einer_mysql_mit_ssl-verschluesselung [2024-04-11 11:12:32] (aktuell) – [Mit dem PDO-Client von PHP] manfred | ||
|---|---|---|---|
| Zeile 1: | Zeile 1: | ||
| + | ====== Datenbankverbindungen zu einer MySQL mit SSL-Verschlüsselung ====== | ||
| + | |||
| + | siehe auch: | ||
| + | * [[:: | ||
| + | * **[[https:// | ||
| + | |||
| + | > echo "SHOW STATUS WHERE variable_name IN (' | ||
| + | +-----------------+-------------------------------------------------------------------------------------------------------------------------------------------------------+ | ||
| + | | Variable_name | ||
| + | +-----------------+-------------------------------------------------------------------------------------------------------------------------------------------------------+ | ||
| + | | Ssl_cipher | ||
| + | | Ssl_cipher_list | ECDHE-ECDSA-AES256-GCM-SHA384: | ||
| + | +-----------------+-------------------------------------------------------------------------------------------------------------------------------------------------------+ | ||
| + | |||
| + | |||
| + | ===== SSL-Verschlüsselung auf dem MySQL-Server einrichten ===== | ||
| + | |||
| + | in einem separaten Terminal-Fenster den Status überwachen: | ||
| + | # watch -n1 'echo "SHOW SLAVE STATUS \G;" | mysql -hlocalhost -P3306 | egrep " | ||
| + | |||
| + | die Benutzer auf verschlüsselte Verbindungen umstellen: | ||
| + | # echo " | ||
| + | | ||
| + | # echo "ALTER USER ' | ||
| + | | ||
| + | # echo " | ||
| + | |||
| + | die SSL-Verschlüsselung der Replikationsverbindungen muss durch **'' | ||
| + | # echo "STOP SLAVE;" | ||
| + | |||
| + | die Schlüssel und Zertifikate müssen an ihrem vorbestimmten Ort liegen: | ||
| + | # ll / | ||
| + | -rw-r--r-- 1 mysql mysql 1119 Mär 6 12:02 / | ||
| + | -rw------- 1 mysql mysql 1676 Jun 29 11:49 / | ||
| + | -rw-r--r-- 1 mysql mysql 452 Jun 29 11:49 / | ||
| + | -rw-r--r-- 1 mysql mysql 1119 Mär 6 11:58 / | ||
| + | -rw------- 1 mysql mysql 1675 Mär 6 11:58 / | ||
| + | | ||
| + | # vi / | ||
| + | [mysqld] | ||
| + | ssl = 1 | ||
| + | ssl_capath | ||
| + | ssl_ca | ||
| + | ssl_cert | ||
| + | ssl_key | ||
| + | ssl-cipher | ||
| + | require_secure_transport | ||
| + | |||
| + | # service mysql restart | ||
| + | |||
| + | # echo "SHOW VARIABLES LIKE ' | ||
| + | +---------------+-------------------------------------------------------------------------------------------------------+ | ||
| + | | Variable_name | Value | | ||
| + | +---------------+-------------------------------------------------------------------------------------------------------+ | ||
| + | | have_openssl | ||
| + | | have_ssl | ||
| + | | ssl_ca | ||
| + | | ssl_capath | ||
| + | | ssl_cert | ||
| + | | ssl_cipher | ||
| + | | ssl_crl | ||
| + | | ssl_crlpath | ||
| + | | ssl_key | ||
| + | +---------------+-------------------------------------------------------------------------------------------------------+ | ||
| + | |||
| + | # echo "SHOW STATUS LIKE ' | ||
| + | +-----------------------+--------------------------+ | ||
| + | | Variable_name | ||
| + | +-----------------------+--------------------------+ | ||
| + | | Ssl_server_not_after | ||
| + | | Ssl_server_not_before | Mar 2 11:24:36 2020 GMT | | ||
| + | +-----------------------+--------------------------+ | ||
| + | |||
| + | |||
| + | ===== SSL-Verschlüsselung auf dem MySQL-Client einrichten ===== | ||
| + | |||
| + | # ll / | ||
| + | -rw------- 1 root root 1120 Jun 29 12:28 / | ||
| + | -rw------- 1 root root 1120 Jun 29 12:28 / | ||
| + | -rw------- 1 root root 1676 Jun 29 12:28 / | ||
| + | | ||
| + | # cat / | ||
| + | [mysql] | ||
| + | ssl_ca | ||
| + | ssl_cert | ||
| + | ssl_key | ||
| + | |||
| + | Verbindungstest: | ||
| + | # mysql -h10.11.12.13 -udbuser -pgeheim dbname | ||
| + | |||
| + | |||
| + | ==== Mit dem MySQL-Client auf MySQL-Datenbanken über eine SSL/TLS verschlüsselte Verbindung zugreifen ==== | ||
| + | |||
| + | * [[https:// | ||
| + | |||
| + | > mysqlshow -hdatenbank.domain.de -P3306 --ssl-mode=VERIFY_IDENTITY --ssl-key=/ | ||
| + | +------------------------------------+ | ||
| + | | | ||
| + | +------------------------------------+ | ||
| + | | information_schema | ||
| + | | mysql | | ||
| + | | performance_schema | ||
| + | | sys | | ||
| + | +------------------------------------+ | ||
| + | |||
| + | ### MySQL 5.7 | ||
| + | | ||
| + | # ohne Zertifikatsprüfung | ||
| + | > echo " | ||
| + | > echo " | ||
| + | > echo " | ||
| + | ... | ||
| + | SSL: Cipher in use is ECDHE-RSA-AES256-GCM-SHA384 | ||
| + | ... | ||
| + | | ||
| + | # Einweg-Zertifikatsprüfung (One-Way TLS) | ||
| + | > echo " | ||
| + | | ||
| + | # Zweiwege-Zertifikatsprüfung (Two-Way TLS) | ||
| + | > echo " | ||
| + | | ||
| + | ### MariaDB 10.10 | ||
| + | # ohne Zertifikatsprüfung | ||
| + | > echo " | ||
| + | |||
| + | |||
| + | ==== verschlüsselt und unverschlüsselte Verbindungen möglich ==== | ||
| + | |||
| + | Mit dieser Konfiguration kann man unverschlüsselt und verschlüsselt auf die DB zugreifen. | ||
| + | Das gilt auch für die Replikationsverbindungen. | ||
| + | __Sollte die Verschlüsselung (mit der Option "'' | ||
| + | |||
| + | |||
| + | |||
| + | ==== Das MySQL-DBMS konfigurieren ==== | ||
| + | |||
| + | ein MySQL-DBMS erzeugt beim Start diese Schlüssel (wenn sie nicht bereits dort liegen): | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | |||
| + | Zertifikat kontrollieren: | ||
| + | > openssl x509 -noout -text -in / | ||
| + | > openssl x509 -noout -text -in / | ||
| + | |||
| + | <file bash my.cnf> | ||
| + | [mysqld] | ||
| + | # | ||
| + | # * SSL | ||
| + | # | ||
| + | ssl = 1 | ||
| + | ssl-ca | ||
| + | ssl-cert | ||
| + | ssl-key | ||
| + | # | ||
| + | ### PHP 7.2 (Ubuntu 18.04) | ||
| + | tls_version | ||
| + | ssl-cipher | ||
| + | # | ||
| + | ### nur noch verschlüsselte Verbindungen möglich | ||
| + | # | ||
| + | </ | ||
| + | |||
| + | |||
| + | SSL-Test auf eine MySQL-DB: | ||
| + | # openssl s_client -connect 127.0.0.1: | ||
| + | # echo " | ||
| + | |||
| + | |||
| + | ==== Mit dem MySQL-Client auf der CLI ==== | ||
| + | |||
| + | Test mit PHP 7.0 (Ubuntu 16.04) | ||
| + | <file bash> | ||
| + | # echo " | ||
| + | -------------- | ||
| + | mysql Ver 14.14 Distrib 5.7.31, for Linux (x86_64) using EditLine wrapper | ||
| + | |||
| + | Connection id: 2890 | ||
| + | Current database: | ||
| + | Current user: | ||
| + | SSL: Cipher in use is ECDHE-RSA-AES128-GCM-SHA256 | ||
| + | Current pager: | ||
| + | Using outfile: | ||
| + | Using delimiter: | ||
| + | Server version: | ||
| + | Protocol version: | ||
| + | Connection: | ||
| + | Server characterset: | ||
| + | Db | ||
| + | Client characterset: | ||
| + | Conn. characterset: | ||
| + | TCP port: 3306 | ||
| + | Uptime: | ||
| + | |||
| + | Threads: 5 Questions: 1847 Slow queries: 0 Opens: 4495 Flush tables: 1 Open tables: 1632 Queries per second avg: 1.732 | ||
| + | -------------- | ||
| + | </ | ||
| + | |||
| + | Test mit PHP 7.0 (Ubuntu 16.04) | ||
| + | <file bash> | ||
| + | # echo "SHOW STATUS LIKE ' | ||
| + | +---------------+-----------------------------+ | ||
| + | | Variable_name | Value | | ||
| + | +---------------+-----------------------------+ | ||
| + | | Ssl_cipher | ||
| + | +---------------+-----------------------------+ | ||
| + | </ | ||
| + | |||
| + | Test mit PHP 7.0 (Ubuntu 16.04) | ||
| + | <file bash> | ||
| + | # echo "SHOW STATUS WHERE Variable_name IN (' | ||
| + | mysql: [Warning] Using a password on the command line interface can be insecure. | ||
| + | +-----------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | ||
| + | | Variable_name | ||
| + | +-----------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | ||
| + | | Ssl_cipher | ||
| + | | Ssl_cipher_list | ||
| + | | Ssl_server_not_after | ||
| + | | Ssl_server_not_before | Aug 17 16:27:13 2020 GMT | | ||
| + | | Ssl_version | ||
| + | +-----------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | ||
| + | </ | ||
| + | |||
| + | |||
| + | ==== Mit dem PDO-Client von PHP ==== | ||
| + | |||
| + | Für " | ||
| + | |||
| + | Für " | ||
| + | |||
| + | Die Option '' | ||
| + | Ihr ist es scheißegal ob sie auf " | ||
| + | |||
| + | <hidden / | ||
| + | <file php / | ||
| + | # | ||
| + | |||
| + | <?php | ||
| + | // VERSION=" | ||
| + | |||
| + | // Argumente | ||
| + | $dbuser = $argv[' | ||
| + | $dbpass = $argv[' | ||
| + | $dbhost = $argv[' | ||
| + | $dbport = $argv[' | ||
| + | |||
| + | // diese Zertifikate benutzen | ||
| + | $ssl_optionen=array( | ||
| + | PDO:: | ||
| + | PDO:: | ||
| + | PDO:: | ||
| + | ); | ||
| + | |||
| + | // Abfrage definieren | ||
| + | $sql = "SHOW DATABASES;"; | ||
| + | |||
| + | // Verbindung zum DBMS aufbauen | ||
| + | try { | ||
| + | $dbh = new pdo( | ||
| + | // ' | ||
| + | ' | ||
| + | ); | ||
| + | } catch (PDOException $e) { | ||
| + | print " | ||
| + | die(); | ||
| + | } | ||
| + | |||
| + | // Verbindung nutzen | ||
| + | foreach ($dbh-> | ||
| + | echo $row[' | ||
| + | } | ||
| + | |||
| + | // und nach der Nutzung, die Verbindung beenden | ||
| + | $dbh = null; | ||
| + | ?> | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | <hidden / | ||
| + | <file php / | ||
| + | # | ||
| + | |||
| + | <?php | ||
| + | // VERSION=" | ||
| + | |||
| + | // Argumente | ||
| + | $dbuser = $argv[' | ||
| + | $dbpass = $argv[' | ||
| + | $dbhost = $argv[' | ||
| + | $dbport = $argv[' | ||
| + | $dbname = $argv[' | ||
| + | |||
| + | // diese Zertifikate benutzen | ||
| + | $ssl_optionen=array( | ||
| + | PDO:: | ||
| + | PDO:: | ||
| + | PDO:: | ||
| + | ); | ||
| + | |||
| + | // Abfrage definieren | ||
| + | $sql = "SHOW TABLES"; | ||
| + | |||
| + | // Verbindung zur Datenbank aufbauen | ||
| + | try { | ||
| + | $dbh = new pdo( | ||
| + | //' | ||
| + | //' | ||
| + | ' | ||
| + | ); | ||
| + | } catch (PDOException $e) { | ||
| + | print " | ||
| + | die(); | ||
| + | } | ||
| + | |||
| + | // Verbindung nutzen | ||
| + | foreach ($dbh-> | ||
| + | echo $row[' | ||
| + | } | ||
| + | |||
| + | // und nach der Nutzung, die Verbindung beenden | ||
| + | $dbh = null; | ||
| + | ?> | ||
| + | </ | ||
| + | </ | ||
| + | ---- | ||
| + | |||
| + | |||
| + | ===== MySQL: Creating SSL Keys and Certificates Using OpenSSL ===== | ||
| + | |||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | |||
| + | |||
| + | ==== per Skript ==== | ||
| + | |||
| + | <hidden / | ||
| + | <file bash / | ||
| + | #!/bin/bash | ||
| + | |||
| + | # | ||
| + | # Create necessary files: $database, $serial and $new_certs_dir | ||
| + | # directory (optional) | ||
| + | # | ||
| + | |||
| + | # | ||
| + | VERSION=" | ||
| + | |||
| + | if [ x == " | ||
| + | DER_NAME=" | ||
| + | else | ||
| + | DER_NAME=" | ||
| + | fi | ||
| + | |||
| + | ### FQDNs von weiteren Netzwerken, in denen dieser Host NICs hat | ||
| + | ### bzw. alle FQDNs von allen Cluster-Knoten, | ||
| + | ALT_DNS_NAME=" | ||
| + | |||
| + | DAYS=" | ||
| + | BITS=" | ||
| + | |||
| + | rm -fr ${DER_NAME} | ||
| + | mkdir -p ${DER_NAME} | ||
| + | |||
| + | touch ${DER_NAME}/ | ||
| + | echo " | ||
| + | |||
| + | # | ||
| + | # Konfigurationsdatei erzeugen | ||
| + | # | ||
| + | #cp / | ||
| + | #replace ./demoCA ${DER_NAME} -- ${DER_NAME}/ | ||
| + | # | ||
| + | cat <<EOF > ${DER_NAME}/ | ||
| + | HOME = . | ||
| + | oid_section = new_oids | ||
| + | |||
| + | [ new_oids ] | ||
| + | tsa_policy1 = 1.2.3.4.1 | ||
| + | tsa_policy2 = 1.2.3.4.5.6 | ||
| + | tsa_policy3 = 1.2.3.4.5.7 | ||
| + | |||
| + | [ ca ] | ||
| + | default_ca = CA_default | ||
| + | |||
| + | [ CA_default ] | ||
| + | dir = / | ||
| + | certs = \$dir/certs | ||
| + | crl_dir = \$dir/crl | ||
| + | database = \$dir/ | ||
| + | new_certs_dir = \$dir/ | ||
| + | certificate = \$dir/ | ||
| + | serial = \$dir/ | ||
| + | crlnumber = \$dir/ | ||
| + | crl = \$dir/ | ||
| + | private_key = \$dir/ | ||
| + | x509_extensions = usr_cert | ||
| + | name_opt = ca_default | ||
| + | cert_opt = ca_default | ||
| + | default_days = ${DAYS} | ||
| + | default_crl_days = 30 | ||
| + | default_md = default | ||
| + | preserve = no | ||
| + | policy = policy_match | ||
| + | |||
| + | [ policy_match ] | ||
| + | countryName = match | ||
| + | stateOrProvinceName = match | ||
| + | organizationName = match | ||
| + | organizationalUnitName = optional | ||
| + | commonName = supplied | ||
| + | emailAddress = optional | ||
| + | |||
| + | [ policy_anything ] | ||
| + | countryName = optional | ||
| + | stateOrProvinceName = optional | ||
| + | localityName = optional | ||
| + | organizationName = optional | ||
| + | organizationalUnitName = optional | ||
| + | commonName = supplied | ||
| + | emailAddress = optional | ||
| + | |||
| + | [ req ] | ||
| + | default_bits = ${BITS} | ||
| + | default_keyfile = privkey.pem | ||
| + | distinguished_name = req_distinguished_name | ||
| + | attributes = req_attributes | ||
| + | x509_extensions = v3_ca | ||
| + | string_mask = utf8only | ||
| + | |||
| + | [ req_distinguished_name ] | ||
| + | countryName = Country Name (2 letter code) | ||
| + | countryName_default = DE | ||
| + | countryName_min = 2 | ||
| + | countryName_max = 2 | ||
| + | stateOrProvinceName = State or Province Name (full name) | ||
| + | stateOrProvinceName_default = Hessen | ||
| + | localityName = Locality Name (eg, city) | ||
| + | localityName_default = Frankfurt | ||
| + | 0.organizationName = Organization Name (eg, company) | ||
| + | 0.organizationName_default = Datenbank AG | ||
| + | organizationalUnitName = Organizational Unit Name (eg, section) | ||
| + | organizationalUnitName_default = Die UNIX-Administratoren | ||
| + | commonName = Common Name (e.g. server FQDN or YOUR name) | ||
| + | commonName_max = 64 | ||
| + | commonName_default = ${DER_NAME} | ||
| + | emailAddress = Email Address | ||
| + | emailAddress_max = 64 | ||
| + | emailAddress_default = ssladmin@domain.de | ||
| + | subjectAltName = DNS-Namen | ||
| + | subjectAltName_default = ${ALT_DNS_NAME} | ||
| + | |||
| + | [ req_attributes ] | ||
| + | challengePassword = A challenge password | ||
| + | challengePassword_min = 4 | ||
| + | challengePassword_max = 20 | ||
| + | challengePassword_default = asdf | ||
| + | unstructuredName = An optional company name | ||
| + | unstructuredName_default = IQ | ||
| + | |||
| + | [ usr_cert ] | ||
| + | basicConstraints = CA:FALSE | ||
| + | nsComment = " | ||
| + | subjectKeyIdentifier = hash | ||
| + | authorityKeyIdentifier = keyid, | ||
| + | |||
| + | [ v3_req ] | ||
| + | basicConstraints = CA:FALSE | ||
| + | keyUsage = nonRepudiation, | ||
| + | |||
| + | [ v3_ca ] | ||
| + | subjectKeyIdentifier = hash | ||
| + | authorityKeyIdentifier = keyid: | ||
| + | basicConstraints = critical, | ||
| + | |||
| + | [ crl_ext ] | ||
| + | authorityKeyIdentifier = keyid: | ||
| + | |||
| + | [ proxy_cert_ext ] | ||
| + | basicConstraints = CA:FALSE | ||
| + | nsComment = " | ||
| + | subjectKeyIdentifier = hash | ||
| + | authorityKeyIdentifier = keyid, | ||
| + | proxyCertInfo = critical, | ||
| + | |||
| + | [ tsa ] | ||
| + | default_tsa = tsa_config1 | ||
| + | |||
| + | [ tsa_config1 ] | ||
| + | dir = / | ||
| + | serial = \$dir/ | ||
| + | crypto_device = builtin | ||
| + | signer_cert = \$dir/ | ||
| + | certs = \$dir/ | ||
| + | signer_key = \$dir/ | ||
| + | signer_digest = sha256 | ||
| + | default_policy = tsa_policy1 | ||
| + | other_policies = tsa_policy2, | ||
| + | digests = sha256, sha384, sha512 | ||
| + | accuracy = secs:1, millisecs: | ||
| + | clock_precision_digits | ||
| + | ordering = yes | ||
| + | tsa_name = yes | ||
| + | ess_cert_id_chain = no | ||
| + | ess_cert_id_alg = sha512 | ||
| + | EOF | ||
| + | |||
| + | # | ||
| + | |||
| + | echo " | ||
| + | # | ||
| + | # 1. Generation of Certificate Authority(CA) | ||
| + | # => Common Name (eg, YOUR name) []:MySQL admin" | ||
| + | echo " | ||
| + | openssl req -nodes -new -x509 -keyout ${DER_NAME}/ | ||
| + | |||
| + | if [ ! -r ${DER_NAME}/ | ||
| + | echo "Das erstellen von ${DER_NAME}/ | ||
| + | echo " | ||
| + | exit 1 | ||
| + | fi | ||
| + | |||
| + | echo " | ||
| + | # | ||
| + | # 2. Create server key and server request | ||
| + | # => Common Name (eg, YOUR name) []:MySQL server" | ||
| + | echo " | ||
| + | openssl req -rand / | ||
| + | |||
| + | if [ ! -r ${DER_NAME}/ | ||
| + | echo "Das erstellen von ${DER_NAME}/ | ||
| + | echo " | ||
| + | exit 1 | ||
| + | fi | ||
| + | |||
| + | echo " | ||
| + | # | ||
| + | # 3. Sign server cert | ||
| + | #" | ||
| + | echo " | ||
| + | openssl ca -cert ${DER_NAME}/ | ||
| + | |||
| + | if [ ! -r ${DER_NAME}/ | ||
| + | echo "Das erstellen von ${DER_NAME}/ | ||
| + | echo " | ||
| + | exit 1 | ||
| + | fi | ||
| + | |||
| + | cat ${DER_NAME}/ | ||
| + | cat ${DER_NAME}/ | ||
| + | rm ${DER_NAME}/ | ||
| + | touch ${DER_NAME}/ | ||
| + | echo " | ||
| + | |||
| + | echo " | ||
| + | # | ||
| + | # 4. Create client request and client key | ||
| + | # => Common Name (eg, YOUR name) []:MySQL user" | ||
| + | echo " | ||
| + | openssl req -rand / | ||
| + | |||
| + | if [ ! -r ${DER_NAME}/ | ||
| + | echo "Das erstellen von ${DER_NAME}/ | ||
| + | echo " | ||
| + | exit 1 | ||
| + | fi | ||
| + | |||
| + | echo " | ||
| + | # | ||
| + | # 5. Sign client cert | ||
| + | #" | ||
| + | echo " | ||
| + | openssl ca -cert ${DER_NAME}/ | ||
| + | |||
| + | if [ ! -r ${DER_NAME}/ | ||
| + | echo "Das erstellen von ${DER_NAME}/ | ||
| + | echo " | ||
| + | exit 1 | ||
| + | fi | ||
| + | |||
| + | # | ||
| + | echo | ||
| + | openssl rsa -noout -modulus -in ${DER_NAME}/ | ||
| + | openssl x509 -noout -modulus -in ${DER_NAME}/ | ||
| + | echo | ||
| + | openssl rsa -noout -modulus -in ${DER_NAME}/ | ||
| + | openssl x509 -noout -modulus -in ${DER_NAME}/ | ||
| + | openssl req -noout -modulus -in ${DER_NAME}/ | ||
| + | openssl req -text -verify | ||
| + | echo | ||
| + | openssl rsa -noout -modulus -in ${DER_NAME}/ | ||
| + | openssl x509 -noout -modulus -in ${DER_NAME}/ | ||
| + | openssl req -noout -modulus -in ${DER_NAME}/ | ||
| + | openssl req -text -verify | ||
| + | echo | ||
| + | # | ||
| + | |||
| + | echo " | ||
| + | # | ||
| + | # 8. Create a my.cnf file that you can use to test the certificates | ||
| + | #" | ||
| + | cat <<EOF > ${DER_NAME}/ | ||
| + | [client] | ||
| + | ssl-ca=${DER_NAME}/ | ||
| + | ssl-cert=${DER_NAME}/ | ||
| + | ssl-key=${DER_NAME}/ | ||
| + | |||
| + | [mysqld] | ||
| + | ssl_ca=${DER_NAME}/ | ||
| + | ssl_cert=${DER_NAME}/ | ||
| + | ssl_key=${DER_NAME}/ | ||
| + | EOF | ||
| + | |||
| + | (cd ${DER_NAME} && tar -czf ../ | ||
| + | chmod 0600 ${DER_NAME}.tgz | ||
| + | ls -lha ${DER_NAME}.tgz | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | > / | ||
| + | ... | ||
| + | # | ||
| + | # 4. Sign server cert | ||
| + | # | ||
| + | Signature ok | ||
| + | subject=C = DE, ST = Hessen, L = Maintal, O = IQ-Optimize AG, OU = Operations, CN = mysqldb, emailAddress = ssladmin@domain.de, | ||
| + | Getting CA Private Key | ||
| + | | ||
| + | ... | ||
| + | # | ||
| + | # 7. Sign client cert | ||
| + | # | ||
| + | Signature ok | ||
| + | subject=C = DE, ST = Hessen, L = Maintal, O = IQ-Optimize AG, OU = Operations, CN = mysqldb, emailAddress = ssladmin@domain.de, | ||
| + | Getting CA Private Key | ||
| + | | ||
| + | ... | ||
| + | -rw------- 1 root root 11K Mai 24 15:26 mysqldb.tgz | ||
| + | | ||
| + | > find * -type f | grep -Fi .pem | ||
| + | mysqldb/ | ||
| + | mysqldb/ | ||
| + | mysqldb/ | ||
| + | mysqldb/ | ||
| + | mysqldb/ | ||
| + | mysqldb/ | ||
| + | mysqldb/ | ||
| + | mysqldb/ | ||
| + | | ||
| + | > tar tzf mysqldb.tgz | ||
| + | ca-key.pem | ||
| + | ca.pem | ||
| + | client-key.pem | ||
| + | client-cert.pem | ||
| + | server-key.pem | ||
| + | server-cert.pem | ||
| + | | ||
| + | > tar xzf mysqldb.tgz -C / | ||
| + | > chown mysql:mysql / | ||
| + | |||
| + | |||
| + | ==== verschlüsselte Verbindung mit einem MySQL-DBMS ==== | ||
| + | |||
| + | > tar xvzf mysqldb.tgz -C / | ||
| + | > chown mysql:mysql / | ||
| + | |||
| + | ohne Zertifikatsprüfung: | ||
| + | > mysql --tls-version=TLSv1.2 --ssl-mode=REQUIRED | ||
| + | |||
| + | Einweg-Zertifikatsprüfung (One-Way TLS): | ||
| + | > mysql --tls-version=TLSv1.2 --ssl-mode=REQUIRED --ssl-mode=VERIFY_IDENTITY --ssl-ca=/ | ||
| + | |||
| + | Zweiwege-Zertifikatsprüfung (Two-Way TLS): | ||
| + | > mysql --tls-version=TLSv1.2 --ssl-mode=REQUIRED --ssl-mode=VERIFY_IDENTITY --ssl-ca=/ | ||
| + | |||
