2015-12-27 8 views
5

Riepilogo: PHP dà un errore quando utilizza certificati autofirmati come fornito da Google Cloud SQL.Certificazioni autofirmate SSL per connettersi con Mysql con PHP

Dettagli: Sto tentando di connettermi all'istanza mysql di Google Cloud SQL utilizzando la libreria mysqli di PHP.

$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); 

quanto ho capito di cloud di Google permette certificati autofirmati, da dove ho scaricato i file client-key.pem, client-cert.pem, server ca.pem.

ottengo il seguente errore da PHP durante la convalida del certificato:

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

Sulla base della mia ricerca finora, sembra ho bisogno di un modo per disattivare controllo Verify_Peer, che a quanto pare PHP non consente. Puoi validare questo e/o offrire un modo per utilizzare SSL con Google Cloud SQL da PHP?

Grazie.

+0

Sto cercando qualcosa di simile a questo (http://stackoverflow.com/questions/8443618/disable-certificate-verification-in-php-soapclient) ma per mysql. Grazie! – user3376563

+0

Sei in grado di [connettersi con SSL usando il client 'mysql' della riga di comando] (https://cloud.google.com/sql/docs/mysql-client#connect-ssl)? – Nick

risposta

1

Sembra che i 2 bug rilevanti in PHP non siano ancora completamente risolti: #68344 e #71003.

0

Sfortunatamente, questo non è ancora possibile. PHP esegue una ricerca e il risultato non corrisponderà al certificato autofirmato. Uno conterrà il nome e l'altro conterrà l'IP.

Attualmente non è possibile ignorare PHP in questo momento, quindi la connessione in questo caso tramite SSL non è possibile.

0

è necessario sostituire

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

Con

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

è come MYSQLI_CLIENT_SSL, ma disattiva la convalida del certificato SSL fornito. Questo è solo per le installazioni che utilizzano MySQL Native Driver e MySQL 5.6 o successive.

Spero che possa essere d'aiuto.