我正准备使用C ++驱动程序为Mongo实现X.509证书身份验证。驱动程序为3.4.0(启用OpenSSL的自定义版本),C驱动程序为1.13.0,在Debian 9上运行,服务器为Mongo 3.2
连接代码:
mongocxx::options::client opts;
mongocxx::options::ssl ssl_opts;
ssl_opts.allow_invalid_certificates(false);
ssl_opts.ca_file( "rootCA.pem );
ssl_opts.pem_file( "mongodb.pem" );
opts.ssl_opts(ssl_opts);
const mongocxx::uri url{"mongodb://x.xxx.xxx.xxx:27017/?ssl=true&maxPoolSize=10"};
这被传递给mongocxx :: pool实例。
当我尝试执行命令时,我收到:
连接失败:未找到合适的服务器:
serverSelectionTimeoutMS
已过期:[TLS握手失败:错误:1416F086:SSL例程:tls_process_server_certificate:certificate验证在x.xxx.xxx.xxx上调用ismaster失败
当我在python3脚本中使用相同的证书时,一切正常(pymongo是3.4.0,从Debian repo安装):
import pymongo
client = pymongo.MongoClient('mongodb://3.120.209.225:27017/?ssl=true&maxPoolSize=10',
ssl_ca_certs='rootCA.pem',
ssl_certfile='mongodb.pem')
db = client.ucas
print(db.command("isMaster"))
如果我使用相同的URI从shell运行mongo命令并通过证书选项,则连接成功建立。
我想念什么吗?