Connexion via SSL

Le driver supporte les connexions » MongoDB via SSL et peut, optionnellement, utiliser les options de contexte du flux SSL pour fournir plus de détails, comme la vérification des certificats en utilisant une chaîne de certificat spécifique, ou l'authentification à » MongoDB en utilisant des certificats X509.

Exemple #1 Connexion à l'instance MongoDB avec un cryptage SSL

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

Exemple #2 Connexion à l'instance MongoDB avec le cryptage SSL avec des vérifications

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

$ctx stream_context_create(array(
    
"ssl" => array(
        
/* Authorité de certification du certificat du serveur distant utilisé pour la signature */
        
"cafile"            => $SSL_DIR "/" $SSL_FILE,

        
/* On désactive les certificats auto-signés */
        
"allow_self_signed" => false,

        
/* Vérifie le certificat d'apairage avec notre certificat racine d'authorité de certification */
        
"verify_peer"       => true/* Default to false pre PHP 5.6 */

        /* Vérifie le nom d'apairage (i.e. validation du nom d'hôte) */
        /* Nous utilisons le nom d'hôte utilisé pour la connexion sur le noeud */
        
"verify_peer_name"  => true,

        
/* On vérifie que le certificat du serveur n'a pas expiré */
        
"verify_expiry"     => true/* Seulement disponible avec le driver MongoDB PHP */
    
),
);

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

Note:

"verify_peer_name" est nouveau en PHP 5.6.0. Le driver MongoDB, depuis la version 1.6.5, a porté cette fonctionalité dans le driver lui-même, aussi, il fonctionne avec PHP 5.3 et 5.4 également.

Exemple #3 Connexion à l'instance MongoDB qui nécessite des certificats client

<?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,
        
/* Si le certificat que nous avons fourni a été encodé avec une phrase en guise de mot de passe, nous devons la définir ici */
        
"passphrase"        => "Ma phrase mot de passe ici pour le local_cert",

        
/* Optionnellement, on vérifie que le serveur est bien celui annoncé */
        
"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)
);
?>

Exemple #4 Authentification avec des certificats X.509

Le nom d'utilisateur correspond au certificate subject du certificat X509, qui peut être extrait comme ceci :

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 est le sujet du certificat.

Historique

Version Description
1.5.0 Ajout du support pour l'authentification X509.
1.4.0 Ajout du support pour les connexions MongoDB via SSL.