我正在测试通过SSL连接到MySQL服务器的过程。我可以通过SSL使用CLI mysql客户端进行连接,没有任何问题。但是,当尝试通过PHP连接(使用相同的用户名/主机名/密码/证书)时,我收到此错误消息:
PHP警告:PDO :: __ construct():SSL操作失败,代码为1.
OpenSSL错误消息:
错误:14090086:SSL例程:SSL3_GET_SERVER_CERTIFICATE:第7行的/home/username/mysql.php中的证书验证失败
PHP警告:PDO :: __ construct():无法使用第7行的/home/username/mysql.php中的SSL连接到MySQL PHP警告:PDO :: __ construct():[2002](尝试通过tcp://db.server.net:3306连接)在第7行的/home/username/mysql.php中
PHP致命错误:未捕获的异常' PDOException'消息' SQLSTATE [HY000] [2002]'在/home/username/mysql.php:7
但是,证书不应该是无效的,因为使用它们通过命令行客户端连接工作,对吧? PHP / openssl中是否存在可能导致此问题的问题?
这是我用于测试的脚本(屏蔽了连接信息),我在Google /其他地方找到的所有内容都告诉我这应该有效:
<?php
$db = new PDO("mysql:dbname=database_name;host=db.server.net", "user_name", "some_password", [
PDO::MYSQL_ATTR_SSL_CERT => "/etc/pki/tls/mysql/remote_client-cert.pem",
PDO::MYSQL_ATTR_SSL_KEY => "/etc/pki/tls/mysql/remote_client-key.pem",
PDO::MYSQL_ATTR_SSL_CA => "/etc/pki/tls/mysql/remote_ca-cert.pem",
]);
答案 0 :(得分:0)
我们的系统管理员设法解决了这个问题。
似乎在通过MySQL客户端连接时,不会检查CA,因此自签名证书或(在这种情况下)具有无效CA证书的证书仍然可以连接。
另一方面,PHP通过SSL连接到MySQL时会检查CA.事实证明,客户端计算机上的CA证书文件没有正确的证书信息,因此PHP不满意,但MySQL客户端没问题。