[ 
https://issues.apache.org/jira/browse/CASSANDRA-7973?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14557979#comment-14557979
 ] 

Stefania commented on CASSANDRA-7973:
-------------------------------------

Thanks for the details.

If I use the same settings, with self-signed certificates generated as follows:

{code}
keytool -genkeypair -alias cassandra -keyalg RSA -keysize 1024 -keystore 
.keystore -storepass cassandra -keypass cassandra
keytool -exportcert -alias cassandra -rfc -file ca.cert -keystore .keystore 
-storepass cassandra
#copy ca.cert in JRE/lib/security and then run:
keytool -import -alias ca -file ca.cert -keystore cacerts -storepass changeit
{code}

Then with python 2.6.9 I get

{code}
Connection error: ('Unable to connect to any servers', {'127.0.0.1': 
ConnectionShutdown('Connection <AsyncoreConnection(16844176) 127.0.0.1:9042 
(closed)> is already closed',)})
{code}

and server side:

{code}
INFO  05:07:23 Unexpected exception during request; channel = [id: 0x6ce43cee, 
/127.0.0.1:37617 => /127.0.0.1:9042]
io.netty.handler.ssl.NotSslRecordException: not an SSL/TLS record: 
030000000500000000
        at io.netty.handler.ssl.SslHandler.decode(SslHandler.java:860) 
~[netty-all-4.0.23.Final.jar:4.0.23.Final]
        at 
io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:249)
 ~[netty-all-4.0.23.Final.jar:4.0.23.Final]
        at 
io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:149)
 ~[netty-all-4.0.23.Final.jar:4.0.23.Final]
        at 
io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:333)
 ~[netty-all-4.0.23.Final.jar:4.0.23.Final]
        at 
io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:319)
 ~[netty-all-4.0.23.Final.jar:4.0.23.Final]
        at 
io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:787)
 ~[netty-all-4.0.23.Final.jar:4.0.23.Final]
        at 
io.netty.channel.epoll.EpollSocketChannel$EpollSocketUnsafe.epollInReady(EpollSocketChannel.java:722)
 ~[netty-all-4.0.23.Final.jar:4.0.23.Final]
        at 
io.netty.channel.epoll.EpollEventLoop.processReady(EpollEventLoop.java:326) 
~[netty-all-4.0.23.Final.jar:4.0.23.Final]
        at io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:264) 
~[netty-all-4.0.23.Final.jar:4.0.23.Final]
        at 
io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:116)
 ~[netty-all-4.0.23.Final.jar:4.0.23.Final]
        at 
io.netty.util.concurrent.DefaultThreadFactory$DefaultRunnableDecorator.run(DefaultThreadFactory.java:137)
 ~[netty-all-4.0.23.Final.jar:4.0.23.Final]
        at java.lang.Thread.run(Thread.java:745) [na:1.8.0_45]
{code}

Whereas with python 2.7.6 it works. I also tested validate=true and that too 
works with 2.7.6 and fails with 2.6.9.

[~eperott] is this what you observe or is it different?

I've also run the server locally with {{-Djavax.net.debug=all}} to debug the 
ssl connection using the following commands:

{code}
JVM_EXTRA_OPTS=-Djavax.net.debug=all
cassandra -f | tee output.txt
less output.txt | grep -v "Ignoring unavailable cipher suite" | less
{code}

And here is what I get:

{code}
Using SSLEngineImpl.
epollEventLoopGroup-2-7, called closeOutbound()
epollEventLoopGroup-2-7, closeOutboundInternal()
epollEventLoopGroup-2-7, called closeInbound()
epollEventLoopGroup-2-7, fatal error: 80: Inbound closed before receiving 
peer's close_notify: possible truncation attack?
javax.net.ssl.SSLException: Inbound closed before receiving peer's 
close_notify: possible truncation attack?
epollEventLoopGroup-2-7, SEND TLSv1.2 ALERT:  fatal, description = 
internal_error
epollEventLoopGroup-2-7, Exception sending alert: java.io.IOException: writer 
side was already closed.
epollEventLoopGroup-2-7, called closeOutbound()
epollEventLoopGroup-2-7, closeOutboundInternal()
epollEventLoopGroup-2-7, called closeInbound()
epollEventLoopGroup-2-7, closeInboundInternal()
INFO  05:07:23 Unexpected exception during request; channel = [id: 0x6ce43cee, 
/127.0.0.1:37617 => /127.0.0.1:9042]
io.netty.handler.ssl.NotSslRecordException: not an SSL/TLS record: 
030000000500000000
        at io.netty.handler.ssl.SslHandler.decode(SslHandler.java:860) 
~[netty-all-4.0.23.Final.jar:4.0.23.Final]
        at 
io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:249)
 ~[netty-all-4.0.23.Final.jar:4.0.23.Final]
        at 
io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:149)
 ~[netty-all-4.0.23.Final.jar:4.0.23.Final]
        at 
io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:333)
 ~[netty-all-4.0.23.Final.jar:4.0.23.Final]
        at 
io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:319)
 ~[netty-all-4.0.23.Final.jar:4.0.23.Final]
        at 
io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:787)
 ~[netty-all-4.0.23.Final.jar:4.0.23.Final]
        at 
io.netty.channel.epoll.EpollSocketChannel$EpollSocketUnsafe.epollInReady(EpollSocketChannel.java:722)
 ~[netty-all-4.0.23.Final.jar:4.0.23.Final]
        at 
io.netty.channel.epoll.EpollEventLoop.processReady(EpollEventLoop.java:326) 
~[netty-all-4.0.23.Final.jar:4.0.23.Final]
        at io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:264) 
~[netty-all-4.0.23.Final.jar:4.0.23.Final]
        at 
io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:116)
 ~[netty-all-4.0.23.Final.jar:4.0.23.Final]
        at 
io.netty.util.concurrent.DefaultThreadFactory$DefaultRunnableDecorator.run(DefaultThreadFactory.java:137)
 ~[netty-all-4.0.23.Final.jar:4.0.23.Final]
        at java.lang.Thread.run(Thread.java:745) [na:1.8.0_45]
{code}

So some additional information on the connection being closed prematurely. 
Therefore I attached the python debugger to cqlsh and I verified that the 
connection is closed because recv() is called with no data in asynccore.py, 
line 377.

I also tried using java 7 rather than java 8, or the latest netty stable 
version (4.0.28) but it made no difference. 

My best guess is a python issue with the asyncore and/or the ssl module, 
[~aholmber] anything else we could try?


> cqlsh connect error "member_descriptor' object is not callable"
> ---------------------------------------------------------------
>
>                 Key: CASSANDRA-7973
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-7973
>             Project: Cassandra
>          Issue Type: Bug
>         Environment: Cassandra 2.1.0
>            Reporter: Digant Modha
>            Assignee: Philip Thompson
>            Priority: Minor
>              Labels: cqlsh, lhf
>             Fix For: 2.1.x
>
>
> When using cqlsh (Cassandra 2.1.0) with ssl, python 2.6.9. I get Connection 
> error: ('Unable to connect to any servers', {...: 
> TypeError("'member_descriptor' object is not callable",)}) 
> I am able to connect from another machine using python 2.7.5.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to