SSL-соединение MySQL через библиотеку ADODB - PullRequest
0 голосов
/ 17 июля 2009

У меня есть база данных MySQL, размещенная на удаленном сервере, и она может принимать только SSL-соединения. Когда я подключаюсь к этой базе данных, используя Java JDBC с параметрами SSL, она работает нормально. Существует специальная строка jdbc, которую я использую для соединения JDBC, как показано ниже "JDBC: MySQL: //: / verifyServerCertificate = ложь и UseSSL = истина и RequireSSL = истина"

Мне нужно использовать подобное соединение через PHP с использованием библиотеки ADODB.

Я нашел несколько ссылок в Интернете об использовании расширения ADODB mysqli


(ссылка http://mbrisby.blogspot.com/2008/06/adodb-php-mysql-ssl.html)

После создания сертификата CA (скажем, он находится в /path/to/ca-cert.pem), убедитесь, что следующий элемент находится в разделе [client] файла /etc/my.cnf или в соединяющем ~ / .my.cnf пользователя на клиентском хосте:

SSL-са = / путь / к / ча-cert.pem

Затем попробуйте следующую программу PHP:

// они являются частью библиотеки AdoDB require '/path/to/adodb-exceptions.inc.php'; require '/path/to/adodb.inc.php';

/ * * Я получил «2048» от бега * printf ("% d \ n", MYSQLI_CLIENT_SSL) * в программе PHP (с установленным расширением mysqli) * / $ dsn = 'mysqli: // ssluser: sslpass @ dbhost / test? clientflags = 2048';

$ dbh = NewADOConnection ($ dsn);

$ sql = "показать статус как 'ssl_cipher'"; $ res = & $ dbh-> Execute ($ sql); print_r ($ res-> fields); $ Res-> Close ();

$ dbh-> Close ();



Нужна ли мне информация о сертификате, если я подключаюсь с другого компьютера к этой базе данных mysql?

Есть ли что-то похожее на строку JDBC для PHP?

Было бы замечательно, если бы кто-нибудь мог опубликовать рабочий пример

Спасибо

1 Ответ

0 голосов
/ 31 января 2010

У меня нет опыта подключения MySQL по SSL. Драйвер MySQL имеет flags (MYSQL_CLIENT_SSL), которые вы можете использовать при подключении.

Чтобы установить его при подключении с помощью AdoDB, вы можете попробовать мой шаблон подключения:

$options = '';
if ($driver == 'mysql' OR $driver == 'mysqli')
{
  if ($params['pconnect'] === TRUE)
  {
    $options .= '?persist';
  }
  $flags = MYSQL_CLIENT_COMPRESS;
  if ($params['ssl'] === TRUE)
  {
    $flags = $flags | MYSQL_CLIENT_SSL;
  }
  $options .= (empty($options)?'?':'&')."clientflags=$flags";
}

$dsn = "{$driver}://{$username}:{$password}@{$hostname}/{$database}{$options}";

$adodb =& ADONewConnection($dsn);

if ($adodb)
{
  //set fetch mode
  $adodb->SetFetchMode(ADODB_FETCH_BOTH);

  //character set
  if ($driver == 'mysql' OR $driver == 'mysqli')
  {
    if (isset($params['char_set']) AND $params['char_set']
        AND isset($params['dbcollat']) AND $params['dbcollat'])
    {
      $charset    = $adodb->qstr($params['char_set']);
      $collation  = $adodb->qstr($params['dbcollat']);
      $adodb->Execute("SET NAMES $charset COLLATE $collation");
    }
  }
  if ($debug)
  {
    @ob_start();
    $adodb->debug = TRUE;
  }
}
...