2015-12-27 8 views
5

Zusammenfassung: PHP gibt einen Fehler bei der Verwendung von selbstsignierten Zertifikaten, wie von Google Cloud SQL bereitgestellt.SSL-selbstsignierte Zertifizierungen für die Verbindung mit Mysql mit PHP

Details: Ich versuche, eine Verbindung zur mysql-Instanz von Google Cloud SQL herzustellen, indem ich die mysqli-Bibliothek von PHP verwende.

$db = mysqli_init(); 
mysqli_options ($db, MYSQLI_OPT_SSL_VERIFY_SERVER_CERT, true); 
$db->ssl_set('client-key.pem', 'client-cert.pem', 'server-ca.pem', NULL, NULL); 
$query = mysqli_real_connect ($db, $host, $user, $pass, $dbname, 3306, NULL, MYSQLI_CLIENT_SSL); 

Wie ich verstehe Google Cloud ermöglicht selbst signierten Zertifikaten, von wo aus ich die Client-key.pem, Client-cert.pem, Server-ca.pem Dateien heruntergeladen.

bekomme ich folgende Fehler von PHP, wenn die Überprüfung des Zertifikats:

mysqli_real_connect(): Peer certificate CN=`<project_name>' did not match expected CN=`<db_IP>' 

Auf der Grundlage meiner Forschung so weit, es scheint, ich brauche eine Möglichkeit verify_peer Kontrolle zu deaktivieren, die offenbar PHP nicht gestattet. Können Sie dies bitte bestätigen und/oder eine Möglichkeit anbieten, SSL mit Google Cloud SQL von PHP zu verwenden?

Vielen Dank.

+0

Ich bin auf der Suche nach so etwas (http://stackoverflow.com/questions/8443618/disable-certificate-verification-in-php-soapclient), aber für mysql. Vielen Dank! – user3376563

+0

Können Sie [mit dem Befehlszeilen-Client 'mysql' eine Verbindung zu SSL herstellen (https://cloud.google.com/sql/docs/mysql-client#connect-ssl)? – Nick

Antwort

1

Es sieht so aus, als wären die 2 relevanten Fehler in PHP immer noch nicht vollständig gelöst: #68344 und #71003.

0

Leider ist dies noch nicht möglich. PHP führt eine Suche durch und das Ergebnis stimmt nicht mit dem selbstsignierten Zertifikat überein. Einer wird den Namen enthalten und der andere wird die IP enthalten.

Es gibt keine Möglichkeit [derzeit], PHP zu ignorieren, daher ist eine Verbindung in diesem Fall über SSL nicht möglich.

0

benötigen Sie

$query = mysqli_real_connect ($db, $host, $user, $pass, $dbname, 3306, NULL, MYSQLI_CLIENT_SSL); 

Mit

$query = mysqli_real_connect ($db, $host, $user, $pass, $dbname, 3306, NULL, MYSQLI_CLIENT_SSL_DONT_VERIFY_SERVER_CERT); 

ersetzen Like MYSQLI_CLIENT_SSL ist, aber deaktiviert die Validierung des SSL-Zertifikat zur Verfügung gestellt. Dies gilt nur für Installationen mit MySQL Native Driver und MySQL 5.6 oder höher.

Ich hoffe, es wird helfen.