Подключение по SSL

Драйвер поддерживает подключение » MongoDB по SSL и может дополнительно использовать параметры контекста потока SSL для предоставления подробной информации, такой как проверка сертификатов по определенной цепочке или проверка подлинности » MongoDB с использованием сертификатов X.509.

Пример #1 Подключение к MongoDB по SSL

<?php
$mc 
= new MongoClient("mongodb://server1", array("ssl" => true));
?>

Пример #2 Подключение к MongoDB по SSL, проверяя подлинность сертификата:

<?php
$SSL_DIR 
"/vagrant/certs";
$SSL_FILE "CA_Root_Certificate.pem";

$ctx stream_context_create(array(
    
"ssl" => array(
        
/* Удостоверяющий Центр, которым должен быть удостоверен сертификат */
        
"cafile"            => $SSL_DIR "/" $SSL_FILE,

        
/* Отключаем самоподписанные сертификаты */
        
"allow_self_signed" => false,

        
/* Проверяем сертификат по корневому сертификату Удостоверяющего Центра. */
        
"verify_peer"       => true/* По умолчанию false до PHP 5.6 */

        /* Проверяем имя партнера (например, проверка имени хоста) */
        /* Будет использовать имя хоста, используемое для подключения к узлу */
        
"verify_peer_name"  => true,

        
/* Проверяем, что срок действия сертификата сервера не истек */
        
"verify_expiry"     => true/* Доступно только в PHP-драйвере MongoDB */
    
),
);

$mc = new MongoClient(
    
"mongodb://server1"
    array(
"ssl" => true), 
    array(
"context" => $ctx)
);
?>

Замечание:

Параметр "verify_peer_name" был добавлен в PHP 5.6.0. В версии 1.6.5, функция была добавлена в драйвер, поэтому он работает также с PHP 5.3 и 5.4.

Пример #3 Подключение к MongoDB с клиентским сертификатом

<?php
$SSL_DIR  
"/vagrant/certs";
$SSL_FILE "CA_Root_Certificate.pem";

$MYCERT   "/vagrant/certs/ca-signed-client.pem";

$ctx stream_context_create(array(
    
"ssl" => array(
        
"local_cert"        => $MYCERT,
        
/* Если сертификат, был закодирован паролем, необходимо указать его здесь */
        
"passphrase"        => "My Passphrase for the local_cert",

        
/* При желании дополнительно проверьте */
        
"cafile"            => $SSL_DIR "/" $SSL_FILE,
        
"allow_self_signed" => false,
        
"verify_peer"       => true,
        
"verify_peer_name"  => true,
        
"verify_expiry"     => true,
    ),
));

$mc = new MongoClient(
    
"mongodb://server1/?ssl=true"
    array(), 
    array(
"context" => $ctx)
);
?>

Пример #4 Аутентификация по сертификатам X.509

Имя пользователя – certificate subject из X.509, можно получить следующим образом:

openssl x509 -in /vagrant/certs/ca-signed-client.pem -inform PEM -subject -nameopt RFC2253
<?php
$ctx 
stream_context_create( array(
    
"ssl" => array(
        
"local_cert" => "/vagrant/certs/ca-signed-client.pem",
    )
) );

$mc = new MongoClient(
    
'mongodb://username@server1/?authSource=$external&authMechanism=MONGODB-X509&ssl=true'
    array(), 
    array(
"context" => $ctx)
);
?>

Где username – это атрибут subject сертификата.

Список изменений

Версия Описание
1.5.0 Добавлена поддержка аутентификации X.509.
1.4.0 Добавлена поддержка подключения к MongoDB с поддержкой SSL.