我有一个托管在远程服务器上的MySQL数据库,它只能接受SSL连接。当我使用带有SSL选项的Java JDBC连接到此数据库时,它可以正常工作。我使用了一个特殊的jdbc字符串用于JDBC连接,如下所示 “JDBC:MySQL的://:/?verifyServerCertificate =假安培; useSSL =真安培; requireSSL =真”
我需要使用ADODB库通过PHP使用类似的连接。
我在网上发现很少有人使用ADODB mysqli扩展
(参考http://mbrisby.blogspot.com/2008/06/adodb-php-mysql-ssl.html)
创建CA证书后(我们会说它位于/path/to/ca-cert.pem),请确保以下项目位于/etc/my.cnf的[client]节或连接中用户的〜/ .my.cnf在客户端主机上:
SSL-CA = /路径/到/ CA-cert.pem
然后尝试以下PHP程序:
//这些是AdoDB库的一部分 require'/path/to/adodb-exceptions.inc.php'; 要求'/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->执行($ SQL); print_r($ res-> fields); $水库>关闭();
如果我从其他计算机连接到此mysql数据库,是否需要证书信息?
是否有类似于PHP的JDBC字符串?
如果有人可以发布一个有效的例子,那就太棒了
谢谢
答案 0 :(得分:0)
我没有将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;
}
}