2015-12-27 1 views
5

Резюме: PHP дает ошибку при использовании самозаверяющих сертификатов, предоставляемых Google Cloud SQL.SSL-самоподписанные сертификаты для подключения к Mysql с PHP

Подробности: Я пытаюсь подключиться к экземпляру mysql Google Cloud SQL, используя библиотеку mysqli 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); 

Как я понимаю Google облако позволяет самозаверенные сертификаты, откуда я скачал файлы клиента key.pem, клиент-cert.pem, серверные ca.pem.

я получаю следующее сообщение об ошибке из PHP при проверке сертификата:

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

На основе моих исследований до сих пор, кажется, мне нужен способ, чтобы отключить проверку Verify_Peer, который, по-видимому PHP не позволяет. Можете ли вы подтвердить это и/или предложить способ использования SSL с Google Cloud SQL с PHP?

спасибо.

+0

Я ищу что-то вроде этого (http://stackoverflow.com/questions/8443618/disable-certificate-verification-in-php-soapclient), но для mysql. Благодаря! – user3376563

+0

Можете ли вы [подключиться к SSL с помощью командной строки 'mysql' client] (https://cloud.google.com/sql/docs/mysql-client#connect-ssl)? – Nick

ответ

1

Похоже, что 2 соответствующих ошибки в PHP все еще не полностью решены: #68344 и #71003.

0

К сожалению, пока это невозможно. PHP выполняет поиск, и результат не будет соответствовать самозаверяющему сертификату. Один будет содержать имя, а другой будет содержать IP.

Невозможно [в настоящее время] игнорировать PHP, поэтому подключение в этом случае через SSL невозможно.

0

вам нужно заменить

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

С

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

это походит MYSQLI_CLIENT_SSL, но отключает проверку предоставленного сертификата SSL. Это только для установок с использованием MySQL Native Driver и MySQL 5.6 или новее.

Надеюсь, это поможет.