{"id":586,"date":"2016-02-24T10:42:24","date_gmt":"2016-02-24T10:42:24","guid":{"rendered":"http:\/\/www.intelli.ch\/?p=586"},"modified":"2023-10-31T19:29:58","modified_gmt":"2023-10-31T19:29:58","slug":"mysql-verbindungen-mit-ssl-verschluesseln-ubuntu-14-04","status":"publish","type":"post","link":"https:\/\/www.dev-metal.ch\/?p=586","title":{"rendered":"MySQL Verbindungen mit SSL verschl\u00fcsseln &#8211; Ubuntu 14.04 \/ 18.04 \/ Mysql 5.6.28"},"content":{"rendered":"<p>Hier wird erkl\u00e4rt, wie ein MySQL Client eine verschl\u00fcsselte Verbindung zu einem MySQL Server, der mit Ubuntu 14.04 und Mysql-Server 5.6.28 betrieben wird, aufgebaut werden kann.<\/p>\n<h2><span id=\"SSL_Konfiguration_aktivieren\" class=\"mw-headline\">SSL Zertifikate erstellen<\/span><\/h2>\n<p>Es werden Zertifikate mit 2048 Bits und einer G\u00fcltigkeit von 3650 Tagen erstellt. Nach diesem Zeitraum m\u00fcssen die Zertifikate verl\u00e4ngert oder neu erstellt werden.<\/p>\n<p>Bitte nicht vergessen, dass der Common Name (CN) vom Client und Server Zertifikat unterschiedlich ist. z.B.\u00a0servername.intelli.ch\u00a0und\u00a0client.intelli.ch<\/p>\n<pre class=\"\">cd \/etc\/mysql\/<\/pre>\n<pre class=\"lang:sh decode:true \"># Generate a CA key and certificate with SHA1 digest \nopenssl genrsa 2048 &gt; ca-key.pem \nopenssl req -sha1 -new -x509 -nodes -days 3650 -key ca-key.pem &gt; ca-cert.pem \n\n# Create server key and certficate with SHA1 digest, sign it and convert \n# the RSA key from PKCS #8 (OpenSSL 1.0 and newer) to the old PKCS #1 format \nopenssl req -sha1 -newkey rsa:2048 -days 3650 -nodes -keyout server-key.pem &gt; server-req.pem \nopenssl x509 -sha1 -req -in server-req.pem -days 3650 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 &gt; server-cert.pem \nopenssl rsa -in server-key.pem -out server-key.pem \n\n# Create client key and certificate with SHA digest, sign it and convert \n# the RSA key from PKCS #8 (OpenSSL 1.0 and newer) to the old PKCS #1 format \nopenssl req -sha1 -newkey rsa:2048 -days 3650 -nodes -keyout client-key.pem &gt; client-req.pem \nopenssl x509 -sha1 -req -in client-req.pem -days 3650 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 &gt; client-cert.pem \nopenssl rsa -in client-key.pem -out client-key.pem<\/pre>\n<pre class=\"lang:sh decode:true\">chmod 400 \/etc\/mysql\/*.pem\nchown mysql \/etc\/mysql\/*.pem\n<\/pre>\n<h2><span id=\"SSL_Konfiguration_aktivieren\" class=\"mw-headline\">SSL Konfiguration aktivieren<\/span><\/h2>\n<p>In der MySQL Konfiguration (\/<code>etc\/mysql\/my.cnf<\/code>) muss SSL mit den zugeh\u00f6rigen Zertifikaten aktiviert werden.<\/p>\n<pre class=\"lang:sh decode:true\">ssl-ca=\/etc\/mysql\/ca-cert.pem\nssl-cert=\/etc\/mysql\/server-cert.pem\nssl-key=\/etc\/mysql\/server-key.pem<\/pre>\n<p>Nun MySql-Server neu starten<\/p>\n<pre class=\"lang:sh decode:true\">sudo service mysql restart<\/pre>\n<p>Es kann auf der DB \u00fcberpr\u00fcft werden, ob die Konfiguration richtig \u00fcbernommen wurde:<\/p>\n<pre class=\"lang:sh decode:true\">mysql &gt; show variables like '%ssl%';\n\n+---------------+----------------------------------+\n| Variable_name | Value                            |\n+---------------+----------------------------------+\n| have_openssl  | YES                              |\n| have_ssl      | YES                              |\n| ssl_ca        | \/etc\/mysql\/ca-cert.pem           |\n| ssl_capath    |                                  |\n| ssl_cert      | \/etc\/mysql\/server-cert.pem       |\n| ssl_cipher    |                                  |\n| ssl_key       | \/etc\/mysql\/server-key.pem        |\n+---------------+----------------------------------+<\/pre>\n<h2><span id=\"SSL_Verschl.C3.BCsselung_f.C3.BCr_MySQL_User_aktivieren\" class=\"mw-headline\">SSL Verschl\u00fcsselung f\u00fcr MySQL User aktivieren<\/span><\/h2>\n<p>Es gibt folgende M\u00f6glichkeiten bei der Rechtevergabe f\u00fcr Benutzer in Bezug auf SSL:<\/p>\n<ul>\n<li><b>REQUIRE X509<\/b>: ein beliebiges g\u00fcltiges SSL Client Zertifikat kann verwendet werden<\/li>\n<li><b>REQUIRE ISSUER \/ REQUIRE SUBJECT<\/b>: ein beliebiges g\u00fcltiges SSL Client Zertifikat reicht nicht aus, es muss von einer mit <b>ISSUER <\/b>spezifizierten CA kommen und\/oder ein bestimmtes <b>SUBJECT<\/b> enthalten.<\/li>\n<li><b>REQUIRE SSL<\/b>: die Verbindung muss \u00fcber SSL verschl\u00fcsselt aufgebaut werden, die Authenfizierung kann sowohl via Passwort als auch \u00fcber ein SSL Client Zertifikat erfolgen.<\/li>\n<\/ul>\n<p>Im Folgenden Beispiel wird der User &#8222;ssluser&#8220; erstellt der alle Rechte (ALL PRIVILEGES) auf alle Datenbanken (*.*) am &#8222;localhost&#8220; hat und ein g\u00fcltiges SSL Client Zertifikat vorweisen muss.<\/p>\n<pre class=\"\">GRANT ALL PRIVILEGES ON *.* TO 'ssluser'@'localhost' IDENTIFIED BY 'topsecret' REQUIRE X509;\n<\/pre>\n<h3><span id=\"Force_Client_SSL\">Client SSL erzwingen<\/span><\/h3>\n<pre class=\"lang:sh decode:true\">grant all privileges on database.* to 'username'@'hostaddress' identified by 'password' require SSL;\n\noder \n\nGRANT USAGE ON *.* TO 'ralph'@'%' REQUIRE SSL;<\/pre>\n<h2><span id=\"Verschl.C3.BCsselte_MySQL_Verbindung_testen\" class=\"mw-headline\">Verschl\u00fcsselte MySQL Verbindung testen<\/span><\/h2>\n<pre class=\"\">cd \/etc\/mysql\/\nmysql -ussluser -p -h127.0.0.1 --ssl-ca=ca-cert.pem --ssl-cert=client-cert.pem --ssl-key=client-key.pem\n<\/pre>\n<p>Hint: Auf Ubuntu 18.04 schlug dieser Befehl mit dem Feher &#8222;SSL connection error: SSL_CTX_set_default_verify_paths failed&#8220; fehl. Das liegt daran, weil der lokale User mit dem dieser mysql-Befehl ausgef\u00fchrt wird, keine Berechtigung auf die Zertifikate hat. Um den Test trotzdem machen zu k\u00f6nnen, kann der Befehl mit sudo ausgef\u00fchrt werden.<\/p>\n<p>Die SSL Keys m\u00fcssen wenn der Zugriff von einem entfernten Host aus erfolgen soll nat\u00fcrlich vorher dorthin kopiert werden.<\/p>\n<p>Mittels dem Befehl <code>SHOW STATUS LIKE 'Ssl_cipher';<\/code> kann sich der Verschl\u00fcsselungsstatus des verbundenen MySQL Clients angezeigt werden lassen.<\/p>\n<pre class=\"lang:sh decode:true\">mysql &gt; SHOW STATUS LIKE 'Ssl_cipher';\n\n+---------------+--------------------+\n| Variable_name | Value              |\n+---------------+--------------------+\n| Ssl_cipher    | DHE-RSA-AES256-SHA | \n+---------------+--------------------+\n1 row in set (0.00 sec)\n<\/pre>\n<pre class=\"lang:sh decode:true\">mysql&gt; SHOW STATUS LIKE 'Ssl_version';\n\n+---------------+---------+\n| Variable_name | Value   |\n+---------------+---------+\n| Ssl_version   | TLSv1.1 |\n+---------------+---------+\n1 row in set (0.01 sec)\n<\/pre>\n<h2>\u00dcberpr\u00fcfe alle Server-Connections<\/h2>\n<p>Es kann auch \u00fcberpr\u00fcft werden ob ALLE Verbindungen zum Mysql-Server auch wirklich mit SSL Connecten.<\/p>\n<p>Mit folgendem Befehl kann \u00fcberpr\u00fcft werden ob und welche User mit SSL mit dem Mysql-Server kommunizieren:<\/p>\n<pre class=\"lang:sh decode:true\">SELECT sbt.variable_value AS tls_version,  t2.variable_value AS cipher, processlist_user AS user, processlist_host AS host FROM performance_schema.status_by_thread AS sbt JOIN performance_schema.threads AS t ON t.thread_id = sbt.thread_id JOIN performance_schema.status_by_thread AS t2 ON t2.thread_id = t.thread_id WHERE sbt.variable_name = 'Ssl_version' and t2.variable_name = 'Ssl_cipher' ORDER BY tls_version;<\/pre>\n<h2>Links<\/h2>\n<ul>\n<li>Bei diesem Beitrag handelt es sich um eine Erweiterung des Beitrags von\u00a0<a title=\"Benutzer:Cmitasch\" href=\"https:\/\/www.thomas-krenn.com\/de\/wiki\/Benutzer:Cmitasch\">Christoph Mitasch<\/a>. Siehe auch\u00a0<a href=\"https:\/\/www.thomas-krenn.com\/de\/wiki\/MySQL_Verbindungen_mit_SSL_verschl%C3%BCsseln\" target=\"_blank\" rel=\"noopener\">https:\/\/www.thomas-krenn.com\/de\/wiki\/MySQL_Verbindungen_mit_SSL_verschl%C3%BCsseln<\/a><\/li>\n<li><a href=\"https:\/\/www.howtoforge.com\/tutorial\/how-to-enable-ssl-and-remote-connections-for-mysql-on-centos-7\/\" target=\"_blank\" rel=\"noopener\">https:\/\/www.howtoforge.com\/tutorial\/how-to-enable-ssl-and-remote-connections-for-mysql-on-centos-7\/<\/a><\/li>\n<li><a href=\"https:\/\/www.percona.com\/blog\/2016\/02\/23\/mysql-connection-using-ssl-or-not\/\" target=\"_blank\" rel=\"noopener\">https:\/\/www.percona.com\/blog\/2016\/02\/23\/mysql-connection-using-ssl-or-not\/<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Hier wird erkl\u00e4rt, wie ein MySQL Client eine verschl\u00fcsselte Verbindung zu einem MySQL Server, der mit Ubuntu 14.04 und Mysql-Server 5.6.28 betrieben wird, aufgebaut werden kann. SSL Zertifikate erstellen Es werden Zertifikate mit 2048 Bits und einer G\u00fcltigkeit von 3650 Tagen erstellt. Nach diesem Zeitraum m\u00fcssen die Zertifikate verl\u00e4ngert oder neu erstellt werden. Bitte nicht [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_lmt_disableupdate":"","_lmt_disable":"","footnotes":""},"categories":[17],"tags":[26],"class_list":["post-586","post","type-post","status-publish","format-standard","hentry","category-mysql","tag-tomcat-mysql-java"],"modified_by":"ralph","_links":{"self":[{"href":"https:\/\/www.dev-metal.ch\/index.php?rest_route=\/wp\/v2\/posts\/586","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dev-metal.ch\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dev-metal.ch\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dev-metal.ch\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dev-metal.ch\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=586"}],"version-history":[{"count":19,"href":"https:\/\/www.dev-metal.ch\/index.php?rest_route=\/wp\/v2\/posts\/586\/revisions"}],"predecessor-version":[{"id":2010,"href":"https:\/\/www.dev-metal.ch\/index.php?rest_route=\/wp\/v2\/posts\/586\/revisions\/2010"}],"wp:attachment":[{"href":"https:\/\/www.dev-metal.ch\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=586"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dev-metal.ch\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=586"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dev-metal.ch\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=586"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}