Mongocxx无法使用SSL连接到mongoDB

时间:2018-10-11 12:06:09

标签: c++ mongodb ssl mongo-cxx-driver

我完成了以下教程(https://medium.com/@rajanmaharjan/secure-your-mongodb-connections-ssl-tls-92e2addb3c89),以设置自签名SSL证书来保护设备与托管mongoDB数据库的服务器之间的通信。

我可以使用以下命令从服务器和设备访问数据库:

func collectionView(collectionView: UICollectionView, didDeselectItemAtIndexPath indexPath: NSIndexPath) { var cell = collectionView.cellForItemAtIndexPath(indexPath) cell?.backgroundColor = UIColor.clearColor() }

错误

当我尝试使用C ++程序连接到数据库时,出现段错误:

mongo --ssl --sslCAFile /path/to/CA.pem --sslPEMKeyFile /path/to/mongodb.pem --host IP:port

GDB的输出是

Segmentation fault (core dumped)

C ++代码

我通过以下方式实例化连接:

Program received signal SIGSEGV, Segmentation fault.
0x0000007fb7f6d6a8 in mongocxx::v_noabi::client::client(mongocxx::v_noabi::uri const&, mongocxx::v_noabi::options::client const&) () from /usr/local/lib/libmongocxx.so._noabi

并使用以下命令进行编译:

mongocxx::instance instance{}; mongocxx::options::ssl ssl_opts; ssl_opts.pem_file("/path/to/mongodb.pem"); // ssl_opts.allow_invalid_certificates(false); // I have tried this mongocxx::options::client client_opts; client_opts.ssl_opts(ssl_opts); auto client = mongocxx::client{mongocxx::uri{"mongodb://user:pwd@IP:port/?authMechanism=MONGODB-X509&ssl=true"}, client_opts};

我无法修复此错误或无法在线找到解决方案,我们将不胜感激。

其他信息

版本:

Mongo c-1.10.1

Mongo cxx-3.3.0

回溯:

c++ --std=c++11 main.cpp $(pkg-config --cflags --libs libmongocxx) -Wl,-rpath,/usr/local/lib

1 个答案:

答案 0 :(得分:2)

有一个known serious bug,其中将options::ssl_opts传递给C ++驱动程序3.3.0版中的客户端构造函数,从而导致段错误。此问题已在3.3.1中修复。强烈建议您升级。

作为3.3.0的解决方法,您可以通过URI字符串传递pem_file选项。 URI选项"sslclientcertificatekeyfile"对应于options::ssl::pem_file选项。例如:

auto uri = mongocxx::uri{"mongodb://localhost/?ssl=true&sslclientcertificatekeyfile=/path/to/mongodb.pem"};

但请尽可能升级到3.3.1。