问题描述
我看到了一种我无法解释自己的行为,所以我希望有人能帮助我理解正在发生的事情。
设置
我在 Debian 上使用 PHP 7.4 远程连接到安装了 OpenSSL 1.1.1d 的 Percona 8 (8.0.20-11) 服务器(也是 Debian)。
这是我到目前为止所做的:
# Create CA certificate
openssl genrsa 2048 > ca-key.pem
openssl req -new -x509 -nodes -days 3600 -key ca-key.pem -out ca.pem -subj "/CN=percona-certificate"
# Create server certificate,remove passphrase,and sign it
# server-cert.pem = public key,server-key.pem = private key
openssl req -newkey rsa:2048 -days 3600 -nodes -keyout server-key.pem -out server-req.pem -subj "/CN=percona-certificate"
openssl rsa -in server-key.pem -out server-key.pem
openssl x509 -req -in server-req.pem -days 3600 -CA ca.pem -CAkey ca-key.pem -set_serial 01 -out server-cert.pem
注意: CA 和服务器证书上的主题是相同的。
-
在 Percona 中使用 SSL 证书。除了警告之外,这没有错误:
Server SSL certificate doesn't verify: self signed certificate CA certificate ... is self signed.
-
将 SSL 证书复制到另一台服务器并使用以下 PHP 脚本进行连接:
$db_config = [ 'host' => '123.123.123.123','port' => '3306','dbname' => 'dbname','username' => 'username','password' => 'password','ssl_ca' => '/cert-path/ca.pem','ssl_cert' => '/cert-path/server-cert.pem','ssl_key' => '/cert-path/server-key.pem','ssl_verify' => false ]; $pdo = new PDO( 'MysqL:host=' . $db_config['host'] . ';port=' . $db_config['port'] . ';dbname=' . $db_config['dbname'],$db_config['username'],$db_config['password'],[ PDO::MysqL_ATTR_INIT_COMMAND => 'SET NAMES utf8',PDO::ATTR_TIMEOUT => 1,PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,PDO::MysqL_ATTR_SSL_CA => $db_config['ssl_ca'],PDO::MysqL_ATTR_SSL_CERT => $db_config['ssl_cert'],PDO::MysqL_ATTR_SSL_KEY => $db_config['ssl_key'],PDO::MysqL_ATTR_SSL_VERIFY_SERVER_CERT => $db_config['ssl_verify'] ] ); $query = $pdo->query('SELECT COUNT(*) FROM mytable');
行为
虽然 Percona 启动似乎没有问题,但我无法通过 PHP 连接到 Percona 服务器:sqlSTATE[HY000] [2006] MysqL server has gone away
最多让我感到困惑的是,当我更改证书的主题以使它们不相同时,它就像一种魅力。查询按预期返回表中的行数。
我的问题
谁能向我解释一下这里发生了什么?
为什么 Percona 正在启动但不接受来自远程且具有相同主题的证书的连接?
为什么它适用于不同的主题?
如果 OpenSSL 进行了验证,为什么它不忽略相同的主题,因为 CA 证书无论如何都是自签名的?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)