{"id":589,"date":"2016-02-24T10:57:11","date_gmt":"2016-02-24T10:57:11","guid":{"rendered":"http:\/\/www.intelli.ch\/?p=589"},"modified":"2019-03-06T08:39:22","modified_gmt":"2019-03-06T08:39:22","slug":"jdbc-verbindung-ueber-ssl-auf-mysql-server-tomcat","status":"publish","type":"post","link":"https:\/\/www.dev-metal.ch\/?p=589","title":{"rendered":"JDBC-Verbindung \u00fcber SSL auf Mysql-Server (Tomcat)"},"content":{"rendered":"<p><a href=\"http:\/\/192.168.2.32:8082\/?p=586\" target=\"_blank\" rel=\"noopener\">Hier <\/a>wurde erkl\u00e4rt, wie man den MySQL-Server konfiguriert, so dass in MySQL-Client SSL Verbindungen zum Server aufbauen kann.<\/p>\n<p>Nun m\u00f6chte ich die SSL-Verbindung in einer Java-Applikation, welche in einem Tomcat l\u00e4uft, verwenden. Dazu wird eine JDBC-Connection \u00fcber SSL zum MySQL Server aufgebaut.<\/p>\n<p>Die Server- und Client-Zertifikate wurden <a href=\"http:\/\/192.168.2.32:8082\/?p=586\" target=\"_blank\" rel=\"noopener\">hier<\/a> bereits erstellt.<\/p>\n<p>Dieser Beitrag basiert auf <a href=\"http:\/\/albertolarripa.com\/2012\/06\/02\/how-to-enable-data-encryption-ssl-for-a-jdbc-driver\/\" target=\"_blank\" rel=\"noopener\">Link<\/a><\/p>\n<h2>KeyStore<\/h2>\n<p>Tomcat-Applikationen m\u00fcssen die Zertifikate in einem Keystore\u00a0gespeichert halten.<\/p>\n<h2><span id=\"Client_Packet\">Client Packet<\/span><\/h2>\n<p>Ein Paket mit client Zertifikat und client key erstellen<\/p>\n<pre id=\"terminal\" class=\"\">openssl pkcs12 -export -inkey client-key.pem -in client-cert.pem -out client.packet<\/pre>\n<h2><span id=\"MyKSjks\">MyKS.jks<\/span><\/h2>\n<p>Einen neuen KeyStore \u201c<strong>MyKS.jks<\/strong>\u201d erstellen, der das erstellte client paket und die CA Zertifikate enth\u00e4lt. Als Passwort w\u00e4hle ich immer das gleiche.<\/p>\n<pre class=\"lang:sh decode:true\">sudo keytool -importkeystore -deststorepass password -destkeypass password -destkeystore myKS.jks -srckeystore client.packet -srcstoretype PKCS12 -srcstorepass password -alias tomcat<\/pre>\n<pre id=\"terminal\" class=\"\">sudo keytool -importcert -alias mysqlCA -trustcacerts -file \/root\/ca-cert.pem -keystore myKS.jks<\/pre>\n<p>Nicht vergessen die Berechtigung ad\u00e4quat anzupassen<\/p>\n<pre class=\"lang:sh decode:true \">chmod 440 myKS.jks<\/pre>\n<h2><span id=\"Configure_Tomcat\">Tomcat konfigurieren<\/span><\/h2>\n<h3><span id=\"JAVA_OPTS\">JAVA_OPTS<\/span><\/h3>\n<p>Keystore in Tomcat-Verzeichnis kopieren. SSL konfigurieren und den keystore anmelden. Hierzu ist auch die Angabe des oben genutzen Passwortes notwendig, so dass der Keystore gelesen werden kann.\u00a0Diese Properties k\u00f6nnen z.B.\u00a0in <strong><em>catalina.sh<\/em><\/strong>\u00a0exportiert werden (export).<\/p>\n<p>In Ubuntu 14.04 findet man das startup-File von Tomcat unter<\/p>\n<pre class=\"lang:sh decode:true \">\/etc\/default\/tomcat7<\/pre>\n<pre class=\"lang:sh decode:true\">export JAVA_OPTS=\"-Djavax.net.ssl.keyStore=\/usr\/local\/etc\/tomcat\/certs\/myKS.jks -Djavax.net.ssl.keyStorePassword=password -Djavax.net.ssl.trustStore=\/usr\/local\/etc\/tomcat\/certs\/myKS.jks -Djavax.net.ssl.trustStorePassword=password\"\r\n<\/pre>\n<p>oder als Java-Parameter:<\/p>\n<pre class=\"lang:sh decode:true\">-Djavax.net.ssl.keyStore=path_to_keystore_file\r\n-Djavax.net.ssl.keyStorePassword=password\r\n-Djavax.net.ssl.trustStore=path_to_truststore_file\r\n-Djavax.net.ssl.trustStorePassword=password<\/pre>\n<p>oder man k\u00f6nnte dies auch in der Tomcat-Applikation als System-Properties definieren:<\/p>\n<pre class=\"lang:sh decode:true \">System.setProperty(\"javax.net.ssl.keyStore\",\"path_to_keystore_file\");\r\nSystem.setProperty(\"javax.net.ssl.keyStorePassword\",\"password\");\r\nSystem.setProperty(\"javax.net.ssl.trustStore\",\"path_to_truststore_file\");\r\nSystem.setProperty(\"javax.net.ssl.trustStorePassword\",\"password\");<\/pre>\n<h2><span id=\"JDBC_URL\">JDBC URL<\/span><\/h2>\n<p>Dann muss noch die Connection so angepasst werden, dass SSL verwendet wird (<strong>useSSL<\/strong>). Dies kann \u00fcber einen connection-parameter gemacht werden.<\/p>\n<p>Das kann entweder \u00fcber die URL mit\u00a0<strong>useSSL=true<\/strong>\u00a0oder aber \u00fcber die <strong>java.util.Properties<\/strong>\u00a0(<strong>propertyuseSSL<\/strong>\u00a0to\u00a0true)\u00a0Instanz, welche dem\u00a0DriverManager.getConnection() mitgegeben wird, gemacht werden.<\/p>\n<pre class=\"\">jdbc:mysql:\/\/mysql.server.com\/database?verifyServerCertificate=false<strong>&amp;amp;<\/strong>useSSL=true<strong>&amp;amp;<\/strong>requireSSL=true<\/pre>\n<h2><span id=\"CHECK\">CHECK<\/span><\/h2>\n<p>\u00dcberpr\u00fcfen ob die Verbindung auch wirklich verschl\u00fcsselt daher kommt:<\/p>\n<pre id=\"terminal\" class=\"\">\u00a0sudo tcpdump -i any -vv -X src port 3306<\/pre>\n<p>Vorher<\/p>\n<pre class=\"lang:sh decode:true\">13:56:05.099198 IP (tos 0x8, ttl 64, id 6943, offset 0, flags [DF], proto TCP (6), length 63)\r\n    localhost.mysql &gt; localhost.50479: Flags [P.], cksum 0xfe33 (incorrect -&gt; 0xab2d), seq 3174702966:3174702977, ack 903431479, win 800, options [nop,nop,TS val 2444442 ecr 2444442], length 11\r\n        0x0000:  4508 003f 1b1f 4000 4006 2190 7f00 0001  E..?..@.@.!.....\r\n        0x0010:  7f00 0001 0cea c52f bd3a 1f76 35d9 4537  .......\/.:.v5.E7\r\n        0x0020:  8018 0320 fe33 0000 0101 080a 0025 4c9a  .....3.......%L.\r\n        0x0030:  0025 4c9a 0700 0001 0000 0000 0000 00    .%L............\r\n13:56:05.100525 IP (tos 0x8, ttl 64, id 6944, offset 0, flags [DF], proto TCP (6), length 129)\r\n    localhost.mysql &gt; localhost.50479: Flags [P.], cksum 0xfe75 (incorrect -&gt; 0xec2b), seq 11:88, ack 35, win 800, options [nop,nop,TS val 2444442 ecr 2444442], length 77\r\n        0x0000:  4508 0081 1b20 4000 4006 214d 7f00 0001  E.....@.@.!M....\r\n        0x0010:  7f00 0001 0cea c52f bd3a 1f81 35d9 4559  .......\/.:..5.EY\r\n        0x0020:  8018 0320 fe75 0000 0101 080a 0025 4c9a  .....u.......%L.\r\n        0x0030:  0025 4c9a 0100 0001 012c 0000 0203 6465  .%L......,....de\r\n        0x0040:  6600 0000 1640 4073 6573 7369 6f6e 2e74  f....@@session.t\r\n        0x0050:  785f 7265 6164 5f6f 6e6c 7900 0c3f 0001  x_read_only..?..\r\n        0x0060:  0000 0008 8000 0000 0005 0000 03fe 0000  ................\r\n        0x0070:  0000 0200 0004 0130 0500 0005 fe00 0000  .......0........\r\n        0x0080:  00                                       .\r\n13:56:05.105052 IP (tos 0x8, ttl 64, id 6945, offset 0, flags [DF], proto TCP (6), length 1781)\r\n    localhost.mysql &gt; localhost.50479: Flags [P.], cksum 0x04ea (incorrect -&gt; 0x7756), seq 88:1817, ack 143, win 800, options [nop,nop,TS val 2444443 ecr 2444442], length 1729\r\n        0x0000:  4508 06f5 1b21 4000 4006 1ad8 7f00 0001  E....!@.@.......\r\n        0x0010:  7f00 0001 0cea c52f bd3a 1fce 35d9 45c5  .......\/.:..5.E.\r\n        0x0020:  8018 0320 04ea 0000 0101 080a 0025 4c9b  .............%L.\r\n        0x0030:  0025 4c9a 0100 0001 0638 0000 0203 6465  .%L......8....de\r\n        0x0040:  6604 7076 7332 0d74 656d 705f 6361 7465  f.pvs2.temp_cate\r\n        0x0050:  676f 7279 0d74 656d 705f 6361 7465 676f  gory.temp_catego\r\n        0x0060:  7279 0269 6402 6964 0c3f 000b 0000 0003  ry.id.id.?......\r\n        0x0070:  0000 0000 003c 0000 0303 6465 6604 7076  .....&lt;....def.pv\r\n        0x0080:  7332 0d74 656d 705f 6361 7465 676f 7279  s2.temp_category\r\n        0x0090:  0d74 656d 705f 6361 7465 676f 7279 046e  .temp_category.n\r\n        0x00a0:  616d 6504 6e61 6d65 0c3f 00ff ffff fffc  ame.name.?......\r\n        0x00b0:  9000 0000 003c 0000 0403 6465 6604 7076  .....&lt;....def.pv\r\n        0x00c0:  7332 0d74 656d 705f 6361 7465 676f 7279  s2.temp_category<\/pre>\n<p>Nachher<\/p>\n<pre class=\"lang:sh decode:true \">13:59:58.645194 IP (tos 0x8, ttl 64, id 60639, offset 0, flags [DF], proto TCP (6), length 52)\r\n    localhost.mysql &gt; localhost.50483: Flags [.], cksum 0xfe28 (incorrect -&gt; 0xf2c8), seq 2669811453, ack 3878597006, win 851, options [nop,nop,TS val 2502828 ecr 2502828], length 0\r\n        0x0000:  4508 0034 ecdf 4000 4006 4fda 7f00 0001  E..4..@.@.O.....\r\n        0x0010:  7f00 0001 0cea c533 9f22 16fd e72e b18e  .......3.\"......\r\n        0x0020:  8010 0353 fe28 0000 0101 080a 0026 30ac  ...S.(.......&amp;0.\r\n        0x0030:  0026 30ac                                .&amp;0.\r\n13:59:58.645264 IP (tos 0x8, ttl 64, id 60640, offset 0, flags [DF], proto TCP (6), length 105)\r\n    localhost.mysql &gt; localhost.50483: Flags [P.], cksum 0xfe5d (incorrect -&gt; 0xbe29), seq 0:53, ack 1, win 851, options [nop,nop,TS val 2502828 ecr 2502828], length 53\r\n        0x0000:  4508 0069 ece0 4000 4006 4fa4 7f00 0001  E..i..@.@.O.....\r\n        0x0010:  7f00 0001 0cea c533 9f22 16fd e72e b18e  .......3.\"......\r\n        0x0020:  8018 0353 fe5d 0000 0101 080a 0026 30ac  ...S.].......&amp;0.\r\n        0x0030:  0026 30ac 1703 0100 300c 3524 6529 b225  .&amp;0.....0.5$e).%\r\n        0x0040:  01dd ed3f 7cb5 085f 3c80 4a51 c362 e980  ...?|.._&lt;.JQ.b..\r\n        0x0050:  1884 4e40 0d58 d0a3 69a1 b3c1 c979 b142  ..N@.X..i....y.B\r\n        0x0060:  09b6 3603 b43c 8a22 9d                   ..6..&lt;.\".\r\n13:59:58.646125 IP (tos 0x8, ttl 64, id 60641, offset 0, flags [DF], proto TCP (6), length 52)\r\n    localhost.mysql &gt; localhost.50483: Flags [.], cksum 0xfe28 (incorrect -&gt; 0xf227), seq 53, ack 107, win 851, options [nop,nop,TS val 2502829 ecr 2502829], length 0\r\n        0x0000:  4508 0034 ece1 4000 4006 4fd8 7f00 0001  E..4..@.@.O.....\r\n        0x0010:  7f00 0001 0cea c533 9f22 1732 e72e b1f8  .......3.\".2....\r\n        0x0020:  8010 0353 fe28 0000 0101 080a 0026 30ad  ...S.(.......&amp;0.\r\n        0x0030:  0026 30ad                                .&amp;0.\r\n13:59:58.646188 IP (tos 0x8, ttl 64, id 60642, offset 0, flags [DF], proto TCP (6), length 169)\r\n    localhost.mysql &gt; localhost.50483: Flags [P.], cksum 0xfe9d (incorrect -&gt; 0x6a73), seq 53:170, ack 107, win 851, options [nop,nop,TS val 2502829 ecr 2502829], length 117\r\n        0x0000:  4508 00a9 ece2 4000 4006 4f62 7f00 0001  E.....@.@.Ob....\r\n        0x0010:  7f00 0001 0cea c533 9f22 1732 e72e b1f8  .......3.\".2....\r\n        0x0020:  8018 0353 fe9d 0000 0101 080a 0026 30ad  ...S.........&amp;0.\r\n        0x0030:  0026 30ad 1703 0100 7074 359c b82a c838  .&amp;0.....pt5..*.8\r\n        0x0040:  3a69 85b9 b43f 7648 5fe0 88c6 972c 576a  :i...?vH_....,Wj\r\n        0x0050:  84ac c7ac 58f0 ed0c a79c 0c12 1c51 9714  ....X........Q..\r\n        0x0060:  45d3 80ac 1fb6 fbbb 7665 9782 a61f cf0a  E.......ve......\r\n        0x0070:  0b19 1e4e a679 6d1d 3a7b db6d 02f7 2dba  ...N.ym.:{.m..-.\r\n        0x0080:  4c0b 2cfb ad6f b516 2128 2596 9f5f 6ab2  L.,..o..!(%.._j.\r\n        0x0090:  640b 1876 2d52 1d4b ffcf 6a25 08d6 b985  d..v-R.K..j%....\r\n        0x00a0:  cdf0 cd62 cacc 84e1 9a                   ...b.....\r\n13:59:58.646838 IP (tos 0x8, ttl 64, id 60643, offset 0, flags [DF], proto TCP (6), length 52)\r\n    localhost.mysql &gt; localhost.50483: Flags [.], cksum 0xfe28 (incorrect -&gt; 0xf0f8), seq 170, ack 277, win 867, options [nop,nop,TS val 2502829 ecr 2502829], length 0\r\n        0x0000:  4508 0034 ece3 4000 4006 4fd6 7f00 0001  E..4..@.@.O.....<\/pre>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Hier wurde erkl\u00e4rt, wie man den MySQL-Server konfiguriert, so dass in MySQL-Client SSL Verbindungen zum Server aufbauen kann. Nun m\u00f6chte ich die SSL-Verbindung in einer Java-Applikation, welche in einem Tomcat l\u00e4uft, verwenden. Dazu wird eine JDBC-Connection \u00fcber SSL zum MySQL Server aufgebaut. Die Server- und Client-Zertifikate wurden hier bereits erstellt. Dieser Beitrag basiert auf Link [&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":[35,17],"tags":[15,29,28],"class_list":["post-589","post","type-post","status-publish","format-standard","hentry","category-java","category-mysql","tag-java","tag-mysql","tag-tomcat"],"modified_by":"ralph","_links":{"self":[{"href":"https:\/\/www.dev-metal.ch\/index.php?rest_route=\/wp\/v2\/posts\/589","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=589"}],"version-history":[{"count":16,"href":"https:\/\/www.dev-metal.ch\/index.php?rest_route=\/wp\/v2\/posts\/589\/revisions"}],"predecessor-version":[{"id":593,"href":"https:\/\/www.dev-metal.ch\/index.php?rest_route=\/wp\/v2\/posts\/589\/revisions\/593"}],"wp:attachment":[{"href":"https:\/\/www.dev-metal.ch\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=589"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dev-metal.ch\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=589"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dev-metal.ch\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=589"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}