{"id":1145,"date":"2021-10-30T21:41:24","date_gmt":"2021-10-30T20:41:24","guid":{"rendered":"https:\/\/www.netexpertise.eu\/fr\/?p=1145"},"modified":"2021-10-30T21:41:26","modified_gmt":"2021-10-30T20:41:26","slug":"support-des-versions-ssl-sur-ma-jvm","status":"publish","type":"post","link":"http:\/\/www.netexpertise.eu\/fr\/code\/java\/support-des-versions-ssl-sur-ma-jvm.html","title":{"rendered":"Support des Versions SSL sur ma JVM"},"content":{"rendered":"\n<p>Les versions SSL ou TLS support\u00e9es par une JVM d\u00e9pendent de beaucoup de choses. Nous allons voir quelques facteurs dont ils d\u00e9pendent, ainsi que diff\u00e9rentes fa\u00e7ons d&rsquo;afficher les versions SSL qui sont disponibles et activ\u00e9es sur votre JVM.<\/p>\n\n\n\n<h2><br>Facteurs Affectant le Support SSL de la JVM<\/h2>\n\n\n\n<p>Les versions <a href=\"\/fr\/tag\/ssl\">SSL<\/a> support\u00e9es d\u00e9pend en premier lieu de la version de votre JDK. TLS 1.0 et 1.1 sont d\u00e9sactiv\u00e9s sur de plus en plus de distributions JDK par d\u00e9faut, alors que le TLS 1.2 est devenu plus standard. TLS 1.3 est support\u00e9 sur la JDK 11 et les suivantes, et aussi sur la JDK8 \u00e0 partir du build 8u261.<br><br>Mais vous pouvez vous affranchir des param\u00e8tres par d\u00e9faut et d\u00e9sactiver un algorithme TLS dans le fichier de s\u00e9curit\u00e9 Java, qui se nomme java.security. Les versions SSL \/ TLS peuvent \u00eatre d\u00e9sactiv\u00e9s avec le param\u00e8tre <em>jdk.tls.disabledAlgorithms<\/em>.<br>Il n&rsquo;y a en fait pas moyen d&rsquo;activer explicitement une version TLS en Java: elle doit \u00eatre support\u00e9e par distribution JDK et ne pas \u00eatre dans la liste des algorithmes d\u00e9sactiv\u00e9s.<br><br>Vous pouvez aussi forcer l&rsquo;utilisation d&rsquo;une version TLS, et d&rsquo;un cipher, dans les param\u00e8tres de la commande java. Faites un saut au dernier paragraphe.<\/p>\n\n\n\n<h2><br>V\u00e9rifier les Versions SSL \/ TLS par Programme<\/h2>\n\n\n\n<p>Les versions TLS support\u00e9es et activ\u00e9es peuvent \u00eatre affich\u00e9es gr\u00e2ce \u00e0 un simple bout de code Java. La m\u00e9thode getProtocols() de la classe SSLContext permet d&rsquo;afficher les versions SSL disponibles sur votre JVM.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"java\" class=\"language-java\">import java.util.*;\nimport javax.net.ssl.SSLContext;\n\npublic class tls\n{\n\n  public static void main (String[] args) throws Exception\n  {\n    SSLContext context = SSLContext.getInstance(\"TLS\");\n    context.init(null, null, null);\n    String[] supportedProtocols = context.getDefaultSSLParameters().getProtocols();\n    System.out.println(Arrays.toString(supportedProtocols));\n  }\n\n}<\/code><\/pre>\n\n\n\n<p><br>Ex\u00e9cutez les commandes suivantes pour afficher la version de la JVM ainsi que les protocoles SSL support\u00e9s<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">java -version\necho \"Supported TLS:\"\njavac tls.java\njava tls<\/code><\/pre>\n\n\n\n<p><br>Les versions TLS sur certaines JVM de mes serveurs:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">Default OpenJDK\nopenjdk version \"1.8.0_302\"\nOpenJDK Runtime Environment (build 1.8.0_302-b08)\nOpenJDK 64-Bit Server VM (build 25.302-b08, mixed mode)\nSupported TLS:\n[TLSv1.2]\n\nIBM OpenJ9\nopenjdk version \"1.8.0_242\"\nOpenJDK Runtime Environment (build 1.8.0_242-b08)\nEclipse OpenJ9 VM (build openj9-0.18.1, JRE 1.8.0 Linux amd64-64-Bit\nCompressed References 20200122_511 (JIT enabled, AOT enabled)\nOpenJ9   - 51a5857d2\nOMR      - 7a1b0239a\nJCL      - 8cf8a30581 based on jdk8u242-b08)\nSupported TLS:\n[TLSv1, TLSv1.1, TLSv1.2]<\/code><\/pre>\n\n\n\n<p><br>Et les versions TLS sur un mac:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img src=\"\/images\/JVM_TLS_supported_versions.png\" alt=\"Support Versions SSL JVM\"\/><\/figure>\n\n\n\n<p>Vous avez maintenant une liste sure des versions TLS activ\u00e9es sur votre JVM.<\/p>\n\n\n\n<h2><br>V\u00e9rifier Versions TLS et Ciphers avec le Mode Debug<\/h2>\n\n\n\n<p>Si vous souhaitez aller plus loin et voir vraiment ce qui se passe, utilisez la fonctionnalit\u00e9 debug de Java. Vous obtiendrez des d\u00e9tails sur les protocoles SSL d\u00e9sactiv\u00e9s, les ciphers disponibles, et les n\u00e9gociations SSL et bien plus. C&rsquo;est tr\u00e8s verbeux, vous \u00eates pr\u00e9venu! Mais tellement utile.<br>Lancez simplement votre java avec <em>java -Djavax.net.debug=all<\/em>. Un simple programme \u00e0 une base Mariadb avec JDBC et SSL activ\u00e9 pourrait se lancer comme ceci:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"java\" class=\"language-java\">java -Djavax.net.debug=all \\\n     -Djavax.net.ssl.trustStore=keystore.jks \\\n     -Djavax.net.ssl.trustStorePassword=changeit \\\n     -cp \"mariadb-java-client-2.7.3.jar:.\" monProgramme<\/code><\/pre>\n\n\n\n<p><br>Ceci affichera beaucoup de d&rsquo;informations sur le protocole SSL et les ciphers. Voici quelques lignes extraites:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">System property jdk.tls.server.cipherSuites is set to 'null'\nIgnoring disabled cipher suite: TLS_DH_anon_WITH_AES_256_CBC_SHA\n[...]\nupdate handshake state: client_hello[1]\nupcoming handshake states: server_hello[2]\n*** ClientHello, TLSv1.2\nCipher Suites: [TLS_DHE_RSA_WITH_AES_128_GCM_SHA256]\n[...]\n%% Initialized:  [Session-1, TLS_DHE_RSA_WITH_AES_128_GCM_SHA256]\n[...]\n0000: 01 00 00 01 0A 49 00 00   02 03 64 65 66 12 69 6E  .....I....def.in\n0010: 66 6F 72 6D 61 74 69 6F   6E 5F 73 63 68 65 6D 61  formation_schema\n0020: 06 54 41 42 4C 45 53 06   54 41 42 4C 45 53 09 54  .TABLES.TABLES.T\n0030: 41 42 4C 45 5F 43 41 54   0C 54 41 42 4C 45 5F 53  ABLE_CAT.TABLE_S\n0040: 43 48 45 4D 41 0C 2D 00   00 01 00 00 FD 01 00 00  CHEMA.-.........\n0050: 00 00 21 00 00 03 03 64   65 66 00 00 00 0B 54 41  ..!....def....TA\n0060: 42 4C 45 5F 53 43 48 45   4D 00 0C 3F 00 00 00 00  BLE_SCHEM..?....\n[...]<\/code><\/pre>\n\n\n\n<p><em>jdk.tls.server.cipherSuites<\/em> est \u00e0 &lsquo;null&rsquo; car il n&rsquo;a pas \u00e9t\u00e9 surcharg\u00e9.<br>Il y a en g\u00e9n\u00e9ral une longue liste de ciphers d\u00e9sactiv\u00e9s puisqu&rsquo;ils sont li\u00e9s aux protocoles TLS d\u00e9sactiv\u00e9s pour la plupart d&rsquo;entre eux<br>On voit ensuite le hello client qui montre la version TLS choisie pour le handshake.<br>Cipher Suites affiche normalement une longue liste de ciphers disponibles sur la JVM. Il y en a juste un ici car je l&rsquo;ai forc\u00e9.<br>Un peu plus bas, on peut m\u00eame voir les requ\u00eates SQL envoy\u00e9es au serveur Mariadb durant l&rsquo;initialisation de la connexion.<br>Oracle fournit une bonne documentation sur comment <a href=\"https:\/\/docs.oracle.com\/javase\/8\/docs\/technotes\/guides\/security\/jsse\/ReadDebug.html\" target=\"_blank\" rel=\"noreferrer noopener\">debugguer SSL\/TLS<\/a> et interpr\u00e9ter ces messages.<\/p>\n\n\n\n<h2><br>Forcer Versions TLS et Ciphers<\/h2>\n\n\n\n<p>Il est possible de forcer la JVM \u00e0 utiliser certaines versions TLS et ciphers sur la ligne de command. C&rsquo;est tr\u00e8s utile si vous n&rsquo;avez pas acc\u00e8s \u00e0 la configuration de la JVM, ou si vous d\u00e9sirez des param\u00e8tres sp\u00e9cifiques pour un programme Java en particulier.<br>Cela peut-\u00eatre fait avec les param\u00e8tres <em>jdk.tls.client.protocols<\/em> et <em>jdk.tls.client.cipherSuites<\/em>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">java -Djavax.net.debug=all \\\n     -Djavax.net.ssl.trustStore=keystore.jks \\\n     -Djavax.net.ssl.trustStorePassword=changeit \\\n     -Djdk.tls.client.protocols=TLSv1.2 \\\n     -Djdk.tls.server.cipherSuites=\"TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA\" \\\n     -cp \"mariadb-java-client-2.7.3.jar:.\" monProgramme<\/code><\/pre>\n\n\n\n<p><br>Les protocoles TLS et les ciphers peuvent aussi \u00eatre d\u00e9finis dans la cha\u00eene de connexion JDBC si vous utiliser l&rsquo;encryption pour la connexion \u00e0 la base de donn\u00e9es.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"java\" class=\"language-java\">String url = \"jdbc:mariadb:\/\/my_database_server:3306\/ma_database?\"+\n             \"useSSL=true\"+\n             \"&amp;serverTimezone=UTC\"+\n             \"&amp;enabledSslProtocolSuites=TLSv1.2\"+\n             \"&amp;enabledSSLCipherSuites=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA\";<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Les versions SSL ou TLS support\u00e9es par une JVM d\u00e9pendent de beaucoup de choses. Nous allons voir quelques facteurs dont ils d\u00e9pendent, ainsi que diff\u00e9rentes fa\u00e7ons d&rsquo;afficher les versions SSL qui sont disponibles et activ\u00e9es sur votre JVM. Facteurs Affectant le Support SSL de la JVM Les versions SSL support\u00e9es d\u00e9pend en premier lieu de [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_mi_skip_tracking":false},"categories":[466],"tags":[28,467],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v19.13 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Netexpertise - Support des Versions SSL sur ma JVM<\/title>\n<meta name=\"description\" content=\"V\u00e9rifier et afficher les versions SSL support\u00e9es sur la JVM. Activer, d\u00e9sactiver protocoles TLS et ciphers. Debug des sessions SSL en Java\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"http:\/\/www.netexpertise.eu\/fr\/code\/java\/support-des-versions-ssl-sur-ma-jvm.html\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Netexpertise - Support des Versions SSL sur ma JVM\" \/>\n<meta property=\"og:description\" content=\"V\u00e9rifier et afficher les versions SSL support\u00e9es sur la JVM. Activer, d\u00e9sactiver protocoles TLS et ciphers. Debug des sessions SSL en Java\" \/>\n<meta property=\"og:url\" content=\"http:\/\/www.netexpertise.eu\/fr\/code\/java\/support-des-versions-ssl-sur-ma-jvm.html\" \/>\n<meta property=\"og:site_name\" content=\"Netexpertise\" \/>\n<meta property=\"article:published_time\" content=\"2021-10-30T20:41:24+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-10-30T20:41:26+00:00\" \/>\n<meta name=\"author\" content=\"dave\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@netexpertise\" \/>\n<meta name=\"twitter:site\" content=\"@netexpertise\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"http:\/\/www.netexpertise.eu\/fr\/code\/java\/support-des-versions-ssl-sur-ma-jvm.html\",\"url\":\"http:\/\/www.netexpertise.eu\/fr\/code\/java\/support-des-versions-ssl-sur-ma-jvm.html\",\"name\":\"Netexpertise - Support des Versions SSL sur ma JVM\",\"isPartOf\":{\"@id\":\"http:\/\/www.netexpertise.eu\/fr\/#website\"},\"datePublished\":\"2021-10-30T20:41:24+00:00\",\"dateModified\":\"2021-10-30T20:41:26+00:00\",\"author\":{\"@id\":\"http:\/\/www.netexpertise.eu\/fr\/#\/schema\/person\/e398f0307e2b167f6b884c4953be2632\"},\"description\":\"V\u00e9rifier et afficher les versions SSL support\u00e9es sur la JVM. Activer, d\u00e9sactiver protocoles TLS et ciphers. Debug des sessions SSL en Java\",\"breadcrumb\":{\"@id\":\"http:\/\/www.netexpertise.eu\/fr\/code\/java\/support-des-versions-ssl-sur-ma-jvm.html#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"http:\/\/www.netexpertise.eu\/fr\/code\/java\/support-des-versions-ssl-sur-ma-jvm.html\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"http:\/\/www.netexpertise.eu\/fr\/code\/java\/support-des-versions-ssl-sur-ma-jvm.html#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"http:\/\/www.netexpertise.eu\/fr\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Support des Versions SSL sur ma JVM\"}]},{\"@type\":\"WebSite\",\"@id\":\"http:\/\/www.netexpertise.eu\/fr\/#website\",\"url\":\"http:\/\/www.netexpertise.eu\/fr\/\",\"name\":\"Netexpertise\",\"description\":\"Syst\u00e8mes \/ R\u00e9seaux \/ DevOps\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"http:\/\/www.netexpertise.eu\/fr\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Person\",\"@id\":\"http:\/\/www.netexpertise.eu\/fr\/#\/schema\/person\/e398f0307e2b167f6b884c4953be2632\",\"name\":\"dave\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"http:\/\/www.netexpertise.eu\/fr\/#\/schema\/person\/image\/\",\"url\":\"http:\/\/1.gravatar.com\/avatar\/1129916e1f4955bd632f27f836f64e55?s=96&d=mm&r=g\",\"contentUrl\":\"http:\/\/1.gravatar.com\/avatar\/1129916e1f4955bd632f27f836f64e55?s=96&d=mm&r=g\",\"caption\":\"dave\"},\"sameAs\":[\"http:\/\/www.netexpertise.eu\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Netexpertise - Support des Versions SSL sur ma JVM","description":"V\u00e9rifier et afficher les versions SSL support\u00e9es sur la JVM. Activer, d\u00e9sactiver protocoles TLS et ciphers. Debug des sessions SSL en Java","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"http:\/\/www.netexpertise.eu\/fr\/code\/java\/support-des-versions-ssl-sur-ma-jvm.html","og_locale":"fr_FR","og_type":"article","og_title":"Netexpertise - Support des Versions SSL sur ma JVM","og_description":"V\u00e9rifier et afficher les versions SSL support\u00e9es sur la JVM. Activer, d\u00e9sactiver protocoles TLS et ciphers. Debug des sessions SSL en Java","og_url":"http:\/\/www.netexpertise.eu\/fr\/code\/java\/support-des-versions-ssl-sur-ma-jvm.html","og_site_name":"Netexpertise","article_published_time":"2021-10-30T20:41:24+00:00","article_modified_time":"2021-10-30T20:41:26+00:00","author":"dave","twitter_card":"summary_large_image","twitter_creator":"@netexpertise","twitter_site":"@netexpertise","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"http:\/\/www.netexpertise.eu\/fr\/code\/java\/support-des-versions-ssl-sur-ma-jvm.html","url":"http:\/\/www.netexpertise.eu\/fr\/code\/java\/support-des-versions-ssl-sur-ma-jvm.html","name":"Netexpertise - Support des Versions SSL sur ma JVM","isPartOf":{"@id":"http:\/\/www.netexpertise.eu\/fr\/#website"},"datePublished":"2021-10-30T20:41:24+00:00","dateModified":"2021-10-30T20:41:26+00:00","author":{"@id":"http:\/\/www.netexpertise.eu\/fr\/#\/schema\/person\/e398f0307e2b167f6b884c4953be2632"},"description":"V\u00e9rifier et afficher les versions SSL support\u00e9es sur la JVM. Activer, d\u00e9sactiver protocoles TLS et ciphers. Debug des sessions SSL en Java","breadcrumb":{"@id":"http:\/\/www.netexpertise.eu\/fr\/code\/java\/support-des-versions-ssl-sur-ma-jvm.html#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["http:\/\/www.netexpertise.eu\/fr\/code\/java\/support-des-versions-ssl-sur-ma-jvm.html"]}]},{"@type":"BreadcrumbList","@id":"http:\/\/www.netexpertise.eu\/fr\/code\/java\/support-des-versions-ssl-sur-ma-jvm.html#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"http:\/\/www.netexpertise.eu\/fr"},{"@type":"ListItem","position":2,"name":"Support des Versions SSL sur ma JVM"}]},{"@type":"WebSite","@id":"http:\/\/www.netexpertise.eu\/fr\/#website","url":"http:\/\/www.netexpertise.eu\/fr\/","name":"Netexpertise","description":"Syst\u00e8mes \/ R\u00e9seaux \/ DevOps","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"http:\/\/www.netexpertise.eu\/fr\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"fr-FR"},{"@type":"Person","@id":"http:\/\/www.netexpertise.eu\/fr\/#\/schema\/person\/e398f0307e2b167f6b884c4953be2632","name":"dave","image":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"http:\/\/www.netexpertise.eu\/fr\/#\/schema\/person\/image\/","url":"http:\/\/1.gravatar.com\/avatar\/1129916e1f4955bd632f27f836f64e55?s=96&d=mm&r=g","contentUrl":"http:\/\/1.gravatar.com\/avatar\/1129916e1f4955bd632f27f836f64e55?s=96&d=mm&r=g","caption":"dave"},"sameAs":["http:\/\/www.netexpertise.eu"]}]}},"_links":{"self":[{"href":"http:\/\/www.netexpertise.eu\/fr\/wp-json\/wp\/v2\/posts\/1145"}],"collection":[{"href":"http:\/\/www.netexpertise.eu\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.netexpertise.eu\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.netexpertise.eu\/fr\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/www.netexpertise.eu\/fr\/wp-json\/wp\/v2\/comments?post=1145"}],"version-history":[{"count":0,"href":"http:\/\/www.netexpertise.eu\/fr\/wp-json\/wp\/v2\/posts\/1145\/revisions"}],"wp:attachment":[{"href":"http:\/\/www.netexpertise.eu\/fr\/wp-json\/wp\/v2\/media?parent=1145"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.netexpertise.eu\/fr\/wp-json\/wp\/v2\/categories?post=1145"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.netexpertise.eu\/fr\/wp-json\/wp\/v2\/tags?post=1145"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}