Mongocxx не может подключиться к mongoDB с помощью SSL - PullRequest
0 голосов
/ 11 октября 2018

Я закончил следующий урок (https://medium.com/@rajanmaharjan/secure-your-mongodb-connections-ssl-tls-92e2addb3c89), чтобы настроить самозаверяющие SSL-сертификаты для защиты связи между устройством и сервером, на котором размещена база данных mongoDB.

Я могу получить доступ к базе данных изсервер и с устройства с помощью следующей команды:

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

Ошибка

Когда я пытаюсь подключиться к базе данных с помощью программы C ++, я получаю ошибку seg:

Segmentation fault (core dumped)

Выход из GDB:

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

C ++ код

Я устанавливаю соединение с:

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};

И скомпилируйте следующую команду:

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

Мне не удалось исправить эту ошибку или найти решение в Интернете, любая помощь будет оченьприветствуется.

Дополнительная информация

Версии:

Mongo c - 1.10.1

Mongo cxx - 3.3.0

Backtrace:

(gdb) thread apply all bt

Thread 1 (Thread 0x7fb7ff4000 (LWP 17800)):
#0  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
#1  0x00000000004027d0 in main ()

1 Ответ

0 голосов
/ 12 октября 2018

Известная серьезная ошибка с передачей options::ssl_opts клиентскому конструктору в драйвере C ++ версии 3.3.0, вызывающая ошибку segfault.Это исправлено в 3.3.1.Настоятельно рекомендуется обновить.

В качестве обходного пути для 3.3.0 вы можете передать параметр pem_file через строку URI.Параметр URI "sslclientcertificatekeyfile" соответствует параметру options::ssl::pem_file.Например:

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

Но обновите до 3.3.1, если это возможно.

...