【问题标题】:How do I connect with an SSL between MySQL, and PHP?如何在 MySQL 和 PHP 之间使用 SSL 连接?
【发布时间】:2015-12-12 01:58:05
【问题描述】:

我正在测试通过 SSL 连接到 MySQL 服务器。我可以使用 CLI mysql 客户端通过 SSL 毫无问题地连接。但是,当尝试通过 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 致命错误:在 /home/username/mysql.php:7 中未捕获异常 'PDOException' 并带有消息 'SQLSTATE[HY000] [2002]'

但是,证书不应该是无效的,因为使用它们通过命令行客户端进行连接是有效的,对吧? 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",
]);

【问题讨论】:

标签: php mysql openssl


【解决方案1】:

我们的系统管理员设法找出问题所在。

似乎在通过 MySQL 客户端连接时,没有检查 CA,因此自签名证书或(在这种情况下)具有无效 CA 证书的证书仍然可以连接。

另一方面,PHP 在通过 SSL 连接到 MySQL 时会检查 CA。事实证明,我们客户端机器上的 CA 证书文件没有我们证书的正确信息,所以 PHP 很不高兴,但 MySQL 客户端很好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-31
    • 2011-01-25
    • 2013-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-03
    • 1970-01-01
    相关资源
    最近更新 更多