使用: 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)进行查询时,此加密设置有效。
非常感谢您的帮助。
答案 0 :(得分:0)
二进制连接意味着您正在使用HazelcastClient连接,对吧?
还请建议您的Hazelcast节点和客户端配置的网络配置是什么。它看起来更像是一个淡褐色配置问题。
由于 穆库尔