PHP PDO SSL MySQL 连接失败
我正在尝试开发一个使用 SSL 连接到 MySQL 服务器的 PHP 应用程序。 我尝试使用 mysql_connect 并且工作正常,但使用 PDO 则不行。当我尝试连接时出现以下错误:
PDO::__construct():此流不支持 SSL/加密
看起来很奇怪的是,如果我调整证书路径(指向不存在的文件),我会得到相同的错误!
我在 Debian Squeeze 上使用 php 5.3.10,安装了以下软件包:
php5-cgi
php5-cli
php5-common
php5-fpm
php5-gd
php5-mcrypt
php5-mysql
php5-suhosin
知道吗?谢谢
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您需要删除 php-mysql 并安装 php-mysqlnd。在 Centos 上:
Ubuntu/Debian
mysqli 程序:
PDO
您的证书路径必须正确。在 SSL 中尝试此操作以确保文件存在:
远程主机(数据库服务器)也必须启用 SSL。运行查询
输出:
如果它被禁用,它将不起作用。您的 /etc/my.cnf (或 my.cnf 所在位置)必须包含:
用于生成密钥的 MySQL 资源:http://dev.mysql.com/doc/refman/5.0/en/creating-ssl-files-using-openssl.html
最后,DHE 密码不再被认为是安全的。密码不断被破解,因此您必须找出当今哪些密码被认为是安全的。
You need php-mysql removed and php-mysqlnd installed. On Centos:
Ubuntu/Debian
mysqli procedural:
PDO
Your certs paths must be correct. Try this in your SSL to ensure the files are there:
The remote host (database server) must also have SSL enabled. Run the query
OUTPUT:
If it's disabled, it will not work. Your /etc/my.cnf (or where your my.cnf is located) must contain:
MySQL Resource to generate keys: http://dev.mysql.com/doc/refman/5.0/en/creating-ssl-files-using-openssl.html
Lastly, the DHE cipher is not considered safe anymore. Ciphers are continually being broke, so you'll have to find out which are considered secure today.
您的模块列表不包括
openssl
您可以使用
php -m
检查已编译的模块。您可以通过运行 php -a 然后执行 var_dump(get_loaded_extensions()); 来检查运行时加载的所有模块,您将需要将其编译或加载为为了使用 SSL 连接的扩展。
如果扩展存在于磁盘上(检查您的 php 扩展目录 - 位于
php.ini
中),那么还要检查您的php.ini
中的行extension=php_openssl。 so
并确保它没有被注释掉。Your list of modules doesn't include include
openssl
You can check the compiled in modules with
php -m
. And you can check all modules loaded at runtime by runningphp -a
then executingvar_dump(get_loaded_extensions());
You will need this to be either compiled in, or loaded as an extension in order to use SSL connectivity.
If the extension exists on disk (check your php extensions directory - location in
php.ini
) then also check yourphp.ini
for the lineextension=php_openssl.so
and make sure it is not commented out.