Um dieses Risiko zu überwinden, unterstützt MySQL die Verschlüsselung im Transport zwischen dem Client und dem Server über das TLS/SSL -Protokoll. Der Artikel konzentriert sich auf die manuelle Generierung von SSL -Zertifikaten und Schlüsseldateien in MySQL, um SSL zu konfigurieren. Später konzentriert sich der Artikel auch darauf, obligatorische Verschlüsselungsanforderungen von Kunden zu ermöglichen.
Einstieg
Mysql Versionen 5.7.28+ bietet ein praktisches Tool, das als MySQL_SSL_RSA_SETUP bekannt ist, das sich auf OpenSSL -Binärdateien stützt, um die erforderlichen SSL -Zertifikate und -tasten automatisch zu generieren, um eine sichere Verbindung zu unterstützen.
Überprüfen Sie daher vor Beginn vor Beginn den Standard -SSL -Verbindungsstatus des MySQL -Servers. Geben Sie den folgenden Befehl ein, um den SSL -Sitzungswert zu überprüfen:
MySQL> Zeigen Sie globale Variablen wie '%SSL%';Die obige Ausgabe zeigt, dass MySQL die Verschlüsselung im Transport für die aktuelle Sitzung nicht unterstützt.
Verwenden Sie OpenSSL, um SSL -Zertifikat und Schlüssel zu erstellen
Um eine Verschlüsselung beim Transit bereitzustellen, erfordert MySQL clientseitige und serverseitige X509-Zertifikate, die von der Zertifikatberechtigung unterzeichnet wurden. Wir generieren selbstsignierte Zertifikate sowie Server- und clientseitige Zertifikate über Befehlszeilen-Dienstprogramme OpenSSL. Es handelt sich um ein OpenSSL -Bibliotheks -Tool, das private Schlüssel generiert, X509 -Zertifikatanfragen erstellt, sie als CA unterzeichnet und sie überprüft.
Erstellen Sie vor Beginn ein Verzeichnis, um alle Dateien zu speichern:
Ubuntu@Ubuntu: ~ $ mkdir/var/lib/mysql/transit
Ubuntu@Ubuntu: ~ $ cd/var/lib/mysql/transit
Der folgende Befehlssatz erzeugt mehrere Eingabeaufforderungen, die nicht leere Antworten haben müssen.
Schlüssel- und Zertifikaterzeugung Zertifikatautorität
Erstellen eines selbstsignierten Zertifikats erfordert ein Zertifikat (Certificate Authority) über eine private Schlüsseldatei. Verwenden Sie den OpenSSL.
Ubuntu@Ubuntu: ~ $ OpenSSL Genrsa 2048> Ca-Key.Pem
Verwenden Sie den oben genannten Schlüssel mit einem OpenSSL REQ -Befehl, um ein Zertifikat für Ihre eigene CA mit einem Ablauf von 3000 Tagen zu generieren.
Ubuntu@Ubuntu: ~ $ openssl req -New -x509 -nodes -days 3000 -key ca -key.pem -out ca.Pem
Die obigen Befehle erstellen neue Dateien CA-Key.Pem und ca.PEM, um die X509-Zertifikate von MySQL Server und Client selbst zu unterzeichnen.
Generieren Sie einen privaten Schlüssel- und selbstsignierten Zertifikat für MySQL Server
Verwenden Sie OpenSSL, um MySQL Server RSA -Schlüssel- und Zertifikat -Signieranforderung (CSR) zu generieren:
Ubuntu@Ubuntu: ~ $ OpenSSL Genrsa 2048> Serverschlüssel.Pem
Ubuntu@Ubuntu: ~ $ openssl req -New -key Server -Key.PEM -out Server -REQ.Pem
Entfernen Sie nun die Passphrase aus der Serverschlüssel:
Ubuntu@Ubuntu: ~ $ openssl rsa -in Server -Key.PEM -out -Serverschlüssel.Pem
Generieren Sie das selbstsignierte Zertifikat von MySQL Server aus der Zertifikatanforderung mithilfe von CA Private Key und Certificate.
Ubuntu@Ubuntu: ~ $ OpenSSL X509 -REQ -IN Server -Req.PEM -Tage 3600 -ca ca.PEM -Cakey Ca -Key.PEM -Set_Serial 01 -out -Server -Cert.Pem
Jetzt erfordert die SSL -Konfiguration für MySQL keine CSR.
Generieren Sie den Kundenschlüssel und das selbstsignierte Zertifikat
Generieren Sie in ähnlicher Weise die Schlüssel- und Zertifikatanforderung für den Client.
Ubuntu@Ubuntu: ~ $ OpenSSL Req -NewKey RSA: 2048 -days 3600 -nodes -keeout Client -Key -Key.PEM -out Client -Req.Pem
Entfernen Sie die Passphrase aus dem Schlüssel und generieren Sie ein Client -Zertifikat aus der Zertifikatanforderung mit den CA -Dateien.
Ubuntu@Ubuntu: ~ $ openssl rsa -in Kundenschlüssel.PEM -out -Kunden -Key.Pem
Ubuntu@Ubuntu: ~ $ OpenSSL X509 -RQ -in Client -req.PEM -Tage 365000 -ca ca.PEM -Cakey Ca -Key.PEM -Set_Serial 01 -out -Client -Cert -Cert.Pem
Der Server akzeptiert nur Remoteverbindungen von den Clients mit diesen Dateien.
Überprüfen Sie zuletzt die Client- und serverseitigen Zertifikate mit dem CA-Zertifikat.
ubuntu@ubuntu: ~ $ opensensl verifizieren -cafile ca.PEM Server-Cert.PEM-Client-Cert.Pem
Server-Cert.Pem: OK
Client-Cert.Pem: OK
Der OK -Wert zeigt an, dass die Zertifikate korrekt generiert wurden und verwendet werden können.
Konfigurieren von MySQL Server
Um den TLS/SSL -Dienst für MySQL Server zu aktivieren Mysqld.Conf, wie zum Beispiel:
Verwenden Sie Ihren bevorzugten Editor, um die Konfigurationsdatei im Inneren zu bearbeiten /etc/mysql/mysql.Conf.D Verzeichnis.
Ubuntu@Ubuntu: ~ $ vim/etc/mysql/mysql.Conf.D/Mysqld.CNF
[Mysqld]
ssl_ca =/var/lib/mysql/new_certs/ca.Pem
SSL_CERT =/var/lib/mysql/new_certs/server-cert.Pem
ssl_key =/var/lib/mysql/new_certs/server-key.Pem
Ändern Sie zuletzt die SSL -Schlüsseln und die Besitzer des Zertifikats sowie die Berechtigungen.
Ubuntu@Ubuntu: ~ $ chown -r mysql: mysql/var/lib/mysql/new_certs/
Ubuntu@Ubuntu: ~ $ chmod 600 Client-Schlüssel.PEM-Serverschlüssel.PEM CA-Key.Pem
Starten Sie die Datenbank neu, um die letzten Änderungen zu laden.
Ubuntu@Ubuntu: ~ $ sudo Service MySQL Neustart
Melden Sie sich nach dem Neustart beim Server an und überprüfen Sie den aktuellen Status der MySQL SSL -Sitzung.
Client-Seite-Konfiguration
Die Erstellung einer sicheren Fernverbindung aus dem Client erfordert die Übertragung der oben generierten clientseitigen OpenSL-Zertifikatdateien. Erstellen Sie ein neues Verzeichnis und verwenden Sie das SCP -Dienstprogramm für die sichere Dateiübertragung.
Ubuntu@Ubuntu: ~ $ mkdir ~/client-cert
Ubuntu@ubuntu: ~ $ scp user@[ip_address]:/var/lib/mysql/transit/ca-cert.PEM ~/client-cert/
Ubuntu@ubuntu: ~ $ scp user@[ip_address]:/var/lib/mysql/transit/client-cert.PEM ~/client-cert/
Ubuntu@ubuntu: ~ $ scp user@[ip_address]:/var/lib/mysql/transit/client-key.PEM ~/client-cert/
Während des Erstellens einer verschlüsselten Remoteverbindung benötigt der Client nun kundenseitige Optionen, mit denen die Client-Seite-Tasten und -zertifikate überprüft werden können. Die mitgelieferten Optionen ähneln den serverseitigen Systemvariablen, aber die, die, die -SSL-Key Und -SSL-Cert Optionen identifizieren Pfade zum privaten Schlüssel und Zertifikat des Kunden. Benutze die -SSL-CA Option, den Pfad zum CA -Zertifikat hinzuzufügen. Diese Datei muss dem serverseitigen CA-Zertifikat übereinstimmen.
Verwenden Sie den folgenden Befehl mit allen erforderlichen Optionen, um eine sichere Remote -Verbindung mit dem MySQL -Datenbankserver herzustellen.
Ubuntu@ubuntu: ~ $ mySQL -u Benutzer -p -h--ssl-ca = ~/client-cert/ca.PEM-SSL-CERT = ~/Client-Cert/Client-Cert.PEM-SSL-Key = unter ~/client-cert/client-key.Pem
Konfigurieren Sie obligatorische verschlüsselte Verbindungen
Für einige MySQL -Server ist es nicht nur erforderlich, dass der Client über eine verschlüsselte Verbindung mit dem Server verbindet, sondern ist jedoch obligatorisch. Mit MySQL kann der Serveradministrator obligatorische verschlüsselte Verbindungen konfigurieren. Es wird ermöglicht, indem drei verschiedene Kontrollstufen platziert werden:
Lassen Sie uns jeden von ihnen beschreiben:
required_secure_transport
Aktivieren Sie die Kunden, die eine verschlüsselte Verbindung verwenden, das required_secure_transport Variable in der MySQL -Konfigurationsdatei in/etc/mysql/mySQL.CNF.D Verzeichnis:
Ubuntu@Ubuntu: ~ $ sudo vim/etc/mysql/mysql.Conf.D/Mysqld.CNF
[Mysqld]
required_secure_transport = on
Die obige Systemvariable stellt sicher. Daher lehnt der Server eine Client -Verbindungsanforderung ohne sicheren Transport ab und gibt eine Fehlerausgabe von ER_SECURE_TRANSPORT_REQUE an das Programm des Clients zurück.
Darüber hinaus deaktiviert die obige Serverkonfiguration auch die Remote -Clientverbindung mit a -SSL-Mode = deaktiviert Saite.
Aufrufen des Client -Programms
Diese Steuerung ermöglicht das Aufrufen des Client -Programms unabhängig von den Servereinstellungen eine sichere verschlüsselte Kommunikation. Das heißt, auch wenn der Server nicht so konfiguriert ist, dass er einen SSL/TLS -Transport festlegt, kann er eine sichere Verbindung zum Wunsch des Kunden aufrechterhalten.
Es ist durch die Verwendung eines möglich -SSL-Modus Option in MySQL 5 verfügbar.7.11 zusammen mit seinen verschiedenen Werten. Es ist hilfreich, den gewünschten Sicherheitszustand der Clientverbindung zum Server anzugeben. Die Optionswerte werden basierend auf dem zunehmenden Grad der Strenge angewendet.
Es ist jedoch wichtig zu beachten. Dazu gehören automatisch generierte Zertifikate vom Server oder manuell über das Tool von MySQL_SSL_RSA_SETUP.
Abgesehen von der Standardverschlüsselung ermöglicht MySQL dem Client, zusätzliche Sicherheitseinstellungen einzuschließen, indem ein CA -Zertifikat wie der Server gesendet wird und die Überprüfung der Hostnamen -Identität aktiviert wird. Diese Einstellungen ermöglichen es beiden Parteien, einer gemeinsamen Einheit zu vertrauen, und der Kunde kann überprüfen, ob er sich mit dem richtigen Host verbindet.
Wir verstehen nun, wie der obige Modus mit den CA -Zertifikatsoptionen interagiert:
Benutzerkonten konfigurieren
Konfigurieren Sie ein bestimmtes Benutzerkonto, um die verschlüsselte Kommunikation durch den Client zu aktivieren, um über SSL auf den MySQL -Server zuzugreifen. Erstellen Sie ein Benutzerkonto Benutzer erstellen mit dem ERFORDERN Klausel Erklärung. Oder benutze die Benutzer ändern Anweisung, um die Erforderungsklausel hinzuzufügen. Diese Steuerung beendet die Clientverbindungsversuche zum Server, wenn sie keine verschlüsselte Verbindung unterstützt.
Die Forderungsklausel ist hilfreich, um eine Verschlüsselungskonfiguration auszuführen, die strenge Sicherheitsanforderungen erzwingt. Es ermöglicht die Angabe eines oder mehr als eines tls_option Wert.
Lassen Sie uns in die Details der erforderlichen Befehlsoptionen der Clients eingehen, die mit verschiedenen Erforderungswerten konfiguriert sind:
KEINER: erfordert keine SSL -Verbindung
SSL: Der Server ermöglicht nur eine verschlüsselte Verbindung von SSL-fähigen Konten.
X509: Fordert den Kunden den privaten Schlüssel und das Zertifikat vor. Dieser Wert erfordert nicht die Notwendigkeit, das CA -Zertifikat, das Thema und den Emittenten anzuzeigen.
Die Klausel gibt die erforderlichen Verschlüsselungseigenschaften so an, dass die SSL -Option nicht einbezogen werden muss.
MySQL> Benutzer erstellen 'Benutzer'@'localhost' benötigt x509;Jetzt muss der Kunde -sl -Key- und -SSL -Cert -Optionen angeben, um eine Verbindung herzustellen, während -SSL -CA nicht erforderlich ist (dies gilt auch für die Aussteller Und Thema Werte).
Ubuntu@ubuntu: ~ $ mySQL -u Benutzer -p -h--SSL-CERT = Client-Cert.PEM-SSL-Key = Client-Key.Pem
AUSSTELLER: Das mit der Erfordernisse erstellte Konto muss der Client -SSL -Key- und -SL -Cert -Optionen mit einem gültigen Zertifikat angeben, das vom CA 'Emittenten' ausgestellt wurde, angeben. Erstellen Sie das Benutzerkonto wie folgt:
MySQL> Benutzer erstellen 'user' '@' localhost 'Erforderliche Issuer'/c = se/st = stockholm/l = stockholm/o = mysql/cn = ca/Emailaddress = [email protected] ';Wenn das Zertifikat bei einem anderen Emittenten gültig ist, schlägt der Verbindungsversuch fehl.
THEMA: verlangen, dass der Kunde das Zertifikat mit a vorlegt Thema Wert bereitgestellt beim Erstellen seines Kontos. Eine Verbindung mit einem gültigen Zertifikat, jedoch ein anderes Thema in Verbindungsterminationen.
MySQL> Benutzer erstellen 'Benutzer'@'localhost' Erfordert Betreff '/c = se/st = stockholm/l = stockholm/o = MySQL Demo Client -Zertifikat/CN = Client/Emailaddress = [email protected] ';CHIFFRE: Das mit der Anweisung erstellte Konto erfordert, dass der Client die Cipher -Methode zum Verschlüsseln der Kommunikation einbezieht. Es ist notwendig, sicherzustellen, ob Chiffren und Schlüssellängen ausreichend stark sind.
MySQL> Benutzer erstellen 'Benutzer'@'localhost' Erfordert Cipher 'edh-rsa-Des-cbc3-sha';Abschluss
Der Artikel zeigt, wie die Kommunikation zwischen MySQL Server und Clients sichern kann, indem das SSL -Protokoll aktiviert wird. Wir lernen, ein manuell selbst signiertes Zertifikat zu erstellen, während wir dem Host im Netzwerk vertrauen. Wir wenden auch die Verschlüsselung im Transit für die Kommunikation von MySQL Server außerhalb des Netzwerks an und lernen Möglichkeiten, den Server für obligatorische Verschlüsselungsanforderungen zu konfigurieren.