{"id":1399,"date":"2023-02-02T16:07:33","date_gmt":"2023-02-02T16:07:33","guid":{"rendered":"https:\/\/marketaylor.synology.me\/?p=1399"},"modified":"2023-02-03T08:31:02","modified_gmt":"2023-02-03T08:31:02","slug":"mq-jms-jndi-and-ldaps","status":"publish","type":"post","link":"https:\/\/marketaylor.synology.me\/?p=1399","title":{"rendered":"JMS, JNDI and LDAPS"},"content":{"rendered":"\n<p>A recent <a href=\"https:\/\/integration-development.ideas.ibm.com\/ideas\/MESNS-I-529\" target=\"_blank\" rel=\"noreferrer noopener\">Idea opened against MQ<\/a> asked for the ability to store <a href=\"https:\/\/www.ibm.com\/docs\/en\/ibm-mq\/latest?topic=resources-configuring-connection-factories-destinations-in-jndi-namespace\" target=\"_blank\" rel=\"noreferrer noopener\">JMS resources<\/a> using a secure connection to LDAP servers. All the current LDAP support for JMSAdmin and Explorer is documented using the plaintext protocol, but could we use a TLS-protected connection? My first thought was that this was likely to be impossible without changing something &#8211; albeit likely small &#8211; in the product code. But as I needed to get an LDAP server running locally for other reasons, I thought I&#8217;d give it a go to see if my guess was right. It wasn&#8217;t; and so here&#8217;s how you can do it yourself.<\/p>\n\n\n\n<!--more-->\n\n\n\n<p>I built the simplest-possible <a href=\"https:\/\/github.com\/osixia\/docker-openldap\" target=\"_blank\" rel=\"noreferrer noopener\">LDAP server configuration<\/a>, running in a container. The startup scripts for that image by default create a self-signed certificate based on the container id. So what I&#8217;m going to show is just sufficient to work in that environment. More complex configurations with 2-way validation of certificates and checking the signers of CA-issued certificates is feasible using the same approach; I just didn&#8217;t need that to demonstrate that a TLS-protected connection could be made. If you are working with an existing enterprise-managed LDAP server then you would get the certificates and any other details from the administrator. <\/p>\n\n\n\n<p>The work needed is conceptually similar but different in detail for JMSAdmin and MQ Explorer.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Creating a truststore<\/h3>\n\n\n\n<p>One thing we need for TLS is a minimal truststore to validate the certificate from the LDAP server. In a production environment, you should get given any necessary files, but here I am going to create it directly. I just need the self-signed cert to be added to a store of the right format. There&#8217;s an odd use of <code>gskit<\/code> commands and <code>openssl<\/code> commands here, but that was just how the script evolved:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"># Query the server to provide its self-signed certificate information\necho -n |openssl s_client -connect localhost:636 | \\\n   sed -ne '\/---BEGIN CERTIFICATE---\/,\/---END CERTIFICATE---\/p' &gt; ldap.pem\n\n# Use that PEM file to create a JKS-format file that will be used as the TrustStore\nrunmqckm -keydb -create -db ts.jks -type jks -pw passw0rd\nrunmqckm -cert  -add    -db ts.jks -file ldap.pem -pw passw0rd -label ldap\n<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">JMSAdmin<\/h3>\n\n\n\n<p>The command line interface to JNDI, JMSAdmin, essentially has 3 parts: a shell script\/batch file, a configuration file, and some compiled Java classes. <\/p>\n\n\n\n<p>We need to touch the script and the configuration, but not the class files. <\/p>\n\n\n\n<h4 class=\"wp-block-heading\">JMSAdmin.config<\/h4>\n\n\n\n<p>You are always going to have to edit the supplied default configuration file. This tells how to connect to the JNDI service, and where to put object definitions. You then point to the modified configuration when running the JMSAdmin program:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">JMSAdmin -cfg .\/JMSAdmin.config<\/pre>\n\n\n\n<p>The only difference between a secured and non-secured connection to an LDAP server is the <code>PROVIDER_URL<\/code>. On my system, I set it to<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">PROVIDER_URL=ldaps:\/\/localhost:636\/ou=MQ,dc=example,dc=org<\/pre>\n\n\n\n<p>Note the use of the <code>ldaps<\/code> protocol, and the portnumber in this URL. The default port for the secure protocol is 636, so it might not be a definite requirement in the URL, but I wanted to be explicit here.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">JMSAdmin script<\/h4>\n\n\n\n<p>The script <code>\/opt\/mqm\/java\/bin\/JMSAdmin<\/code> is a short program that sets up the environment and path to a JRE and the MQ classes that do the real work. I copied this file to my own directory and made a small change, to be able to pass through additional parameters when running <code>java<\/code>.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">$ diff JMSAdmin \/opt\/mqm\/java\/bin\/JMSAdmin\n65c65\n&lt;         $AMQJAVA $MQ_EXTRA_DEFS -classpath $MQ_JAVA_INSTALL_PATH\/lib\/com.ibm.mq.allclient.jar -Dcom.ibm.msg.client.commonservices.log.outputName=$MQ_JAVA_DATA_PATH\/log -Dcom.ibm.msg.client.commonservices.trace.outputName=$MQ_JAVA_DATA_PATH\/trace -DMQ_JAVA_INSTALL_PATH=$MQ_JAVA_INSTALL_PATH com.ibm.mq.jms.admin.JMSAdmin $*\n---\n&gt;         $AMQJAVA -classpath $MQ_JAVA_INSTALL_PATH\/lib\/com.ibm.mq.allclient.jar -Dcom.ibm.msg.client.commonservices.log.outputName=$MQ_JAVA_DATA_PATH\/log -Dcom.ibm.msg.client.commonservices.trace.outputName=$MQ_JAVA_DATA_PATH\/trace -DMQ_JAVA_INSTALL_PATH=$MQ_JAVA_INSTALL_PATH com.ibm.mq.jms.admin.JMSAdmin $*\n67c67\n&lt;         $AMQJAVA $MQ_EXTRA_DEFS -Dcom.ibm.msg.client.commonservices.log.outputName=$MQ_JAVA_DATA_PATH\/log -Dcom.ibm.msg.client.commonservices.trace.outputName=$MQ_JAVA_DATA_PATH\/trace -DMQ_JAVA_INSTALL_PATH=$MQ_JAVA_INSTALL_PATH com.ibm.mq.jms.admin.JMSAdmin $*\n---\n&gt;         $AMQJAVA -Dcom.ibm.msg.client.commonservices.log.outputName=$MQ_JAVA_DATA_PATH\/log -Dcom.ibm.msg.client.commonservices.trace.outputName=$MQ_JAVA_DATA_PATH\/trace -DMQ_JAVA_INSTALL_PATH=$MQ_JAVA_INSTALL_PATH com.ibm.mq.jms.admin.JMSAdmin $*\n<\/pre>\n\n\n\n<p>If we set the <code>MQ_EXTRA_DEFS<\/code> environment variable, then it is passed through. If we do not set it, the behaviour doesn&#8217;t change.<\/p>\n\n\n\n<p>I then created a wrapper script to call this modified program. I could have merged this script with the new JMSAdmin, but it was easier this way when experimenting.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">$ cat JWrap.sh\n\n. setmqenv -m QM1 -k\n\nMQ_EXTRA_DEFS=\"\"\nMQ_EXTRA_DEFS=\"$MQ_EXTRA_DEFS -Djavax.net.ssl.trustStore=.\/ts.jks\"\nMQ_EXTRA_DEFS=\"$MQ_EXTRA_DEFS -Djavax.net.ssl.trustStorePassword=passw0rd\"\n\n# See https:\/\/www.ibm.com\/support\/pages\/websphere-endpoint-identification-enabled-ldaps-connections for the meaning of this one\nMQ_EXTRA_DEFS=\"$MQ_EXTRA_DEFS -Dcom.sun.jndi.ldap.object.disableEndpointIdentification=true\"\n\n# MQ_EXTRA_DEFS=\"$MQ_EXTRA_DEFS -Djavax.net.debug=true\"\n\nexport MQ_EXTRA_DEFS\n\n.\/JMSAdmin -cfg .\/JMSAdmin.config \n<\/pre>\n\n\n\n<p>The important bit here is setting the trustStore and its password. Being able to use debug on the JSSE connection by setting <code>javax.net.debug<\/code> showed immediately that TLS was, as hoped, in use. It also assisted with resolving any problems with certificates. And because the certificate includes a weird hostname related to its container id, I needed to bypass the check that it matches a real hostname &#8211; again, you would not need that in a properly-managed system. For two-way authentication to the server, you would likely also need definitions of <code>javax.net.ssl.keyStore<\/code> and password.<\/p>\n\n\n\n<p>And that was all. Running <code>JWrap.sh<\/code>brings me to a command input to define or display the JNDI resources.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">$ JWrap.sh\nLicensed Materials - Property of IBM\n5724-H72, 5655-R36, 5724-L26, 5655-L82\n(c) Copyright IBM Corp. 2008, 2023 All Rights Reserved.\nUS Government Users Restricted Rights - Use, duplication or\ndisclosure restricted by GSA ADP Schedule Contract with\nIBM Corp.\nStarting IBM MQ classes for Java(tm) Message Service Administration\n\nInitCtx&gt; dis q(*)\nQ(cn=Q1)\n    CCSID(1208)\n    ENCODING(NATIVE)\n   ...<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">MQ Explorer<\/h3>\n\n\n\n<p>This one also turned out to be possible, but was a bit trickier. <\/p>\n\n\n\n<p><\/p>\n\n\n\n<h4 class=\"wp-block-heading\">MQExplorer.ini<\/h4>\n\n\n\n<p>The system properties are settable in the same kind of way by editing the configuration file used when Explorer starts. On my system, I&#8217;ve installed Explorer into the <code>\/opt\/MQExplorer<\/code> tree and that contains the startup <code>ini<\/code> file. Edit it:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">$ sudo vi \/opt\/MQExplorer\/MQExplorer.ini<\/pre>\n\n\n\n<p>and put the definitions for access to the truststore in there after the <code>-vmargs<\/code>section:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">-vm\njre\/jre\/bin\n-vmargs\n-Xmx512M\n-Djavax.net.ssl.trustStore=\/home\/metaylor\/mf\/ldap\/server\/ts.jks\n-Djavax.net.ssl.trustStorePassword=passw0rd\n-Dcom.sun.jndi.ldap.object.disableEndpointIdentification=true\n<\/pre>\n\n\n\n<p>The only thing you might need to watch for here is that the trustStore (and keyStore if needed) definitions are going to be global to the JRE. So that might affect other activity in the Explorer &#8211; client connections to managed queue managers have their own definitions for these stores that should not be affected, but you would probably want to verify that.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Initial Contexts<\/h4>\n\n\n\n<p>Managing the equivalent of the <code>PROVIDER_URL<\/code> field is a little harder. The pre-defined options build the URL from input parameters, but do not give a way to switch to the <code>ldaps<\/code> protocol element from the LDAP option. <\/p>\n\n\n\n<p>Instead, you can use the &#8220;Other&#8221; option, which asks for the factory class (use the same as for the regular LDAP selection) and a directory (use the directory where the Explorer&#8217;s JRE jar files live). This variation allows you to type in the full URL including the secure protocol.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized is-style-default\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/marketaylor.synology.me\/wp-content\/uploads\/2023\/02\/explorer_ldaps_2-3.png\" alt=\"Adding an LDAPS context to Explorer\" class=\"wp-image-1417\" width=\"414\" height=\"458\" srcset=\"https:\/\/marketaylor.synology.me\/wp-content\/uploads\/2023\/02\/explorer_ldaps_2-3.png 552w, https:\/\/marketaylor.synology.me\/wp-content\/uploads\/2023\/02\/explorer_ldaps_2-3-271x300.png 271w\" sizes=\"auto, (max-width: 414px) 85vw, 414px\" \/><figcaption>Adding an LDAPS context to Explorer<\/figcaption><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Conclusion<\/h3>\n\n\n\n<p>Using LDAPS for JNDI resources is possible using these extensions, without needing any changes to the MQ product itself. There are things that might make it easier, particularly in the Explorer GUI, and we will consider changes, but it&#8217;s not absolutely essential.<\/p>\n\n\n\n<p>I hope this helps people wanting to secure connections to their LDAP servers when defining JMS objects.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Change History:<\/h3>\n\n\n\n<ul class=\"wp-block-list\"><li>2023\/02\/02: Initial version<\/li><li>2023\/02\/03: Rewrite the Explorer section to use the &#8220;other&#8221; option for contexts<\/li><\/ul>\n<p class=\"last-modified\" style=\"border:1px solid;padding: 10px;\">This post was last updated on February 3rd, 2023 at 08:31 am<\/p>","protected":false},"excerpt":{"rendered":"<p>A recent Idea opened against MQ asked for the ability to store JMS resources using a secure connection to LDAP servers. All the current LDAP support for JMSAdmin and Explorer is documented using the plaintext protocol, but could we use a TLS-protected connection? My first thought was that this was likely to be impossible without &hellip; <a href=\"https:\/\/marketaylor.synology.me\/?p=1399\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;JMS, JNDI and LDAPS&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[5],"tags":[35,48,127,79,20],"class_list":["post-1399","post","type-post","status-publish","format-standard","hentry","category-mq","tag-ibmmq","tag-jms","tag-jndi","tag-ldap","tag-mqseries"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>JMS, JNDI and LDAPS - Mark Taylor&#039;s Blog<\/title>\n<meta name=\"description\" content=\"This post shows how you can configure JMS resources for JNDI lookups in an LDAP directory, with TLS protection.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/marketaylor.synology.me\/?p=1399\" \/>\n<meta property=\"og:locale\" content=\"en_GB\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"JMS, JNDI and LDAPS - Mark Taylor&#039;s Blog\" \/>\n<meta property=\"og:description\" content=\"This post shows how you can configure JMS resources for JNDI lookups in an LDAP directory, with TLS protection.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/marketaylor.synology.me\/?p=1399\" \/>\n<meta property=\"og:site_name\" content=\"Mark Taylor&#039;s Blog\" \/>\n<meta property=\"article:published_time\" content=\"2023-02-02T16:07:33+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-02-03T08:31:02+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/marketaylor.synology.me\/wp-content\/uploads\/2023\/02\/explorer_ldaps_2-3.png\" \/>\n<meta name=\"author\" content=\"Mark\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@marketaylor\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Mark\" \/>\n\t<meta name=\"twitter:label2\" content=\"Estimated reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/marketaylor.synology.me\\\/?p=1399#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/marketaylor.synology.me\\\/?p=1399\"},\"author\":{\"name\":\"Mark\",\"@id\":\"https:\\\/\\\/marketaylor.synology.me\\\/#\\\/schema\\\/person\\\/2d6f4113ff54187023e20c20186bbb3c\"},\"headline\":\"JMS, JNDI and LDAPS\",\"datePublished\":\"2023-02-02T16:07:33+00:00\",\"dateModified\":\"2023-02-03T08:31:02+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/marketaylor.synology.me\\\/?p=1399\"},\"wordCount\":955,\"commentCount\":0,\"image\":{\"@id\":\"https:\\\/\\\/marketaylor.synology.me\\\/?p=1399#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/marketaylor.synology.me\\\/wp-content\\\/uploads\\\/2023\\\/02\\\/explorer_ldaps_2-3.png\",\"keywords\":[\"ibmmq\",\"jms\",\"jndi\",\"ldap\",\"mqseries\"],\"articleSection\":[\"IBM MQ\"],\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/marketaylor.synology.me\\\/?p=1399#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/marketaylor.synology.me\\\/?p=1399\",\"url\":\"https:\\\/\\\/marketaylor.synology.me\\\/?p=1399\",\"name\":\"JMS, JNDI and LDAPS - Mark Taylor&#039;s Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/marketaylor.synology.me\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/marketaylor.synology.me\\\/?p=1399#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/marketaylor.synology.me\\\/?p=1399#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/marketaylor.synology.me\\\/wp-content\\\/uploads\\\/2023\\\/02\\\/explorer_ldaps_2-3.png\",\"datePublished\":\"2023-02-02T16:07:33+00:00\",\"dateModified\":\"2023-02-03T08:31:02+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/marketaylor.synology.me\\\/#\\\/schema\\\/person\\\/2d6f4113ff54187023e20c20186bbb3c\"},\"description\":\"This post shows how you can configure JMS resources for JNDI lookups in an LDAP directory, with TLS protection.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/marketaylor.synology.me\\\/?p=1399#breadcrumb\"},\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/marketaylor.synology.me\\\/?p=1399\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\\\/\\\/marketaylor.synology.me\\\/?p=1399#primaryimage\",\"url\":\"https:\\\/\\\/marketaylor.synology.me\\\/wp-content\\\/uploads\\\/2023\\\/02\\\/explorer_ldaps_2-3.png\",\"contentUrl\":\"https:\\\/\\\/marketaylor.synology.me\\\/wp-content\\\/uploads\\\/2023\\\/02\\\/explorer_ldaps_2-3.png\",\"width\":552,\"height\":611},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/marketaylor.synology.me\\\/?p=1399#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/marketaylor.synology.me\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"JMS, JNDI and LDAPS\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/marketaylor.synology.me\\\/#website\",\"url\":\"https:\\\/\\\/marketaylor.synology.me\\\/\",\"name\":\"Mark Taylor&#039;s Blog\",\"description\":\"Messaging, Music and Moving Around\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/marketaylor.synology.me\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-GB\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/marketaylor.synology.me\\\/#\\\/schema\\\/person\\\/2d6f4113ff54187023e20c20186bbb3c\",\"name\":\"Mark\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/9a5ae091c43730194cba7cabb5d65c1dc3f48d05caaddec6ff2319a1ce66376f?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/9a5ae091c43730194cba7cabb5d65c1dc3f48d05caaddec6ff2319a1ce66376f?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/9a5ae091c43730194cba7cabb5d65c1dc3f48d05caaddec6ff2319a1ce66376f?s=96&d=mm&r=g\",\"caption\":\"Mark\"},\"sameAs\":[\"https:\\\/\\\/x.com\\\/marketaylor\"],\"url\":\"https:\\\/\\\/marketaylor.synology.me\\\/?author=1\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"JMS, JNDI and LDAPS - Mark Taylor&#039;s Blog","description":"This post shows how you can configure JMS resources for JNDI lookups in an LDAP directory, with TLS protection.","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":"https:\/\/marketaylor.synology.me\/?p=1399","og_locale":"en_GB","og_type":"article","og_title":"JMS, JNDI and LDAPS - Mark Taylor&#039;s Blog","og_description":"This post shows how you can configure JMS resources for JNDI lookups in an LDAP directory, with TLS protection.","og_url":"https:\/\/marketaylor.synology.me\/?p=1399","og_site_name":"Mark Taylor&#039;s Blog","article_published_time":"2023-02-02T16:07:33+00:00","article_modified_time":"2023-02-03T08:31:02+00:00","og_image":[{"url":"https:\/\/marketaylor.synology.me\/wp-content\/uploads\/2023\/02\/explorer_ldaps_2-3.png","type":"","width":"","height":""}],"author":"Mark","twitter_card":"summary_large_image","twitter_creator":"@marketaylor","twitter_misc":{"Written by":"Mark","Estimated reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/marketaylor.synology.me\/?p=1399#article","isPartOf":{"@id":"https:\/\/marketaylor.synology.me\/?p=1399"},"author":{"name":"Mark","@id":"https:\/\/marketaylor.synology.me\/#\/schema\/person\/2d6f4113ff54187023e20c20186bbb3c"},"headline":"JMS, JNDI and LDAPS","datePublished":"2023-02-02T16:07:33+00:00","dateModified":"2023-02-03T08:31:02+00:00","mainEntityOfPage":{"@id":"https:\/\/marketaylor.synology.me\/?p=1399"},"wordCount":955,"commentCount":0,"image":{"@id":"https:\/\/marketaylor.synology.me\/?p=1399#primaryimage"},"thumbnailUrl":"https:\/\/marketaylor.synology.me\/wp-content\/uploads\/2023\/02\/explorer_ldaps_2-3.png","keywords":["ibmmq","jms","jndi","ldap","mqseries"],"articleSection":["IBM MQ"],"inLanguage":"en-GB","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/marketaylor.synology.me\/?p=1399#respond"]}]},{"@type":"WebPage","@id":"https:\/\/marketaylor.synology.me\/?p=1399","url":"https:\/\/marketaylor.synology.me\/?p=1399","name":"JMS, JNDI and LDAPS - Mark Taylor&#039;s Blog","isPartOf":{"@id":"https:\/\/marketaylor.synology.me\/#website"},"primaryImageOfPage":{"@id":"https:\/\/marketaylor.synology.me\/?p=1399#primaryimage"},"image":{"@id":"https:\/\/marketaylor.synology.me\/?p=1399#primaryimage"},"thumbnailUrl":"https:\/\/marketaylor.synology.me\/wp-content\/uploads\/2023\/02\/explorer_ldaps_2-3.png","datePublished":"2023-02-02T16:07:33+00:00","dateModified":"2023-02-03T08:31:02+00:00","author":{"@id":"https:\/\/marketaylor.synology.me\/#\/schema\/person\/2d6f4113ff54187023e20c20186bbb3c"},"description":"This post shows how you can configure JMS resources for JNDI lookups in an LDAP directory, with TLS protection.","breadcrumb":{"@id":"https:\/\/marketaylor.synology.me\/?p=1399#breadcrumb"},"inLanguage":"en-GB","potentialAction":[{"@type":"ReadAction","target":["https:\/\/marketaylor.synology.me\/?p=1399"]}]},{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/marketaylor.synology.me\/?p=1399#primaryimage","url":"https:\/\/marketaylor.synology.me\/wp-content\/uploads\/2023\/02\/explorer_ldaps_2-3.png","contentUrl":"https:\/\/marketaylor.synology.me\/wp-content\/uploads\/2023\/02\/explorer_ldaps_2-3.png","width":552,"height":611},{"@type":"BreadcrumbList","@id":"https:\/\/marketaylor.synology.me\/?p=1399#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/marketaylor.synology.me\/"},{"@type":"ListItem","position":2,"name":"JMS, JNDI and LDAPS"}]},{"@type":"WebSite","@id":"https:\/\/marketaylor.synology.me\/#website","url":"https:\/\/marketaylor.synology.me\/","name":"Mark Taylor&#039;s Blog","description":"Messaging, Music and Moving Around","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/marketaylor.synology.me\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-GB"},{"@type":"Person","@id":"https:\/\/marketaylor.synology.me\/#\/schema\/person\/2d6f4113ff54187023e20c20186bbb3c","name":"Mark","image":{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/secure.gravatar.com\/avatar\/9a5ae091c43730194cba7cabb5d65c1dc3f48d05caaddec6ff2319a1ce66376f?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/9a5ae091c43730194cba7cabb5d65c1dc3f48d05caaddec6ff2319a1ce66376f?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/9a5ae091c43730194cba7cabb5d65c1dc3f48d05caaddec6ff2319a1ce66376f?s=96&d=mm&r=g","caption":"Mark"},"sameAs":["https:\/\/x.com\/marketaylor"],"url":"https:\/\/marketaylor.synology.me\/?author=1"}]}},"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/marketaylor.synology.me\/index.php?rest_route=\/wp\/v2\/posts\/1399","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/marketaylor.synology.me\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/marketaylor.synology.me\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/marketaylor.synology.me\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/marketaylor.synology.me\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1399"}],"version-history":[{"count":11,"href":"https:\/\/marketaylor.synology.me\/index.php?rest_route=\/wp\/v2\/posts\/1399\/revisions"}],"predecessor-version":[{"id":1418,"href":"https:\/\/marketaylor.synology.me\/index.php?rest_route=\/wp\/v2\/posts\/1399\/revisions\/1418"}],"wp:attachment":[{"href":"https:\/\/marketaylor.synology.me\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1399"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/marketaylor.synology.me\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1399"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/marketaylor.synology.me\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1399"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}