在集群节点之间使用OrientDB 2.2 TLS加密二进制连接时出错

时间:2017-03-20 16:47:24

标签: ssl ssl-certificate orientdb

使用: OrientDB社区2.2.16 GA, hazelcast-AWS-1.1.1, RHEL 6.7, 的openjdk-1.7.0.121-2.6.8.1.el6_8。

我已经设置了一个OrientDB分布式(集群)。节点使用Hazelcast来发现彼此。通过未加密的连接,节点彼此通信。我可以使用二进制和RESTful HTTP进行查询。生活很好。当我使用TLS / SSL加密RESTful HTTP连接以进行查询时,它可以正常工作。还好。但是,当我使用相同的TLS / SSL加密二进制连接时,我收到此错误:

com.orientechnologies.orient.enterprise.channel.binary.ONetworkProtocolException:无法从远程服务器读取协议版本。

当我在两个节点上启动dserver.sh命令时会发生这种情况。 Hazelcast似乎可以发现节点(我使用AWS EC2插件)。但是,当节点尝试通过二进制端口相互通信时,将显示错误消息。此时我只是试图让节点互相通信加密。

为了减少此问题,我为配置的密钥库和信任库使用了相同的密钥库。每个数据库节点都像客户端和服务器一样充当彼此。我想简化故障排除。这也符合文档。

我遵循的OrientDB文档: http://orientdb.com/docs/2.2/Using-SSL-with-OrientDB.html

我的orientdb-server-config.xml文件中的相关部分:

        <socket implementation="com.orientechnologies.orient.server.network.OServerTLSSocketFactory" name="ssl">
            <parameters>
                <parameter value="false" name="network.ssl.clientAuth"/>
                <parameter value="config/cert/orientdb_server_key_store.jks" name="network.ssl.keyStore"/>
                <parameter value="changeme" name="network.ssl.keyStorePassword"/>
                <parameter value="config/cert/orientdb_server_key_store.jks" name="network.ssl.trustStore"/>
                <parameter value="changeme" name="network.ssl.trustStorePassword"/>
            </parameters>
        </socket>

...

<listener protocol="binary" socket="ssl" port-range="2499" ip-address="0.0.0.0"/>

我已经尝试过network.ssl.clientAuth false和true。结果相同。

要创建密钥库,我使用与文档相同的命令(我使用Keytool)为服务器创建证书。我在我的本地计算机(Mac)上用java版本1.8.0_92做了这个。

keytool -genkey -alias server -keystore orientdb_server_key_store.jks -keyalg RSA -keysize 2048 -validity 3650

奇怪的是,当我的OrientDB客户端/控制台/ gremlin / binary对独立数据库(运行server.sh而不是dserver.sh)进行查询时,此加密设置有效。

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

二进制连接意味着您正在使用HazelcastClient连接,对吧?

还请建议您的Hazelcast节点和客户端配置的网络配置是什么。它看起来更像是一个淡褐色配置问题。

由于 穆库尔