我在防火墙后面的vServer上运行mongodb 3.2实例(我不允许配置)。如果在/etc/mongod.conf中关闭了ssl,则可以从任何地方(bind_ip:0.0.0.0)访问Mongo(并且可连接)
此外,我生成了一个CA,一个server.pem和一个client.pem(通过mongo-shell连接)。这些Certs工作正常,因为我可以从mongod运行的机器连接到mongod:
$ mongo --host localhost --ssl --sslPEMKeyFile client.pem --sslCAFile ca.crt
但是:当我尝试使用相同的Certs从另一台机器连接时,它无法连接:
$ mongo --host mongo1.mydomain.net --ssl --sslPEMKeyFile client.pem --sslCAFile ca.crt
MongoDB shell version: 3.2.9
connecting to: <ip>:27017/test
2016-08-22T22:29:17.632+0200 W NETWORK [thread1] Failed to connect to <ip>:27017 after 5000 milliseconds, giving up.
2016-08-22T22:29:17.633+0200 E QUERY [thread1] Error: couldn't connect to server <ip>:27017, connection attempt failed :
connect@src/mongo/shell/mongo.js:231:14
@(connect):1:6
这很奇怪,因为/var/log/mongodb/mongd.log表示mongod在端口27017上列出了ssl连接(netstat说的相同):
2016-08-22T21:09:10.182+0200 I FTDC [initandlisten] Initializing full-time diagnostic data capture with directory '/var/lib/mongodb/diagnostic.data'
2016-08-22T21:09:10.182+0200 I NETWORK [HostnameCanonicalizationWorker] Starting hostname canonicalization worker
2016-08-22T21:09:10.183+0200 I NETWORK [initandlisten] waiting for connections on port 27017 ssl
来自其他计算机的ssl连接尝试未在日志文件中列出,这更加奇怪。
所以我问了tcpdump:
23:10:32.984067 IP (tos 0x0, ttl 51, id 64132, offset 0, flags [DF], proto TCP (6), length 60)
<other_machine>.39644 > 172.12.51.23.27017: Flags [S], cksum 0xd3d0 (correct), seq 1809185188, win 29200, options [mss 1420,sackOK,TS val 7275296 ecr 0,nop,wscale 7], length 0
23:10:32.984112 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 60)
172.12.51.23.27017 > <other_machine>.39644: Flags [S.], cksum 0x9506 (incorrect -> 0x14cf), seq 2653469724, ack 1809185189, win 28960, options [mss 1460,sackOK,TS val 93151206 ecr 7275296,nop,wscale 7], length 0
23:10:33.041545 IP (tos 0x0, ttl 51, id 64133, offset 0, flags [DF], proto TCP (6), length 52)
<other_machine>.39644 > 172.12.51.23.27017: Flags [.], cksum 0xb3c5 (correct), seq 1, ack 1, win 229, options [nop,nop,TS val 7275313 ecr 93151206], length 0
23:10:33.047713 IP (tos 0x0, ttl 63, id 49309, offset 0, flags [none], proto TCP (6), length 40)
<other_machine>.39644 > 172.12.51.23.27017: Flags [R.], cksum 0x55ec (correct), seq 1, ack 1, win 229, length 0
mongo服务器的第一个回复始终是无效的校验和。但我真的不知道这是否重要。实际上我不知道如何解决这个问题我只是希望有人能帮我提一下。
欢呼声, dymat
答案 0 :(得分:0)
证书中的主机名可能与mongo命令中使用的主机名不同。尝试在mongo命令的末尾添加--sslAllowInvalidHostnames参数。
mongo --host mongo1.mydomain.net --ssl --sslPEMKeyFile client.pem --sslCAFile ca.crt --sslAllowInvalidHostnames
请参阅https://docs.mongodb.com/manual/reference/program/mongotop/#cmdoption--sslAllowInvalidHostnames
上的mongodb连接选项答案 1 :(得分:0)
感谢穆罕默德!
这也是我的第一个想法。但事实证明,在与sysadmin交谈之后,他们已经安装了一个应用程序防火墙,它将端口27017上的SSL请求归类为属于mongodb服务器的 not 。防火墙预计端口27017上的未加密流量。
一旦他们重新配置防火墙,一切都按预期工作。
再见 dymat