2016-08-02 2 views
1

Nous avons un serveur avec mysql sur le port 3306. Nous avons des sertifications et la clé et nous essayons de connectez-vous à ce serveur. Mais nous voyons un tel problème:php 5.x 7.x, ssl erreur pdo: Certificat d'homologue CN = `someName 'ne correspond pas prévu CN =' someIP '

Peer certificate CN='SomeName' did not match expected CN='someIP'

J'ai lu beaucoup d'articles et ne trouve pas de réponse pour PDO PHP. Le plus intéressant est que le SQLYog pourrait se connecter avec tous les paramètres. J'ai lu que je check_peer_names peut être désactivé (j'espère que je comprends ce que peer_names ...), mais seulement si nous utilisons openssl_ {functions} ou mysqli, pas PDO. Les deux options ne sont pas appropriées pour moi. J'ai besoin de PDO.

Ce que j'ai essayé de faire:

  • basculer entre les versions de php. Cela m'a aidé, mais j'ai besoin de 5,6 ou plus. Pour PHP 7.0 la même erreur.
  • trouver une autre version de openssl et pdo; rapide j'ai compris que c'est une mauvaise idée :)
  • trouver quelques paramètres dans php.ini, mais pas de paramètres pour mon problème, seulement pour la création de SSL.

Mon code pour la connexion:

$dbInfo = array 
(
'dsn' => 'mysql:host=123.45.67.890;dbname=someDB;port=3306', 
'user' => 'user', 
'pass' => 'userpassword' 
); 

$con = new PDO 
    (
    $dbInfo['dsn'], $dbInfo['user'], $dbInfo['pass'], 
    array(
     PDO::MYSQL_ATTR_SSL_CIPHER => 'AES256-SHA', 
     PDO::MYSQL_ATTR_SSL_CA  => 'SSLCert/ca-cert.pem', 
     PDO::MYSQL_ATTR_SSL_KEY => 'SSLCert/client-key.pem', 
     PDO::MYSQL_ATTR_SSL_CERT => 'SSLCert/client-cert.pem', 
    ) 
    ); 

echo 'Connection OK!'; 
+1

C'est un problème connu, voir: [bug php # 71003] (https://bugs.php.net/bug.php?id=71003) –

+2

Merci l'homme! Mais je ne comprends toujours pas ce que j'ai à faire avec la connexion SSL. J'ai lu qu'ils le corrigent dans un patch, ils creusent openssl lib, mais d'abord je ne suis pas bon à creuser à l'intérieur d'une lib, ensuite - ce n'est pas une bonne idée de corriger la librairie par moi-même. Peut-être que je suis carelles et n'ai pas trouvé la réponse ... Si vous avez travaillé et résolu ce problème par vous-même - pouvez-vous me donner une idée de ce que je dois faire? –

Répondre

1

Nous l'avons à travailler pour nos certs auto-signés internes par ne pas utiliser les adresses IP mais machine noms (+ de domaine) comme le CN et les paramètres de connexion.

Donc, mettez 'dbServer1.company.local' comme CN pour le certificat de serveur et utilisez la même adresse 'dbServer1.company.local' que la partie hôte du DSN pour la connexion PDO. Si vous le souhaitez, vous pouvez simplement utiliser 'dbServer1' mais assurez-vous de l'utiliser aux deux endroits.

Cela ne vous parle:

$pdo_options = array(
    PDO::MYSQL_ATTR_SSL_KEY => 'path/to/client-key.pem', 
    PDO::MYSQL_ATTR_SSL_CERT => 'path/to/client-cert.pem', 
    PDO::MYSQL_ATTR_SSL_CA => 'path/to/ca.pem' 
); 

PDO::__construct('mysql:host=dbServer1.company.local;dbname=someDB','someUser', 'somePass', $pdo_options); 

Nous gérons notre propre DNS afin résoudre dbServer1.company.local n'est pas un problème, mais si votre serveur Web ne peut pas le résoudre ou vous ne/ne peut pas gérer l'entrée DNS , puis pirater quelque chose comme ce qui suit à votre fichier etc/hosts:

10.5.5.20 dbServer1.company.local 

ou

10.5.5.20 dbServer1 
+0

Je ne peux pas dire que vous avez raison ou vous avez tort, car je ne garde pas ce projet pendant six mois. Mais je pense que vous dites les bonnes choses. –

+0

J'ai écrit cette réponse pour quelqu'un d'autre qui visite la page. Je pensais que tu aurais évolué maintenant. – PadraigD

+0

Sure déplacé! :) J'écris juste que je ne peux pas vérifier ce que tu as écrit. –