Я пытаюсь реализовать аутентификацию сертификата X.509 для Mongo с использованием драйвера C ++.Драйвер 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: проверка сертификата не удалась, вызов ismaster на x.xxx.xxx.xxx
Когда я использую те же сертификаты в скрипте python3, все работает нормально (pymongoэто 3.4.0, установлен из репозитория Debian):
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"))
Также, если я запускаю команду mongo из оболочки с тем же URI и передаю параметры сертификата, соединение успешно устанавливается.
Сделатьчто-то упустить?