首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >php脚本无法用SSL连接到MySQL

php脚本无法用SSL连接到MySQL
EN

Stack Overflow用户
提问于 2019-02-26 09:27:43
回答 1查看 298关注 0票数 2

下面的脚本运行在Centos服务器上,并试图连接到另一台服务器上的MySQL数据库,该服务器需要SSL参数。脚本中使用的凭据可以很好地使用和Microsoft连接。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?php
ini_set ('error_reporting', E_ALL);
ini_set ('display_errors', '1');
error_reporting (E_ALL|E_STRICT);

$pdo = new PDO('mysql:host=99.99.199.199;dbname=dummy1', 'user1', 'pwd1', 
array(
    PDO::MYSQL_ATTR_SSL_KEY    =>'/etc/mysql/ssl/ck.pem',
    PDO::MYSQL_ATTR_SSL_CERT=>'/etc/mysql/ssl/cc.pem',
    PDO::MYSQL_ATTR_SSL_CA    =>'/etc/mysql/ssl/c1.pem'
));
$statement = $pdo->query("SHOW TABLES;");
$row = $statement->fetch(PDO::FETCH_ASSOC);
echo htmlentities($row['_message']);
?>

上面的代码给出了SSL操作失败的代码1 -以下是完整的消息:

致命错误: Uncaught : PDO::__construct():SSL操作与代码1一起失败。OpenSSL错误消息:错误:14090086:SSL /var/www/vhosts/zzzzz.org/httpdocs/zzodbc/dgodbc1.php:10验证在/var/www/vhosts/zzzzz.org/httpdocs/zzodbc/dgodbc1.php:10堆栈跟踪中失败:#0 /var/www/vhosts/zzzzz.org/httpdocs/zzodbc/dgodbc1.php(10):PDO->_/var/www/vhosts/zzzzz.org/httpdocs/zzodbc/dgodbc1.php(10):_/var/www/vhosts/zzzzz.org/httpdocs/zzodbc/dgodbc1.php(10):=99.9.,‘odbc_guil.’,‘pwd1 1’,数组) #1 {main} /var/www/vhosts/zzzzz.org/httpdocs/zzodbc/dgodbc1.php:10堆栈跟踪中的SQLSTATEHY000:#0 /var/www/vhosts/zzzzz.org/httpdocs/zzodbc/dgodbc1.php(10):PDO->_ /var/www/vhosts/zzzzz.org/httpdocs/zzodbc/dgodbc1.php (‘mysql:host=99.9.’,‘odbc_guil.’,‘pwd1 1’,/var/www/vhosts/zzzzz.org/httpdocs/zzodbc/dgodbc1.php中的#1 {main}

我已经验证了凭证,包括带有DSN连接的SSL参数。我检查了SSL密钥是否正确地位于/etc/mysql/ssl目录中。

任何帮助我做错事都会很好。谢谢。

--我可能用错了.,因为这些键与ODBC一起工作,所以我认为我应该使用odbc_connect并发送与MS相同的字符串,例如

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$user = "user";
$pass = "pwd";

$connection = "Driver={MySQL ODBC 5.1 Driver};Server=46.51.178.163;Database=db1;sslca=/etc/mysql/ssl/c1.pem;sslkey=/etc/mysql/ssl/ck.pem;sslcapath=/etc/mysql/ssl/;sslcert=/etc/mysql/ssl/cc.pem";

$con = odbc_connect($connection, $user, $pass);

但是要想让它工作起来,我需要在服务器上安装一个MySQL连接器,我目前正在努力解决这个问题。

EN

回答 1

Stack Overflow用户

发布于 2019-03-16 08:46:18

我已经为所有帮助过的人解决了这个问题,-thanks。这就是我学到的:

  • SSL密钥是特定于连接类型的,所以我有使用ODBC的密钥,期望它们使用PDO是错误的。
  • ODBC驱动程序( php扩展)需要安装在服务器上--它们不会自动出现。这里是一个很好的视频,展示了如何做到这一点。
  • 您需要命令行访问服务器来安装驱动程序(并将SSL密钥上传到安全位置)--它们位于/etc/mysql/ssl中。
  • 我将驱动程序安装在/usr/lib/odbc2 2/lib中,而不是在视频中的长文件夹名中。我还安装在/usr树中,因为当我尝试视频中的位置时,我没有找到文件中的错误。这两个驱动程序文件是libmyodbc5a.solibodbc5w.so.似乎只需要...5w.so文件。
  • 一旦这些文件就位,您就需要在odbcinst.ini文件夹中添加一个条目。我使用了nano,所以命令行nano odbcinst.ini会弹出包含PostgresSQL模型条目的文件。如果服务器是64位,那么以下是我在odbcinst.ini中输入的条目: mysql537 Driver64 =/usr/lib/odbc2 2/lib/libmyodbc5w.so Setup64 =/usr/lib/odbc2 2/lib/libmyodbc5w.so UsageCount =1
  • ,您必须有...64路径,否则找不到驱动程序(即Driver64 = NOT Driver= )。我先犯了这个错误。
  • 只要在odbcinst.ini的路径上找到驱动程序文件,那么事情就会正常工作。(我以为我需要odbc.ini中的条目,但现在我相信,只有在使用DSN的情况下,您才需要一些东西)。
  • 文件夹odbc2是我在/etc/lib中创建的文件夹,该文件夹已经存在。我这样做是为了通过创建一个新文件夹来避免任何权限问题。

下面是工作的代码(连接字符串与Microsoft连接中使用的字符串完全相同):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?php
ini_set ('error_reporting', E_ALL);
ini_set ('display_errors', '1');
error_reporting (E_ALL|E_STRICT);

$user = "odbcmmm";
$pass = "999999999";

$connection = "Driver={mysql537};Server=99.99.199.199;Database=db_name;UID=odbc_db_name;PWD=password;sslca=/etc/mysql/ssl/c1.pem;sslkey=/etc/mysql/ssl/ck.pem;sslcapath=/etc/mysql/ssl/;sslcert=/etc/mysql/ssl/cc.pem";

$con = odbc_connect($connection, $user, $pass);

$sql="SELECT Id from stk_item"; 
$rs=odbc_exec($con,$sql);

if (!$rs)   {
exit("Error in SQL");
}

我希望这是有用的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54891029

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文