<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Generator" content="Microsoft Word 14 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Consolas;
        panose-1:2 11 6 9 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Calibri","sans-serif";
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-US" link="blue" vlink="purple">
<div class="WordSection1">
<p class="MsoNormal">Hi all,<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">I was trying to implement client certificate based authentication following
<a href="http://docs.basho.com/riak/kv/2.1.4/using/security/basics/">http://docs.basho.com/riak/kv/2.1.4/using/security/basics/</a> but kept getting the following SSL Handshake exception. I believe I have the client keystore, truststore and riak server cert/key
 setup properly. Both client cert and riak server cert are signed with the same CA. Any advice and suggestions will be greatly appreciated!<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">2016-08-25 12:53:24 DEBUG InternalLoggerFactory:71 - Using SLF4J as the default logging framework<o:p></o:p></p>
<p class="MsoNormal">2016-08-25 12:53:24 DEBUG MultithreadEventLoopGroup:76 - -Dio.netty.eventLoopThreads: 16<o:p></o:p></p>
<p class="MsoNormal">2016-08-25 12:53:24 DEBUG PlatformDependent0:76 - java.nio.Buffer.address: available<o:p></o:p></p>
<p class="MsoNormal">2016-08-25 12:53:24 DEBUG PlatformDependent0:76 - sun.misc.Unsafe.theUnsafe: available<o:p></o:p></p>
<p class="MsoNormal">2016-08-25 12:53:24 DEBUG PlatformDependent0:71 - sun.misc.Unsafe.copyMemory: available<o:p></o:p></p>
<p class="MsoNormal">2016-08-25 12:53:24 DEBUG PlatformDependent0:76 - java.nio.Bits.unaligned: true<o:p></o:p></p>
<p class="MsoNormal">2016-08-25 12:53:24 DEBUG PlatformDependent:71 - Platform: Windows<o:p></o:p></p>
<p class="MsoNormal">2016-08-25 12:53:24 DEBUG PlatformDependent:76 - Java version: 8<o:p></o:p></p>
<p class="MsoNormal">2016-08-25 12:53:24 DEBUG PlatformDependent:76 - -Dio.netty.noUnsafe: false<o:p></o:p></p>
<p class="MsoNormal">2016-08-25 12:53:24 DEBUG PlatformDependent:76 - sun.misc.Unsafe: available<o:p></o:p></p>
<p class="MsoNormal">2016-08-25 12:53:24 DEBUG PlatformDependent:76 - -Dio.netty.noJavassist: false<o:p></o:p></p>
<p class="MsoNormal">2016-08-25 12:53:24 DEBUG PlatformDependent:71 - Javassist: unavailable<o:p></o:p></p>
<p class="MsoNormal">2016-08-25 12:53:24 DEBUG PlatformDependent:71 - You don't have Javassist in your class path or you don't have enough permission to load dynamically generated classes.  Please check the configuration for better performance.<o:p></o:p></p>
<p class="MsoNormal">2016-08-25 12:53:24 DEBUG PlatformDependent:76 - -Dio.netty.tmpdir: C:\apache-tomcat-7.0.54\temp (java.io.tmpdir)<o:p></o:p></p>
<p class="MsoNormal">2016-08-25 12:53:24 DEBUG PlatformDependent:76 - -Dio.netty.bitMode: 64 (sun.arch.data.model)<o:p></o:p></p>
<p class="MsoNormal">2016-08-25 12:53:24 DEBUG PlatformDependent:76 - -Dio.netty.noPreferDirect: false<o:p></o:p></p>
<p class="MsoNormal">2016-08-25 12:53:24 DEBUG NioEventLoop:76 - -Dio.netty.noKeySetOptimization: false<o:p></o:p></p>
<p class="MsoNormal">2016-08-25 12:53:24 DEBUG NioEventLoop:76 - -Dio.netty.selectorAutoRebuildThreshold: 512<o:p></o:p></p>
<p class="MsoNormal">2016-08-25 12:53:24 INFO  RiakJKSConnection:73 - initializeRiak Cluster is OK<o:p></o:p></p>
<p class="MsoNormal">2016-08-25 12:53:24 DEBUG ThreadLocalRandom:71 - -Dio.netty.initialSeedUniquifier: 0xac658e47a52a7794 (took 3 ms)<o:p></o:p></p>
<p class="MsoNormal">2016-08-25 12:53:24 DEBUG ByteBufUtil:76 - -Dio.netty.allocator.type: unpooled<o:p></o:p></p>
<p class="MsoNormal">2016-08-25 12:53:24 DEBUG ByteBufUtil:76 - -Dio.netty.threadLocalDirectBufferSize: 65536<o:p></o:p></p>
<p class="MsoNormal">2016-08-25 12:53:24 DEBUG ByteBufUtil:76 - -Dio.netty.maxThreadLocalCharBufferSize: 16384<o:p></o:p></p>
<p class="MsoNormal">2016-08-25 12:53:24 DEBUG RiakNode:762 - Using TLSv1.2<o:p></o:p></p>
<p class="MsoNormal">2016-08-25 12:53:24 DEBUG RiakSecurityDecoder:166 - Handler Added<o:p></o:p></p>
<p class="MsoNormal">2016-08-25 12:53:24 DEBUG RiakNode:777 - Waiting on SSL Promise<o:p></o:p></p>
<p class="MsoNormal">2016-08-25 12:53:24 DEBUG AbstractByteBuf:81 - -Dio.netty.buffer.bytebuf.checkAccessible: true<o:p></o:p></p>
<p class="MsoNormal">2016-08-25 12:53:24 DEBUG ResourceLeakDetector:81 - -Dio.netty.leakDetection.level: simple<o:p></o:p></p>
<p class="MsoNormal">2016-08-25 12:53:24 DEBUG ResourceLeakDetector:81 - -Dio.netty.leakDetection.maxRecords: 4<o:p></o:p></p>
<p class="MsoNormal">2016-08-25 12:53:24 DEBUG Recycler:76 - -Dio.netty.recycler.maxCapacity.default: 262144<o:p></o:p></p>
<p class="MsoNormal">2016-08-25 12:53:24 DEBUG Cleaner0:76 - java.nio.ByteBuffer.cleaner(): available<o:p></o:p></p>
<p class="MsoNormal">2016-08-25 12:53:24 DEBUG RiakSecurityDecoder:69 - RiakSecurityDecoder decode<o:p></o:p></p>
<p class="MsoNormal">2016-08-25 12:53:24 DEBUG RiakSecurityDecoder:93 - Received MSG_RpbStartTls reply<o:p></o:p></p>
<p class="MsoNormal"><span style="color:red">2016-08-25 12:53:24 ERROR RiakSecurityDecoder:230 - SSL Handshake failed:
<o:p></o:p></span></p>
<p class="MsoNormal">java.nio.channels.ClosedChannelException<o:p></o:p></p>
<p class="MsoNormal">2016-08-25 12:53:24 ERROR RiakNode:787 - Failure during Auth; 127.0.0.1:8087 java.nio.channels.ClosedChannelException<o:p></o:p></p>
<p class="MsoNormal">2016-08-25 12:53:24 DEBUG RiakSecurityDecoder:181 - Channel Inactive<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">RiakNode builder setup:<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal" style="text-autospace:none"><b><span style="font-size:10.0pt;font-family:Consolas;color:#7F0055">public</span></b><span style="font-size:10.0pt;font-family:Consolas;color:black">
</span><b><span style="font-size:10.0pt;font-family:Consolas;color:#7F0055">static</span></b><span style="font-size:10.0pt;font-family:Consolas;color:black"> RiakCluster getRiakCluster(String riak</span><span style="font-size:10.0pt;font-family:Consolas;color:#6A3E3E">UserName</span><span style="font-size:10.0pt;font-family:Consolas;color:black">,
 String user</span><span style="font-size:10.0pt;font-family:Consolas;color:#6A3E3E">Password</span><span style="font-size:10.0pt;font-family:Consolas;color:black">, String
</span><span style="font-size:10.0pt;font-family:Consolas;color:#6A3E3E">storePath</span><span style="font-size:10.0pt;font-family:Consolas;color:black">, String
</span><span style="font-size:10.0pt;font-family:Consolas;color:#6A3E3E">storePasswd</span><span style="font-size:10.0pt;font-family:Consolas;color:black">, String
</span><span style="font-size:10.0pt;font-family:Consolas;color:#6A3E3E">keyPasswd</span><span style="font-size:10.0pt;font-family:Consolas;color:black">)
</span><b><span style="font-size:10.0pt;font-family:Consolas;color:#7F0055">throws</span></b><span style="font-size:10.0pt;font-family:Consolas;color:black"> UnknownHostException{</span><span style="font-size:10.0pt;font-family:Consolas"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt;font-family:Consolas;color:black">       <o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt;font-family:Consolas;color:black">       KeyStore
</span><span style="font-size:10.0pt;font-family:Consolas;color:#6A3E3E">keyStore</span><span style="font-size:10.0pt;font-family:Consolas;color:black"> =
<i>loadKeystore</i>(</span><span style="font-size:10.0pt;font-family:Consolas;color:#6A3E3E">storePath</span><span style="font-size:10.0pt;font-family:Consolas;color:black">,</span><span style="font-size:10.0pt;font-family:Consolas;color:#6A3E3E">storePasswd</span><span style="font-size:10.0pt;font-family:Consolas;color:black">);</span><span style="font-size:10.0pt;font-family:Consolas"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt;font-family:Consolas;color:black">       //riak with one node                         
</span><span style="font-size:10.0pt;font-family:Consolas"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt;font-family:Consolas;color:black">       RiakNode.Builder
</span><span style="font-size:10.0pt;font-family:Consolas;color:#6A3E3E">builder</span><span style="font-size:10.0pt;font-family:Consolas;color:black"> =
</span><b><span style="font-size:10.0pt;font-family:Consolas;color:#7F0055">new</span></b><span style="font-size:10.0pt;font-family:Consolas;color:black"> RiakNode.Builder().withRemoteAddress(</span><span style="font-size:10.0pt;font-family:Consolas;color:#2A00FF">"127.0.0.1"</span><span style="font-size:10.0pt;font-family:Consolas;color:black">).withRemotePort(8087);  
</span><span style="font-size:10.0pt;font-family:Consolas"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt;font-family:Consolas;color:black">       </span><span style="font-size:10.0pt;font-family:Consolas;color:#6A3E3E">builder</span><span style="font-size:10.0pt;font-family:Consolas;color:black">.withAuth(riak</span><span style="font-size:10.0pt;font-family:Consolas;color:#6A3E3E">UserName</span><span style="font-size:10.0pt;font-family:Consolas;color:black">,
 user</span><span style="font-size:10.0pt;font-family:Consolas;color:#6A3E3E">Password</span><span style="font-size:10.0pt;font-family:Consolas;color:black">,
</span><b><i><span style="font-size:10.0pt;font-family:Consolas;color:#0000C0">trustStore</span></i></b><span style="font-size:10.0pt;font-family:Consolas;color:black">,
</span><span style="font-size:10.0pt;font-family:Consolas;color:#6A3E3E">keyStore</span><span style="font-size:10.0pt;font-family:Consolas;color:black">,
</span><span style="font-size:10.0pt;font-family:Consolas;color:#6A3E3E">keyPasswd</span><span style="font-size:10.0pt;font-family:Consolas;color:black">);</span><span style="font-size:10.0pt;font-family:Consolas"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt;font-family:Consolas;color:black">      
</span><span style="font-size:10.0pt;font-family:Consolas;color:#6A3E3E">builder</span><span style="font-size:10.0pt;font-family:Consolas;color:black">.withConnectionTimeout(30000);    
</span><span style="font-size:10.0pt;font-family:Consolas"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt;font-family:Consolas;color:black">       RiakCluster
</span><span style="font-size:10.0pt;font-family:Consolas;color:#6A3E3E">cluster</span><span style="font-size:10.0pt;font-family:Consolas;color:black"> =
<i>cluster = <b>new</b> RiakCluster.Builder(builder.build()).build();<o:p></o:p></i></span></p>
<p class="MsoNormal" style="text-autospace:none"><i><span style="font-size:10.0pt;font-family:Consolas;color:black">       cluster.start();</span></i><span style="font-size:10.0pt;font-family:Consolas;color:black">           
</span><span style="font-size:10.0pt;font-family:Consolas"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt;font-family:Consolas;color:black">       </span><b><span style="font-size:10.0pt;font-family:Consolas;color:#7F0055">return</span></b><span style="font-size:10.0pt;font-family:Consolas;color:black">
</span><span style="font-size:10.0pt;font-family:Consolas;color:#6A3E3E">cluster</span><span style="font-size:10.0pt;font-family:Consolas;color:black">;        </span><span style="font-size:10.0pt;font-family:Consolas"><o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt;font-family:Consolas;color:black">      
<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt;font-family:Consolas;color:black"> </span><span style="font-size:10.0pt;font-family:Consolas"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;color:black">    }</span><o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Thanks<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">-Kyle-<o:p></o:p></p>
</div>
<br>
<hr>
<font face="Arial" color="Gray" size="1">The information contained in this message may be confidential and legally protected under applicable law. The message is intended solely for the addressee(s). If you are not the intended recipient, you are hereby notified
 that any use, forwarding, dissemination, or reproduction of this message is strictly prohibited and may be unlawful. If you are not the intended recipient, please contact the sender by return e-mail and destroy all copies of the original message.<br>
</font>
</body>
</html>