У меня есть оба старых драйвера mongo php 1.6.10 и поддерживается установленный драйвер 1.2.5 mongodb php. Версия PHP 5.6.29 на Debian 8.
как устаревший драйвер, так и поддерживаемый драйвер могут подключаться с использованием основных учетных данных.
Только устаревший драйвер может подключиться с использованием сертификата x509.
Поддерживаемый драйвер вызывает приведенное ниже исключение при попытке сделать простой findOne для коллекции.
PHP Fatal error: Uncaught exception 'MongoDB\Driver\Exception\RuntimeException' with message 'SCRAM Failure: invalid salt length of 0 in sasl step2'
Я использую клиентскую библиотеку Mongodb для драйвера mongodb http://php.net/manual/en/set.mongodb.php
Вот перефразированный код, который я использую
<?php
$server = 'mongodb://uat-a:27017,uat-b:27017,uat-c:27017';
$options = [
'replicaSet' => 'rs-uat',
'username' => 'CN=my-user,OU=user,O=NA,L=Place,ST=State,C=GB',
'authMechanism' => 'MONGODB-X509',
'authSource' => '$external',
'ssl' => true,
'connect' => true,
];
$driverOptions = [
'context' => stream_context_create(
[
'ssl' => [
'local_cert' => '/etc/local-cert.pem',
'cafile' => '/etc/cafile.pem',
],
]
),
];
$database = 'uatdata';
$client = new MongoDB\Client($server, $options, $driverOptions);
$db = $client->selectDatabase($database);
$doc = $db->selectCollection('errors')->findOne([], ['projection' => ['timestamp' => 1, 'uri' => 1]]);
Ответ состоит в том, чтобы передать authMechanism
опция в строке URI. например
mongodb://uat-a:27017,uat-b:27017,uat-c:27017/?authMechanism=MONGODB-X509
Более подробное объяснение можно найти здесь https://jira.mongodb.org/browse/PHPC-914
Других решений пока нет …